Topscores opslaan

Status
Niet open voor verdere reacties.

tranceftw

Gebruiker
Lid geworden
6 apr 2009
Berichten
149
Hallo,

Ik heb nog een vraag over het project waar ik mee bezig ben (de link erheen vind je in mijn handtekening). Nu, alles werkt al heel goed, maar nu zou ik graag topscores implementeren. Echter, ik denk niet dat dit mogelijk is binnen Java. Java vergeet namelijk alles wat er is gebeurt als het afgesloten wordt. In welke richting moet ik gaan zoeken om dit te verwezenlijken? Nuttige tips of handige links misschien?

mvg Nicholas
 
Misschien is dit een idee:

Scores in database laten opslaan en die dan ordenen in de database en de gegevens weer opvragen uit de database.

M.v.g.
Bram
 
Laatst bewerkt:
Wat is een database? Hoe begin je eraan? Is dat in een bepaalde programmeertaal?
 
Een database is een opslagplaats voor je data. Het is geen programmeertaal maar om er mee te kunnen werken zal je wel basiskennis van SQL en PHP moeten hebben
 
Wat is een database:
http://nl.wikipedia.org/wiki/Databank
http://en.wikipedia.org/wiki/Database

Als je die links even bekijkt zie je dat het een plek is waar je gegevens kan opslaan.
Databases kan je zelf opzetten een goede is bijv. USB-webserver ( http://usbwebserver.com/ ) Deze database kan je gewoon vanaf je usbstickje aanzetten.
Een goede overzichtelijke administratie tool om databases mee te bewerken vind ik zelf: http://www.phpmyadmin.net/home_page/index.php
Deze is eigenlijk voor php bedoeld, maar om tabellen etc toe te voegen zal het voldoende zijn.

Even een schriftelijk voorbeeldje van php:
Databases zijn goed te gebruiken bij php etc. omdat je gegevens kan opslaan in (de database dus) en deze kan opvragen bijv. bij het inloggen op een site. Als je je registreert schrijf de site de gegevens naar een database (je naam en wachtwoord) als je inlogt kijkt de site of de gegevens in de database staan. staan ze er dan ben je ingelogt anders bestaat je account dus niet.

Bij java kan je ook databases gebruiken om gegevens erin op te slaan en ze er weer uit te halen.

Als je je er een beetje in wilt verdiepen zou ik als ik jou was even op internet kijken bijv. deze link:
http://en.wikipedia.org/wiki/Java_Database_Connectivity

en misschien even een paar howto's van databases doorkijken.

een voorbeeld connectie met database via java:
Code:
public void addScore(String name,int pogingen, long time){
        Connection conn = null;
       
           try
           {
               
               String userName = "root";
               String password = "usbw";
               
               String url = "jdbc:mysql://localhost:3307/mastermind";
               Class.forName ("com.mysql.jdbc.Driver").newInstance ();
               conn = DriverManager.getConnection (url, userName, password);
               PreparedStatement insertPersoon;
               String updateString = "Insert INTO scores set tijd = ?, aantal = ?, naam = ?";
               insertPersoon= conn.prepareStatement(updateString);
               insertPersoon.setLong(1, time);
               insertPersoon.setInt(2, pogingen);
               insertPersoon.setString(3, name);
               insertPersoon.executeUpdate();

           }
           catch (Exception e)
           {
               System.err.println ("Er kan geen verbinding met de database gemaakt worden!");
           }
           finally
           {
               if (conn != null)
               {
                   try
                   {
                       conn.close ();  // Hiermee wordt de connectie uitgeschakeld!  System.out.println ("Database connection terminated");
                   }
                   catch (Exception e) { /* ignore close errors */ }
               }
           }
    }
    public void printHighScore(){
        Connection conn = null;

           try
           {
               String userName = "root";
               String password = "usbw";
               String url = "jdbc:mysql://localhost:3307/mastermind";
               Class.forName ("com.mysql.jdbc.Driver").newInstance ();
               conn = DriverManager.getConnection (url, userName, password);
               Statement s = conn.createStatement ();
               s.executeQuery ("SELECT * FROM scores order by aantal ASC, tijd ASC LIMIT 0,10");
               ResultSet rs = s.getResultSet ();
               int count = 0;
               while (rs.next ())
                {
                 
                    String naamVal = rs.getString ("naam");
                    String aantalVal = rs.getString ("aantal");
                    String tijdVal = rs.getString ("tijd");
                    System.out.println (
                    "naam = " + naamVal
                    + ", aantal = " + aantalVal
                    + ", tijd = " + tijdVal);
                    ++count;
                }
                rs.close ();
                s.close ();
 
           }
           catch (Exception e)
           {
               System.err.println ("Er kan geen verbinding met de database worden gemaakt!");
           }
           finally
           {
               if (conn != null)
               {
                   try
                   {
                       conn.close ();  // Hiermee wordt de connectie uitgeschakeld!  System.out.println ("Database connection terminated");
                   }
                   catch (Exception e) { /* ignore close errors */ }
               }
           }
    }
 
Laatst bewerkt:
Bedankt. Ik ga het eens uitzoeken hoe het allemaal werkt. :-) Heb je trouwens voor jouw voorbeeldje nog iets extra nodig? Of werkt dit gewoon op zich?

grts
 
Je kan hem niet zo gebruiken, omdat er dingen in waarden in de database worden gezet etc.
je kan natuurlijk wel de standaard methodes eruit halen en deze gebruiken zoals het connectie maken. Natuurlijk wel met jou database gegevens.

Als je nog tijd hebt zou ik ook even kijken naar SQL http://nl.wikipedia.org/wiki/SQL
 
Laatst bewerkt:
Tijd heb ik genoeg. Ik kies namelijk zelf wat ik bijleer aangezien ik Java op mezelf leer. Er bestaat in het 5de middelbaar jammer genoeg nog geen richting waar je informatica kunt volgen gecombineerd met toch voldoende wiskunde. :-(
 
Nuja... Ik heb ook eens geïnformeerd bij een vriend en hij raadt me aan om gewoon met een textfile te werken en daarin alles op te slaan. Hij zegt dat dit veel simpeler is en het gemakkelijkst om topscores op te slaan. Nadeel denk ik wel: je kan de topscores dus gewoon veranderen als je dat wil.
 
en er zit nog een nadeel aan: als je een database gebruikt worden je scores op 1 plek allemaal netjes opgeslagen stel dat je je spel ooit wil uitbreiden naar multiplayer(zal met snake moeilijk gaan) of op verschillende pc's spelen en de topscores dan bepalen dan is een database een uitkomst vind ik in ieder geval, maar mooi dat je vraag is opgelost door middel van het tekstbestandje.
Succes met je snake verder.
 
Laatst bewerkt:
Daar heb je een punt. Ik gebruik voorlopig tekstbestand, maar ga me binnenkort wel eens verdiepen in dat database-gedoe
 
Het is heel erg simpel om in java iets op te slaan in bestand..en weer terug te lezen...

In dit voorbeeld wordt de Class TopScore opgeslagen...Maar je kan elke klasse opslaan zolang deze klasse maar "implemtents serializable" doet...

Het bestandje heet in dit geval topscore.dat (dit is geen text file, zodat je het ook niet makelijk kunt editten...)


Code:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class Main {

    public static void main(String[] args) {
        TopScore score = new TopScore();
        score.topScore = 100;
        try {
            System.out.println("Top score = " + score.topScore);

            System.out.println("Top score wegschrijven...");
            ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("C:\\topscore.dat"));
            out.writeObject(score);

            score.topScore = 0;
            System.out.println("Score is gereset.. score is :" + score.topScore);

            System.out.println("Top score inlezen...");

            ObjectInputStream in = new ObjectInputStream(new FileInputStream("C:\\topscore.dat"));
            score = (TopScore) in.readObject();

            System.out.println("Top score = " + score.topScore);

        } catch (IOException ie) {
            System.out.println("Er is iets fout gegaan met schrijven/lezen van topscore.");
        } catch (ClassNotFoundException cnf) {
            System.out.println("Als je dit ziet is er iets grondig fout met je programma.");
        }
    }

    public static class TopScore implements Serializable {
        public int topScore;
    }
}
 
Tijd heb ik genoeg. Ik kies namelijk zelf wat ik bijleer aangezien ik Java op mezelf leer. Er bestaat in het 5de middelbaar jammer genoeg nog geen richting waar je informatica kunt volgen gecombineerd met toch voldoende wiskunde. :-(
Ik heb vorig jaar mijn HAVO afgerond met wiskunde A en geen natuurkunde. Toch zit ik momenteel op HBO Technische Informatica. Programmeren hebben we nu al gedaan. Misschien is de open dag van Avans iets voor jou? komende zaterdag ( 14 november 2009 ) is er weer een open dag. Echt een aanrader om even binnen te kijken. Mijn opleidingskeuze is ook in de laatste paar maanden gemaakt en ik ben er tot nu toe heel erg blij mee. Als je hart ligt bij het programmeren zet ik echt dat je even langs moet gaan.

Lovensdijkstraat 61
in Breda
Voor Technische Informatica moet je op de 5e verdieping zijn (lift mag je gewoon gebruiken).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan