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
3
Die 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 | 40
Und das anschliessende auslesen der einzelnen Datensätze, zum mit den Variabeln einen "Kampf" zu simulieren
Layout:
Einheit 1 vs Einheit 2
LP: 50 LP: 40
Button1: Einheiten erstellen
Button2: Kampf
Wie 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
package 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;
}
}
Alles anzeigen
und DBTest_KampfActivity:
package 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;
}
}
}
Alles anzeigen
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