Datenbank für ein Spiel

  • 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



    und DBTest_KampfActivity:



    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

  • Du hast Dir ja deine Datenbankfunktionen in einer Klasse gekapselt, dort kannst du Dir auch weitere Funktionen reinschreiben und nutzen.


    Java
    if (a.moveToFirst()) {
            	hp2= a.getInt(2);
            	dmg2= a.getInt(1);


    Solch ein Konstrukt wird schnell unübersichtlich und wenn du DIch mal verschreibst baust du dir einen Fehler ein, welchen du nur schwer findest.


    Ich würd mir in der DB Klasse gleich eine Funktion einbauen


    compare_units(int idx1, int idx2)
    {
    Hier beide Datensätze holen
    Vergleichen -> Kampf (am besten Aufruf -> andere Klasse)
    Rückgabe des Gewinners, -> Bereinigung Verlierer
    }



    Die Kampfsimulation basiert ja dann aucf einfachen Vergleichen, eventl noch Zufall ala Moral,Glück das sollte man wieder am besten in eine Klasse kapseln.

  • 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 Shop




    Wie 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 ;)

  • Also für den Popup kannst du einen Dialog mit eigenem Design machen.
    Für die unterschiedlichen Auflösungen kannst du hier gucken: Hier
    Und hier im Forum gab es meine ich auch noch was dazu ;)

    MfG,
    Christopher


    Eine gewisses Maß an Freundlichkeit kann man auch von Menschen im Internet erwarten.
    Das Forum basiert komplett auf der Freiwilligkeit ihrer Nutzer und diese sollen sich wohlfühlen! Daher seid bitte freundlich. Danke

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!