Vielen Dank für den Tipp. Werde mir das mal anschauen und hoffentlich bringts mich weiter
Beiträge von Dominusignis
-
-
Danke für deinen Input, nur war das ein Beispiel zum die Funktionsweise der DB zu begreifen. Wie ich das mit dem entgültigen Kampfsystem machen kann weiss ich noch nicht. Dafür bin ich zu wenig weit im ganzen Entwicklungsprozess. Erst mal das gesamte Spiel in einzelne Probleme zerlegen und diese anfangen zu verstehen und meinen Bedürfnissen anpassen Bis zum Kampfsystem gehts noch ne ne Weile. Scheitere noch an simplen Sachen wie zb: Wie rufe ich während dem Spiel ein 2. überlagertes Fenster auf (Shopmenü), welches das Spiel noch sichtbar im Hintergrund pausiert anzeigt und via Back Button zurück ins Spiel gehe
[Blockierte Grafik: http://img42.imageshack.us/img42/9917/test2uf.png]
Grafik 1: Skizze ShopWie handle ich das mit den unterschiedlichen dpi. Da in dem Spiel (Castle Defense) fixe Positionen vorgesehen sind für die Einheiten und diese natürlich auf allen Geräten an der selben Stelle sein sollen und auch wie macht man so mit unterschiedlichen Displayauflösungen eine Abstandsabfrage zum checken ist der Gegner in Range.
Hier eine Veranschaulichung, damit ein konkretes Beispiel vorhanden ist:
Gewünscht wäre, dass die Position bei allen Geräten gleich ist und gleich gross, da es in der Y-Achse 8 einheitenplätze geben soll a 40px Höhe.
(Galaxy S2 -> Landscape (fixed) screen: width 800, height 480, burg (rect 0, 0, 200, 479), Einheitenplatz (rect 140, 70, 180, 110)[Blockierte Grafik: http://img32.imageshack.us/img32/1263/testtcp.png] 1
Grafik 2: Beispiel Castle Def
Eine Variante dafür habe ich in nem Buch gefunden, dort entwickelt der Author für eine fixe Auflösung und macht beim Spielstart eine Messung der Höhe/Breite des Bildschirms und skaliert dann alles (auch Touchscreen Inputs) Doch ich frage mich, ob dann das auch wirklich geht
Naja lange Rede kurzer Sinn, ran an die Materie und weitertesten. Freut mich natürlich, wenn jemand mit Erfahrung mir Tipps hat.Gruss
EDIT: Kann sonst nun in den Noobfragen Bereich verschoben werden, da das DB Problem fürs Erste gelöst ist
-
Hallo zusammen
Ich habe beim mich über Datenbanken informieren in dieses Forum verirrt, aber bin dann leider nicht konkret fündig geworden.Als ich vor zwei Wochen eine Spielidee hatte, war mir JAVA nur vom Hörensagen ein Begriff und hatte ausser veraltetem Programmierwissen aus Schulzeiten (TI-89 ) seit sicher 8 Jahren nichts mehr damit zu tun.
Jedoch jetzt ist das Android Programmierfieber ausgebrochen und kein Tutorial vor mir sicher.
Nur eine elementare Sache will einfach nicht klar werden und leider beschäftigen sich die meisten Datenbanken nur mit Strings als gespeicherte Datensätze und werd schlicht und einfach nicht schlau draus.Für das Spiel an sich ist geplant, dass es Positionen 1-8 für menschliche Einheiten hat plus 3 für Katapulte oder Ballisten (Position 9-11), jede Einheit hat einen Typ (4 menschliche + 2 mechanische) und jeweils Level, XPmax, HP, Range, Attackspeed, Damage. Die Einheiten sollten per Drag getauscht werden können und somit müsste in der DB in dem Fall nur die Position geändert werden, der Rest bleibt fix.
Tabelle:
ID Position Unittype Unitlevel Skillpoints XP XP_Levelup Actual HP Max HP Base Range Base Speed Base Damage
0
1
2
3Die eine Frage wäre: Ist es für so eine Anwendung notwendig/am einfachsten eine Datenbank zu erstellen? Und wenn ja, wie lese ich Variabeln aus und verwende die?
Ich wäre sehr froh um Hilfe was das Anlegen einer einfachen Testdatenbank.
units
_id | damage | healthpoints
-----------------------------------------
0 | 15 | 50
1 | 20 | 40Und das anschliessende auslesen der einzelnen Datensätze, zum mit den Variabeln einen "Kampf" zu simulieren
Layout:Einheit 1 vs Einheit 2
LP: 50 LP: 40Button1: Einheiten erstellen
Button2: KampfWie ich das Ganze implementieren kann ist mir klar, aber nicht, wie ich einzelne Werte (zb Einheit 1 (_id=0) schaden (15) neu speichern kann und damit dann rechnen.
Bisher habe ich:
UPDATE: Habs jetzt selber irgendwie hingekriegt, jedoch hat jemand erfahrenes sicher noch eine Verbesserung zum vorliegenende Code (vielleicht auch auf das oben beschriebene geplante Szenario hin.
DBAdapter.java
Java
Alles anzeigenpackage test.db.kampf; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class DBAdapter { public static final String KEY_ROWID = "_id"; public static final String KEY_HP = "healthpoints"; public static final String KEY_DMG = "damage"; private static final String TAG = "DBAdapter"; private static final String DATABASE_NAME = "fight"; private static final String DATABASE_TABLE = "units"; private static final int DATABASE_VERSION = 1; private final Context context; private DatabaseHelper DBHelper; private SQLiteDatabase db; public DBAdapter(Context ctx) { this.context = ctx; DBHelper = new DatabaseHelper(context); } private static class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE IF NOT EXISTS " + DATABASE_TABLE + " (_id INTEGER PRIMARY KEY AUTOINCREMENT," + " damage INT," + " healthpoints INT);"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + newVersion + ", which will destroy all old data"); db.execSQL("DROP TABLE IF EXISTS units"); onCreate(db); } } //---opens the database--- public DBAdapter open() throws SQLException { db = DBHelper.getWritableDatabase(); return this; } //---closes the database--- public void close() { DBHelper.close(); } //---insert a unit into the database--- public long insertUnit(Integer damage, Integer healthpoints) { ContentValues initialValues = new ContentValues(); initialValues.put(KEY_DMG, healthpoints); initialValues.put(KEY_HP, damage); return db.insert(DATABASE_TABLE, null, initialValues); } //---deletes a particular unit--- public boolean deleteUnit(long rowId) { return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; } //---retrieves all the units--- public Cursor getAllUnits() { return db.query(DATABASE_TABLE, new String[] { KEY_ROWID, KEY_HP, KEY_DMG}, null, null, null, null, null); } //---retrieves a particular unit--- public Cursor getUnit(long rowId) throws SQLException { Cursor mCursor = db.query(true, DATABASE_TABLE, new String[] { KEY_ROWID, KEY_HP, KEY_DMG }, KEY_ROWID + "=" + rowId, null, null, null, null, null); if (mCursor != null) { mCursor.moveToFirst(); } return mCursor; } //---updates a unit--- public boolean updateUnit(long rowId, Integer healthpoints, Integer damage) { ContentValues args = new ContentValues(); args.put(KEY_HP, healthpoints); args.put(KEY_DMG, damage); return db.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0; } }
und DBTest_KampfActivity:
Java
Alles anzeigenpackage test.db.kampf; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class DBTest_KampfActivity extends Activity implements OnClickListener { public int hp1; public int hp2; public int dmg1; public int dmg2; DBAdapter db = new DBAdapter(this); db.open(); Cursor c = db.getUnit(1); if (c.moveToFirst()) { hp1= c.getInt(2); dmg1= c.getInt(1); System.out.println("" + c.getInt(0)); System.out.println("" + c.getInt(1)); System.out.println("" + c.getInt(2)); } else { System.out.println("No Units found"); db.close(); } Cursor a = db.getUnit(2); if (a.moveToFirst()) { hp2= a.getInt(2); dmg2= a.getInt(1); System.out.println("" + a.getInt(0)); System.out.println("" + a.getInt(1)); System.out.println("" + a.getInt(2)); } else { System.out.println("No Units found"); db.close(); } } @Override public void onClick(View v) { Button b = (Button) v; switch (b.getId()) { case R.id.button1: db.insertUnit(15, 50); db.insertUnit(20, 40); db.close(); System.out.println("Test"); break; case R.id.button2: hp1 = hp1 - dmg2; hp2 = hp2 - dmg1; System.out.println(""+ hp1); System.out.println(""+ hp2); db.open(); db.updateUnit( 1, hp1, dmg1); db.updateUnit( 2, hp2, dmg2); break; } } }
Die Datenbank wird korrekt erstellt und durch Knopfdruck werden die neuen Datensätze ohne Fehler eingefügt, aber wie kann ich nun einzelne Werte (sprich HP Unit1, HP Unit2, Schaden UNIT1 und Schaden Unit2) auslesen?
Hoffe jemand hat mir einen Ansatz oder die Lösung. (Nach 3 Stunden hat sich die Anfangsfrage immens reduziert, da anfangs der komplette Quellcode noch nicht vorhanden war.
(Quelle: http://www.devx.com/wireless/Article/40842/0/page/1 )Gruss Dominusignis