|
[Gelöst] [Spiel, v7] Balloons
|
| MarcusG |
Geschrieben am 05. März 2009 14:43:59
|


Posts: 2944
Registriert seit: 21.01.09
MeisterNächstes Level: 2951/5000 Scores: gesperrt
|
Hallo zusammen!
Ich hzab mal wieder ein Problem.
Es geht um ein von mir geschriebenes Spiel bzw. ein javascript-Game welches ich für PHP-Fusion angepasst habe.
Und zwar wird hier der Highscore in einer eigenen DB-Tabelle gespeichert.
Nun das Problem:
Ich bekomme es nicht hin, dass der Highscore nur gespeichert wird wenn er noch nicht vorhanden ist in der DB oder wenn er höher ist als ein bereits gespeicherter.
Nun gut, da ich das nicht hinbekam, dachte ich mir ich filtere das raus bei der Anzeige der Highscore-Liste.
Aber auch dabei hab ich Schwierigkeiten.
Ich hab es mit "group by user_id order by score desc limit 10" probiert, aber dann wurde trotzdem nicht der höchste Score angezeigt sondern ein beliebiger.
Hier der Code aus der javascript-Datei, der Score wird mit $_get vom Javascript übergeben und per php in die DB geschrieben:
GeSHi: Javascript if (checkWinner()) { //Allows you to write high scores to a file. document.location = ("balloons.php?shots=" + winTotal)
gewandelt in 0.006 Sekunden, benutzt wurde GeSHi 1.0.8.9
Hier die Verarbeitung des übergebenen Scores:
GeSHi: PHP opentable($locale['BALL_title']); // your code here include "ball_functions.php"; echo "<br /><center><a href='balloons.php'><input type='submit' value='".$locale['BALL001']."' class='button'></a>"; if (iMEMBER){ if (isset($_GET['shots'])) { $score = stripinput($_GET['shots']); $result = dbquery("INSERT INTO ".DB_BALLOONS_SCORE." SET user_id='".$userdata['user_id']."', score='".$score."', monat='".$monat."'"); redirect("balloons.php"); } } closetable(); opentable("Highscore"); echo "<center><h2>Die 10 besten Spieler</h2></center>"; echo "<table class='tbl-border center'>"; echo "<tr class='tbl2'><td align='center' width='150'><b>Name</b></td><td align='center'><b>Punkte</b></td></tr>\n"; $result_tbl = dbquery("select * from ".DB_BALLOONS_SCORE." order by score desc limit 10"); while ($data_tbl = dbarray($result_tbl)) { $usr = $data_tbl['user_id']; $result_usr = dbquery("select * from ".$db_prefix."users where user_id=$usr"); $data_usr = dbarray($result_usr); $prflnk = BASEDIR."profile.php?lookup=".$usr; echo "<tr><td align='center'><a href='".$prflnk."'>".$data_usr['user_name']."</a></td> <td align='center' >".$data_tbl['score']."</td></tr>"; } if (iADMIN) { echo "<tr class='tbl1'><td colspan='2'> </td></tr>"; echo "<tr class='tbl2'><td align='center' colspan='2'><a href='balloons.php?delscore'><input type='submit' value='Highscore löschen' class='button'></a></td></tr>"; } echo "</table>"; if (isset($_GET['delscore'])) { $result = dbquery("TRUNCATE TABLE ".DB_BALLOONS_SCORE); redirect("balloons.php"); } closetable();
gewandelt in 0.249 Sekunden, benutzt wurde GeSHi 1.0.8.9
Die $locale :
GeSHi: PHP $locale['BALL_title'] = "Ballons"; $locale['BALL_desc'] = "Zerstöre soviele Ballons wie Du kannst."; $locale['BALL_link1'] = "Ballons"; $locale['BALL001'] = "Neues Spiel"; $locale['BALL002'] = "Game Over!"; $locale['BALL003'] = "Du hast gewonnen! "; $locale['BALL004'] = "Dein Ergebnis: "; $locale['BALL005'] = " Punkte."; $locale['BALL006'] = "Spielstand:"; $locale['BALL007'] = "zu erzielen:";
gewandelt in 0.224 Sekunden, benutzt wurde GeSHi 1.0.8.9
Derzeit habe ich keine Filterung bei der Score-Anzeige, ich hätte jedoch gerne dass jeder Spieler nur einmal in der Liste erscheint, mit seinem höchsten je erzielten Punktestand.
So sieht es aus:
http://sandbox.ma...lloons.php
User = Tester PW = tester (Gäste können keinen Highscore speichern)
Gruß Marcus
Support per Mail, PN, ICQ oder MSN ist kostenpflichtig!
if ($ahnung == 'keine' ) { use ( FAQ ) && ( Google | | Suche ) }
if ($antwort == 0 ) { post ( Frage ) } |
 |
|
|
|
|
| emblinux |
Geschrieben am 05. März 2009 14:55:57
|


Posts: 3709
Registriert seit: 04.10.08
MeisterNächstes Level: 3732/5000 Scores: gesperrt
|
schau dir mal folgenden Link an, der sollte dir in dieser hinsicht helfen.
http://dev.mysql....icate.html
Das Lernen ist wie ein Meer ohne Ufer. Konfuzius
Alles wird Gut!
KEIN Support per Mail, ICQ oder PN !
 |
 |
|
|
|
|
| MarcusG |
Geschrieben am 05. März 2009 15:00:26
|


Posts: 2944
Registriert seit: 21.01.09
MeisterNächstes Level: 2951/5000 Scores: gesperrt
|
Ah, ja danke das sieht hilfreich aus.
Dann müsste ich das Tabellenfeld user_id als Primary key und autoincrement deklarieren, ist das problemlos möglich?
Edit: Ja ist möglich :)
Soweit sehr gut, folgender Code funktioniert:
GeSHi: PHP $result = dbquery("INSERT INTO ".DB_BALLOONS_SCORE." SET user_id='".$userdata['user_id']."', score='".$score."', monat='".$monat."' ON DUPLICATE KEY UPDATE score='".$score."', monat='".$monat."'");
gewandelt in 0.221 Sekunden, benutzt wurde GeSHi 1.0.8.9
Nur wird jetzt jedes Spiel gespeichert, zwar pro User nur einmal aber auch dann wenn ein niedrigerer Score erzielt wurde.
Editiert von MarcusG am 05. März 2009 15:22:05
Gruß Marcus
Support per Mail, PN, ICQ oder MSN ist kostenpflichtig!
if ($ahnung == 'keine' ) { use ( FAQ ) && ( Google | | Suche ) }
if ($antwort == 0 ) { post ( Frage ) } |
 |
|
|
|
|
| emblinux |
Geschrieben am 05. März 2009 19:55:11
|


Posts: 3709
Registriert seit: 04.10.08
MeisterNächstes Level: 3732/5000 Scores: gesperrt
|
Dann mach vorher ein Select, womit du dir die eingetragene Punktzahl für den User holst, vergleiche diese mit dem erziehlten Punktestand und wenn der Neue Punktestand höher ist, machst du diesen Insert, sonst eben nicht.
Das Lernen ist wie ein Meer ohne Ufer. Konfuzius
Alles wird Gut!
KEIN Support per Mail, ICQ oder PN !
 |
 |
|
|
|
|
| MarcusG |
Geschrieben am 05. März 2009 19:58:29
|


Posts: 2944
Registriert seit: 21.01.09
MeisterNächstes Level: 2951/5000 Scores: gesperrt
|
Das versuch ich ja... Was ist an diesem Code falsch? (funktioniert nämlich nicht, jetzt wird nie was eingetragen...^^)
GeSHi: PHP opentable($locale['BALL_title']); // your code here include "ball_functions.php"; echo "<br /><center><a href='balloons.php'><input type='submit' value='".$locale['BALL001']."' class='button'></a>"; if (iMEMBER){ if (isset($_GET['shots'])) { $chk = dbquery("select score from ".DB_BALLOONS_SCORE." where user_id = '".$userdata['user_id']."'"); $score = stripinput($_GET['shots']); if ($chk['score'])>$score) { $result = dbquery("INSERT INTO ".DB_BALLOONS_SCORE." SET user_id='".$userdata['user_id']."', score='".$score."', monat='".$monat."' ON DUPLICATE KEY UPDATE score='".$score."', monat='".$monat."'"); redirect("balloons.php"); } } } closetable();
gewandelt in 0.231 Sekunden, benutzt wurde GeSHi 1.0.8.9
Gruß Marcus
Support per Mail, PN, ICQ oder MSN ist kostenpflichtig!
if ($ahnung == 'keine' ) { use ( FAQ ) && ( Google | | Suche ) }
if ($antwort == 0 ) { post ( Frage ) } |
 |
|
|
|
|
| emblinux |
Geschrieben am 05. März 2009 20:01:41
|


Posts: 3709
Registriert seit: 04.10.08
MeisterNächstes Level: 3732/5000 Scores: gesperrt
|
probier mal.
GeSHi: PHP opentable($locale['BALL_title']); // your code here include "ball_functions.php"; echo "<br /><center><a href='balloons.php'><input type='submit' value='".$locale['BALL001']."' class='button'></a>"; if (iMEMBER){ if (isset($_GET['shots'])) { $chk_score = dbresult(dbquery("select score from ".DB_BALLOONS_SCORE." where user_id = '".$userdata['user_id']."'"),0); $score = stripinput($_GET['shots']); if ($chk_score>$score) { $result = dbquery("INSERT INTO ".DB_BALLOONS_SCORE." SET user_id='".$userdata['user_id']."', score='".$score."', monat='".$monat."' ON DUPLICATE KEY UPDATE score='".$score."', monat='".$monat."'"); redirect("balloons.php"); } } } closetable();
gewandelt in 0.233 Sekunden, benutzt wurde GeSHi 1.0.8.9
Das Lernen ist wie ein Meer ohne Ufer. Konfuzius
Alles wird Gut!
KEIN Support per Mail, ICQ oder PN !
 |
 |
|
|
|
|
| MarcusG |
Geschrieben am 05. März 2009 20:10:36
|


Posts: 2944
Registriert seit: 21.01.09
MeisterNächstes Level: 2951/5000 Scores: gesperrt
|
Leider nein...
Gruß Marcus
Support per Mail, PN, ICQ oder MSN ist kostenpflichtig!
if ($ahnung == 'keine' ) { use ( FAQ ) && ( Google | | Suche ) }
if ($antwort == 0 ) { post ( Frage ) } |
 |
|
|
|
|
| emblinux |
Geschrieben am 05. März 2009 20:17:06
|


Posts: 3709
Registriert seit: 04.10.08
MeisterNächstes Level: 3732/5000 Scores: gesperrt
|
hast du dir mal $score und $chk_score ausgeben lassen, ob da über haupt das richtige drinn steht? musst evtl. das redirect rausnehmen, damit du die anzeige siehst.
Das Lernen ist wie ein Meer ohne Ufer. Konfuzius
Alles wird Gut!
KEIN Support per Mail, ICQ oder PN !
 |
 |
|
|
|
|
| MarcusG |
Geschrieben am 05. März 2009 20:23:17
|


Posts: 2944
Registriert seit: 21.01.09
MeisterNächstes Level: 2951/5000 Scores: gesperrt
|
Ok, hab ich gemacht.
In der DB steht als Highscore 4 (per phpmyadmin eingegeben)
$ score:460
$ chk_score:4
460 hab ich grad als Score erreicht.
Die Werte stimmen also. Trotzdem schreibt er nicht in die DB.
AAH...!!!
GeSHi: PHP if ($chk_score>$score) { $result = dbquery("INSERT INTO ".DB_BALLOONS_SCORE." SET user_id='".$userdata['user_id']."', score='".$score."', monat='".$monat."' ON DUPLICATE KEY UPDATE score='".$score."', monat='".$monat."'");
gewandelt in 0.222 Sekunden, benutzt wurde GeSHi 1.0.8.9
Er soll natürlich schreiben wenn der DB-Eintrag KLEINER ist als der erreichte Score...
Erster Test erfolgreich... Jetzt muss er noch schreiben wenn der Highscore gelöscht wurde (chk_score = "NULL")
Editiert von MarcusG am 05. März 2009 20:30:54
Gruß Marcus
Support per Mail, PN, ICQ oder MSN ist kostenpflichtig!
if ($ahnung == 'keine' ) { use ( FAQ ) && ( Google | | Suche ) }
if ($antwort == 0 ) { post ( Frage ) } |
 |
|
|
|
|
| emblinux |
Geschrieben am 05. März 2009 20:32:18
|


Posts: 3709
Registriert seit: 04.10.08
MeisterNächstes Level: 3732/5000 Scores: gesperrt
|
ah ja, das habe ich natürlich nicht gesehen, den Vergleichsoperator vertauscht. Naja, das kann ja mal passieren.
Das Lernen ist wie ein Meer ohne Ufer. Konfuzius
Alles wird Gut!
KEIN Support per Mail, ICQ oder PN !
 |
 |
|
|
|
|
| MarcusG |
Geschrieben am 05. März 2009 20:37:20
|


Posts: 2944
Registriert seit: 21.01.09
MeisterNächstes Level: 2951/5000 Scores: gesperrt
|

Jetzt funktioniert es 
Score wiird nur gespeichert wenn er höher ist als der bereits vorhandene, auch wenn die Tabelle leer ist. Perfekt!
DANKE!
Gruß Marcus
Support per Mail, PN, ICQ oder MSN ist kostenpflichtig!
if ($ahnung == 'keine' ) { use ( FAQ ) && ( Google | | Suche ) }
if ($antwort == 0 ) { post ( Frage ) } |
 |
|
|
|
|
| MarcusG |
Geschrieben am 06. März 2009 05:37:46
|


Posts: 2944
Registriert seit: 21.01.09
MeisterNächstes Level: 2951/5000 Scores: gesperrt
|
Wer sich für das Spiel interessiert, auf http://www.futigo... gibt es das zum Download. Demo hab ich weiter oben schon genannt.
Gruß Marcus
Support per Mail, PN, ICQ oder MSN ist kostenpflichtig!
if ($ahnung == 'keine' ) { use ( FAQ ) && ( Google | | Suche ) }
if ($antwort == 0 ) { post ( Frage ) } |
 |
|
|
|
|
| emblinux |
Geschrieben am 06. März 2009 09:44:22
|


Posts: 3709
Registriert seit: 04.10.08
MeisterNächstes Level: 3732/5000 Scores: gesperrt
|
Nettes Spiel mit Tendez zur Suchtgefahr. 
Nur schade, das es das nur dort zum Download gibt, deshalb registrieren möchte ich mich nicht.
Zumal ich es nicht nachvollziehen kann, wie man für PHP-Fusion entwickelt, aber mit einem anderen Board-System arbeitet.
Wäre genau das selbe, wenn ich unter Linux programmiere aber sonst nur mit Windows arbeite. Etwas Paradox für mich, aber das muss jeder selbst entscheiden.
Das Lernen ist wie ein Meer ohne Ufer. Konfuzius
Alles wird Gut!
KEIN Support per Mail, ICQ oder PN !
 |
 |
|
|
|
|
| MarcusG |
Geschrieben am 06. März 2009 12:12:25
|


Posts: 2944
Registriert seit: 21.01.09
MeisterNächstes Level: 2951/5000 Scores: gesperrt
|
ObiWan ist der Betreiber, ich schreibe nur die Spiele.
Gruß Marcus
Support per Mail, PN, ICQ oder MSN ist kostenpflichtig!
if ($ahnung == 'keine' ) { use ( FAQ ) && ( Google | | Suche ) }
if ($antwort == 0 ) { post ( Frage ) } |
 |
|
|
|
|
| emblinux |
Geschrieben am 06. März 2009 12:18:00
|


Posts: 3709
Registriert seit: 04.10.08
MeisterNächstes Level: 3732/5000 Scores: gesperrt
|
Das weiß ich doch. 
Nur du musst es ja da nicht ausschließlich zum Download anbieten.
Das Lernen ist wie ein Meer ohne Ufer. Konfuzius
Alles wird Gut!
KEIN Support per Mail, ICQ oder PN !
 |
 |
|
|
|
|
| ObiWan |
Geschrieben am 06. März 2009 12:35:35
|

Anwender

Posts: 420
Registriert seit: 09.09.08
Halb-ProfiNächstes Level: 425/500 Scores: gesperrt
Verwarnstatus:    
|
Neee muss er nicht. Er kanns gerne auch hier anbieten. Ist ganz alleine seine Entscheidung. 
Und naja das ist quasi mein Entwickler Forum. ^^
Ich brauch einfach das PHP-Fusion nicht mehr an sich als Hauptseite. Dennoch arbeite ich noch intensiv damit.
1. hab ich dafür meine v7 Testseite
2. arbeite ich derzeit an meinem Spiel für Fusion (*Klick*)
Von daher wollt ich das einfach nicht mehr. Und wegen anmelden: Ein Argument wäre das es haufen Spiele(-addons) gibt für Fusion usw., die nicht nur von MarcusG gecodet worden sind. Und es ja auch auf vielen Seiten so üblich ist das man sich anmelden muss. Sind ja nur 2 Minuten und dann ist man sofort drinnen (ohne Aktivierungs-Email). Wollt halt wissen wer es lädt und wie es ankommt. Muss aber wie gesagt ja jeder selber entscheiden was er macht. Und ich kann niemanden dazu zwingen.
Editiert von ObiWan am 06. März 2009 12:38:43
|
 |
|
|
|
|
| MarcusG |
Geschrieben am 06. März 2009 18:46:04
|


Posts: 2944
Registriert seit: 21.01.09
MeisterNächstes Level: 2951/5000 Scores: gesperrt
|
http://www.phpfus...hp?did=141
Gruß Marcus
Support per Mail, PN, ICQ oder MSN ist kostenpflichtig!
if ($ahnung == 'keine' ) { use ( FAQ ) && ( Google | | Suche ) }
if ($antwort == 0 ) { post ( Frage ) } |
 |
|
|
|
|
| ObiWan |
Geschrieben am 06. März 2009 20:11:49
|

Anwender

Posts: 420
Registriert seit: 09.09.08
Halb-ProfiNächstes Level: 425/500 Scores: gesperrt
Verwarnstatus:    
|
Wenn der Prophet nicht zum Berg kommt, muss eben der Berg zum Propheten gehen. In diesem Sinne ...
...noch einen schönen Abend!
|
 |
|