2d shooter mit highscore in datenbank

Gregor89

Mitglied
Hallo und Guten Tag ich Plage mich nun schon seit über einer Woche mit diesem Projekt und weis im Moment nicht mehr weiter darum habe ich mich entschlossen hier mal nachzufragen. Wie der Titel schon sagt, versuche ich momentan ein einfachen 2d arcade shooter zu schreiben, einfach gehalten man selbst ist ein blauer Würfel und soll Rote Würfel abschießen, und dann ein highscore system mit den 10 besten Spielern, speichern will ich in einer Sql datenbank. Nun zu meinem Problem . Wie kann ich es schaffen maximal 10 zu speichern, und die Platzierung automatisch 1-10 zu zuweisen. Hier mal mein datenbank code für den highscore.
[SIZE=+1]
[/SIZE]
Code:
package main.highscore;



import[URL="http://www.java-forum.org/#2902958"] java[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL].sql.Connection;
import[URL="http://www.java-forum.org/#33666929"] java[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL].sql.DatabaseMetaData;
import[URL="http://www.java-forum.org/#4187164"] java[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL].sql.DriverManager;
import[URL="http://www.java-forum.org/#4924945"] java[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL].sql.PreparedStatement;
import[URL="http://www.java-forum.org/#67715218"] java[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL].sql.ResultSet;
import[URL="http://www.java-forum.org/#31610600"] java[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL].sql.SQLException;
import[URL="http://www.java-forum.org/#40246790"] java[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL].sql.Statement;
import[URL="http://www.java-forum.org/#54571414"] java[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL].util.ArrayList;
import[URL="http://www.java-forum.org/#81936381"] java[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL].util.List;




public class Highscore {
   
    public static void createTableHighScoure() {
          Connection con = getConncetion();
          Statement stm = null;


          try {
                 DatabaseMetaData meta = con.getMetaData();


                 String createString = "CREATE TABLE HIGH_SCORE"
                               + "(ID INT NOT NULL GENERATED ALWAYS AS IDENTITY, "
                               + "NAME VARCHAR(32) NOT NULL, " + "PUNKTE INT NOT NULL)";


                 stm = con.createStatement();
                 stm.executeUpdate(createString);
          } catch (SQLException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
          } finally {


                 if (stm != null) {
                        try {
                               stm.close();
                        } catch (SQLException e) {
                               // TODO Auto-generated catch block
                               e.printStackTrace();
                        }


                 }
          }


    }


    private static Connection getConncetion() {
          Connection con = null;
          String[URL="http://www.java-forum.org/#47626008"] driver[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL] = "com.mysql.jdbc[URL="http://www.java-forum.org/#63929228"] Driver[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL]"; // bsp
                                                                                                         // connectstring
                                                                                                         // org.apache.derby.jdbc.ClientDriver
          // String[URL="http://www.java-forum.org/#36385946"] driver[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL] = "org.apache.derby.jdbc.ClientDriver";
          String dbName = "Highscore";
          String connectionURL = "jdbc:mysql:" + dbName + ";create=true";
          try {
                 Class.forName[URL="http://www.java-forum.org/#29976254"] driver[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL]);
                 // DriverManager.setLogStream(System.out);
                 con = DriverManager.getConnection("jdbc:mysql://localhost/highscore", "root", "6232"); // Fabrik Muster
          } catch (Exception e) {
                 e.printStackTrace();
          }
          return con;
    }


    public static  List<SpielerPunkte> findAll() {
                 List<SpielerPunkte> list =new ArrayList<SpielerPunkte>();
                 
                 
                 Connection con = getConncetion();
                 PreparedStatement stm = null;
                 ResultSet rs = null;
                 try {
                        stm = con
                                     .prepareStatement("SELECT * from score ORDER BY PUNKTE DESC");
                        
                        rs = stm.executeQuery();
                        while (rs.next()) {
                            // System.out.println(rs.getInt(1)+" "+rs.getString(2) +" "+ rs.getInt(3));
//                               System.out.println(rs.getString(2));
//                               System.out.println(rs.getInt(3));
                               SpielerPunkte sp = new SpielerPunkte(rs.getInt(1), rs.getString(2),rs.getInt(3));
                               list.add(sp);
                               System.out.println(sp);
                               
                        }
                 } catch (SQLException e) {
                        e.printStackTrace();
                 } finally {
                       [URL="http://www.java-forum.org/#90455321"] cleanUp[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL](stm, rs);
                 }


                 return list;
          }


    public static boolean insert(SpielerPunkte sp) {
          Connection con = getConncetion();
          PreparedStatement stm = null;
          boolean ok = false;
          try {
                 stm = con
                               .prepareStatement("insert into score(ID,NAME,PUNKTE) values (?, ? , ?)");
                 // String insertString =
                 // "insert into WISH_LIST(WISH_ITEM) values ('"+ wList.getItem()
                 // +"')"; // prepared stamtents !!!
                 stm.setInt(1, sp.getId());
                 stm.setString(2, sp.getName());
                 stm.setInt(3, sp.getPunkte());


                 int anzahlDSgeändert = stm.executeUpdate();
                 ok = anzahlDSgeändert == 1;
          } catch (SQLException e) {
                 e.printStackTrace();
          } finally {
                 try {
                        if (stm != null)
                               stm.close();
                 } catch (SQLException e) {
                        e.printStackTrace();
                 }
          }
          return ok;
    }
    public static void[URL="http://www.java-forum.org/#5533362"] cleanUp[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL](Statement stm, ResultSet rs) {
          try {
                 if (rs != null) {
                        rs.close();
                 }
          } catch (SQLException e) {
                 e.printStackTrace();
          } finally {
                 try {
                        if(stm != null){
                               stm.close();
                        }
                 } catch (SQLException e) {
                        e.printStackTrace();
                 }
          }
    }
    
    
    public static void main(String[] args) {
         
          //createTableHighScoure();
//          insert(new SpielerPunkte(0, "A Spieler", 70));
//          insert(new SpielerPunkte(0, "B Spieler", 10));
//          insert(new SpielerPunkte(0, "V Spieler", 50));
        
          List<SpielerPunkte> list = findAll();
          System.out.println(list.size());
         


    }



}[SIZE=+1] 
[/SIZE]
 
Zuletzt bearbeitet:

Tom299

Bekanntes Mitglied
Willst du nur 10 Einträge abspeichern oder willst du die Top 10 auslesen und nicht alle Einträge?

Wenn du nur 10 Einträge willst, geht das mit "limit 10"
 

Gregor89

Mitglied
ich möchte eig. nur die ersten 10 auslesen denn wenn man nicht unter den top 10 ist will ich garnicht zulassen dass man sich eintragen kann.
ok das hat schonmal funktioniert.

Fehlt mir jetzt eig. nur noch wie ich die Platzierung gleich von 1-10 nummeriere
 
Zuletzt bearbeitet:

Tom299

Bekanntes Mitglied
Du hast doch schon absteigend nach Punkten sortiert, dann brauchst du doch nur fortlaufend die Plätze zu vergeben, also von 1 - 10, wo ist da das Problem?
 

Gregor89

Mitglied
die hat sie ja mit der id welche als Platzierung ausgegeben wird
Code:
package main.highscore;

public class SpielerPunkte {
    private int id;
    private String name;
    private int punkte;


    public SpielerPunkte(int id, String name, int punkte) {
          super();
          this.id = id;
          this.name = name;
          this.punkte = punkte;
    }


   
    public int getId() {
          return id;
    }




    public void setId(int id) {
          this.id = id;
    }




    public String getName() {
          return name;
    }




    public void setName(String name) {
          this.name = name;
    }




    public int getPunkte() {
          return punkte;
    }




    public void setPunkte(int punkte) {
          this.punkte = punkte;
    }




    @Override
    public String toString() {
          return "SpielerPunkte Platzierung= " + id + " name= " + name + " punkte: "
                        + punkte + "\n";
    }
}
 

Tom299

Bekanntes Mitglied
Na wenn die ID deine Platzierung ist, dann hast du doch deine Nummerierung, verstehe dann nicht, was dir noch fehlt?

Allerdings würde ich unter ID eher die Datenbank-ID verstehen, die man auch braucht, wenn man ein UPDATE macht usw. Da würde ich lieber noch ein zusätzliches Feld für den Rang nehmen.
 

Gregor89

Mitglied
naja mein problem ist das wenn ich das programm ausführe ist eben bei der id 0 bei allen 10 anstatt eben 1. 2. 3. usw.
verstehst jetzt mein problem ?
 

Tom299

Bekanntes Mitglied
Wenn du die DB-Einträge so gemacht hast
Code:
//          insert(new SpielerPunkte(0, "A Spieler", 70));
//          insert(new SpielerPunkte(0, "B Spieler", 10));
//          insert(new SpielerPunkte(0, "V Spieler", 50));

ist ja klar, daß ID immer 0 ist. Vielleicht solltest du dir mal deine Daten in der DB anschauen, was da wirklich drin steht. Der Code im Programm sollte eigentlich funktionieren.

Solltest du aber für die DB-ID auch die ID von SpielerPunkte verwenden, hast du ein Problem ;-)
 

Tom299

Bekanntes Mitglied
Weil normalerweise die ID der Primärschlüssel in einer ordentlichen Datenbank ist, du hast aber beim insert 3x die ID 0 vergeben. Als ID nimmt man in der Regel ein AutoIncrement oder die UUID, damit jeder Datensatz der Tabelle eindeutig ist.

Den Rang würde ich gar nicht abspeichern, wenn ich mir das so recht überlege. Der ergibt sich durch die Sortierung der Einträge. Also würde ich die Tabelle z.B. so anlegen:

ID Name Punkte
1 Spieler A 70
2 Spieler B 50
3 Spieler C 95
usw.

Wenn du jetzt nach Punkten umgekehrt sortierst, hast du deine Rangfolge, beginnend bei 1 und das kannst du dann beim Erzeugen deines SpielerPunkte-Objekts als Rang angeben.
 

Tom299

Bekanntes Mitglied
Meinst du jetzt mit fortlaufende Nummer den Rang?

Java:
                try {
                        stm = con
                                     .prepareStatement("SELECT * from score ORDER BY PUNKTE DESC");
                        
                        rs = stm.executeQuery();
                        int rang = 0;
                        while (rs.next()) {
                               rang++;
                            // System.out.println(rs.getInt(1)+" "+rs.getString(2) +" "+ rs.getInt(3));
//                               System.out.println(rs.getString(2));
//                               System.out.println(rs.getInt(3));
                               SpielerPunkte sp = new SpielerPunkte(rs.getInt(1), rs.getString(2),rs.getInt(3));
                               list.add(sp);
                               System.out.println(sp);
                               
                        }
                 } catch (SQLException e) {
                        e.printStackTrace();
                 } finally {
                        cleanUp(stm, rs);
                 }

Du hast doch deine Schleife und da fügst du einen Zähler hinzu und erhöhst ihn einfach immer um 1.
 

Gregor89

Mitglied
So nun muss ich nochmal Lästig sein, da ich ja ein spiel schreibe habe ich ein sehr sehr großes Problem entdeckt, ich weis nicht warum und ich weis nicht wieso, aber ich bekomme die int variable score nur auf den bildschirm, und wenn ich meine checkscore methode bei der customupdate einsetze ist das auch äußerst kontraproduktive.
Code:
package main.scene;

import[URL="http://www.java-forum.org/#68064999"] java[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL].sql.Array;
import[URL="http://www.java-forum.org/#69214778"] java[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL].sql.ResultSet;
import[URL="http://www.java-forum.org/#29687499"] java[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL].sql.SQLException;
import[URL="http://www.java-forum.org/#57155555"] java[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL].text.NumberFormat;
import[URL="http://www.java-forum.org/#10044607"] java[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL].util.Iterator;
import[URL="http://www.java-forum.org/#42206906"] java[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL].util.LinkedList;
import[URL="http://www.java-forum.org/#71874600"] java[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL].util.List;
import[URL="http://www.java-forum.org/#90349248"] java[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL].util.Random;


import javax.swing.JOptionPane;
import javax.swing.text.html.HTMLDocument.HTMLReader.SpecialAction;


import org.newdawn.slick.*;
import org.newdawn.slick.geom.Vector2f;


import main.highscore.Highscore;
import main.highscore.SpielerPunkte;
import main.objects.*;


/*
 * The actuall game Scene
 * Here we implement all the game logics
 */
public class MiniGame extends Scene {
    // The player
    private Player p;
    
    
    


    // a list with enemys
    private LinkedList<Enemy> enemys;


    // a random to make the game ... yea random =D
    private Random r;


    // This will decide how often enemys spanw
    private float SPAWN_CHANCE = 8;


    // Some variables for the players progress
    public int score ;
    private float multi = 1.0f;
    private long time = 0;
    public int tester;








    
    
    
    protected void CustomRender(GameContainer gc, Graphics g)
            throws SlickException {
        // We clear the screan manually with a transparent black to get this
        // cool look
        
        
        
        
        
        
        
        g.setColor(new Color(0, 0, 0, 50));
        g.fillRect(0, 0, 1280, 720);
        
        // Render everything
        p.render(gc, g);
        for (Enemy e : enemys) {
            e.render(gc, g);
        }


        // Get the multiplicator and the time with only two numbers behind the .
        // for example : 2.14 instead of 2.14212312
        NumberFormat nf = NumberFormat.getInstance();
        nf.setMinimumFractionDigits(2);
        nf.setMaximumFractionDigits(2);


        // Display the players progress
        g.setColor(Color.white);
        g.drawString("Score : " + score, 10, 5);
        g.drawString("Multiplicator : " + nf.format(multi), 600, 5);
        g.drawString("Time : " + nf.format((double) time / 1000), 1080, 5);
        
    }


    protected void CustomUpdate(GameContainer gc, int t) throws SlickException {
        //[URL="http://www.java-forum.org/#26791724"] Update[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL] everything
        p[URL="http://www.java-forum.org/#67340302"] update[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL](gc, t);
        Iterator<Enemy> i = enemys.iterator();
        while (i.hasNext()) {
            Enemy e = i.next();
            e[URL="http://www.java-forum.org/#49155750"] update[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL](gc, t);
            
            // remove enemys that are dead or at the player position
            // the player position is necessary because the enemys continue
            // spawning even if the player is dead
            // -> there would be unlimited without
            if (!e.isAlive()) {
                score += 10 * multi;
                i.remove();
                
                
            } else if (e.getPos().copy().sub(p.getPos()).lengthSquared() < 5) {
                i.remove();
                
                
                
                
                
                
            }
            p.checkBulletCollision(e.getBullets());
            e.checkBulletCollision(p.getBullets());
        }


        // Set a maximum spawn chance ( lower = faster spawn );
        if (SPAWN_CHANCE < 1)
            SPAWN_CHANCE = 1;


        // Should we spawn an enemy ?
        if (r.nextInt((int) (SPAWN_CHANCE * t)) == 0) {
            // Jep, so we just spawn one at a random position
            Enemy e = new Enemy(new Vector2f(r.nextInt(1280), r.nextInt(720)),
                    p);
            e.init(gc);
            enemys.add(e);
        }


        // Make the game harder with every[URL="http://www.java-forum.org/#77101893"] update[IMG]http://cdncache-a.akamaihd.net/items/it/img/arrow-10x10.png[/IMG][/URL] call if we are dead -> the
        // nice end effect
        if (!p.isAlive()) {
            SPAWN_CHANCE -= 0.1;
            return;
        } else {
            // add some progress if the player survives
            time += t;
            multi += (float) t / 5000;
        }


    }


    


    public void init(GameContainer gc) throws SlickException {
        // Init all our objects
        p = new Player(new Vector2f(200, 200));
        p.init(gc);
        r = new Random();


        enemys = new LinkedList<Enemy>();


        // We want to clear the screen our self for the cool effect
        gc.setClearEachFrame(false);
    }


    
    // The name of the game Scene
    public String toString() {
        return "game";
    }
    public void checkscore(){
        Highscore betterscore= new Highscore();
        int rang=0;
        //String input=JOptionPane.showInputDialog(null);
        String name="hans";
        int punkte=zwischenspeicher();
        System.out.println(punkte);
        
                
        SpielerPunkte sp = new SpielerPunkte(rang, name, punkte);
        betterscore.insert(sp);
    }
    
    
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
antonbracke Multiplayer Shooter mit NullPointerException Spiele- und Multimedia-Programmierung 4
K 2D-Shooter Spiele- und Multimedia-Programmierung 16
A Mein 2D Shooter Spiele- und Multimedia-Programmierung 8
N Counter Stickman-Shooter Spiele- und Multimedia-Programmierung 13
B Fliegen Shooter Spiele- und Multimedia-Programmierung 14
F 2D Shooter (von oben) Kugelberechnung und drehen der Figur Spiele- und Multimedia-Programmierung 17
C 2D Shooter - wie umsetzen? Spiele- und Multimedia-Programmierung 4
TheKing Java3D-Shooter View Spiele- und Multimedia-Programmierung 2
Developer_X X-Shooter Game Spiele- und Multimedia-Programmierung 21
C Space Shooter Spiele- und Multimedia-Programmierung 11
J 3D-Schleich Shooter Spiele- und Multimedia-Programmierung 9
E Hilfe bei Highscore programmierung Spiele- und Multimedia-Programmierung 3
Java Kaffee Highscore Spiele- und Multimedia-Programmierung 5
D Problem beim Öffnen einer PHP für eine Highscore Spiele- und Multimedia-Programmierung 5
G highscore in *.dat speichern! Spiele- und Multimedia-Programmierung 8
F Highscore-Liste Spiele- und Multimedia-Programmierung 5
A Universum und Datenbank Spiele- und Multimedia-Programmierung 5
S Datenbank gesucht für Bilder(gif-dateien) Spiele- und Multimedia-Programmierung 5
J Simulation mit vielen Objekten: Datenbank? Spiele- und Multimedia-Programmierung 6

Ähnliche Java Themen


Oben