 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 24.12.2004, 13:18 Titel: Problem mit Eingabe |
|
|
Hi Leute, ich habe mal das Programm das ich hier schon mal hatte weiter geschrieben. Ich schreibe jetzt mal bloß die Problematischen Stellen rein, sie gehören zum Sub Haupt.
Das ist jetzt der Teil vor dem Spiel, da werden die Rekorde angezeigt, d.h. sie sollten angezeigt werden.
Code: |
OPEN "Rekord.txt" FOR INPUT AS #1
INPUT #1, rekord
INPUT #1, rekord2
INPUT #1, rekord3
CLOSE #1
PRINT "Hergestellt von D.G. Reichelt. Alle Rechte vorbehallten"
PRINT
PRINT "Ihr derzeitiger Rekord(1): " + STR$(rekord)
PRINT
PRINT "Ihr derzeitiger Rekord(2): " + STR$(rekord)
PRINT
PRINT "Ihr derzeitiger Rekord(3): " + STR$(rekord)
|
Das ist der Teil nach dem Hauptspiel, bei dem werden noch einmal die Rekorde angezeigt und die erreichte Punktezahl. Dann wird getestet, ob s größer ist, und dann soll der jeweilige Rekord eingetragen wird.
Code: |
CLS
SCREEN 0
OPEN "Rekord.txt" FOR INPUT AS #1
INPUT #1, x
INPUT #1, y
INPUT #1, z
PRINT "Rekord(1): " + STR$(x)
PRINT "Rekord(2): " + STR$(y)
PRINT "Rekord(3): " + STR$(z)
PRINT "Gesammter Weg: " + STR$(Punkte)
CLOSE #1
IF Punkte > x THEN
PRINT "Super, neuer Rekord!!!"
OPEN "Rekord.txt" FOR OUTPUT AS #1
WRITE #1, Punkte
CLOSE #1
PLAY "cdefga"
END IF
SLEEP
|
Leider funktionier weder der erste Teil noch der 2. Was müsste ich ändern das es klappt? |
|
Nach oben |
|
 |
Mecki Igel

Anmeldungsdatum: 10.09.2004 Beiträge: 985 Wohnort: Niederbayern
|
Verfasst am: 01.01.2005, 15:02 Titel: |
|
|
Huhu,
also: zuersteinmal muss sichergestellt sein, dass die 3 Rekord-Zahlen in der Rekord.txt immer untereinander sollten.
Im ersten Beispiel ist der Fehler, dass es immer nur heißt STR$(rekord), aber nie STR$(rekord2) oder dergleichen.
Im zweiten Beispiel hast du glücklicher weise auch angegeben, wie du die Datei erstellst, nämlich so: Code: | OPEN "Rekord.txt" FOR OUTPUT AS #1
WRITE #1, Punkte
CLOSE #1 | Wenn du das aber ausführst, steht nur eine Zeile in der Datei, wodurch es bei erneutem Einlesen zur Fehlermeldung kommt usw.
Irgendwie passt das ganze Programm wenig zusammen
Grüßle,
Mecki _________________ » Yodl.de: So sucht man gestern.
» Geld verdienen im Netz + ICQ.
» Firefox!
» 100€ zu gewinnen
» FreeBASIC.de |
|
Nach oben |
|
 |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 01.01.2005, 18:15 Titel: Zusammen |
|
|
Doch, das passt schon!
Der (richtige) Code, es waren noch mehr Fehler drinne, ist:
Code: |
OPEN "Rekord.txt" FOR INPUT AS #1
INPUT #1, rekord
INPUT #1, rekord2
INPUT #1, rekord3
CLOSE #1
PRINT "Hergestellt von D.G. Reichelt. Alle Rechte vorbehallten"
PRINT
PRINT "Ihr derzeitiger Rekord(1): " + STR$(rekord)
PRINT
PRINT "Ihr derzeitiger Rekord(2): " + STR$(rekord2)
PRINT
PRINT "Ihr derzeitiger Rekord(3): " + STR$(rekord3)
|
Code: |
CLS
SCREEN 0
PRINT "Rekord(1): " + STR$(rekord)
PRINT "Rekord(2): " + STR$(rekord2)
PRINT "Rekord(3): " + STR$(rekord3)
PRINT "Gesammter Weg: " + STR$(punkte)
IF punkte > rekord3 AND punkte < rekord2 THEN
PRINT "Super, neuer Rekord(3)!!!"
OPEN "Rekord.txt" FOR OUTPUT AS #1
WRITE #1, rekord
WRITE #1, rekord2
WRITE #1, punkte
CLOSE #1
PLAY "cdefga"
END IF
IF punkte > rekord2 AND punkte < rekord THEN
PRINT "Super, neuer Rekord(2)!!!"
OPEN "Rekord.txt" FOR OUTPUT AS #1
WRITE #1, rekord
WRITE #1, punkte
WRITE #1, rekord2
CLOSE #1
PLAY "cdefga"
END IF
IF punkte > rekord THEN
PRINT "Super, neuer Rekord(1)!!!"
OPEN "Rekord.txt" FOR OUTPUT AS #1
WRITE #1, punkte
WRITE #1, rekord
WRITE #1, rekord2
CLOSE #1
PLAY "cdefga"
END IF
|
Ja, und dazwischen sind noch doppelt so viele Zeilen, in denen die Punktzahl erspielt wird, und wenn man das bedenkt, passts schon zusammen! |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 01.01.2005, 19:04 Titel: |
|
|
Hmm, ich glaube, das letzte Codebeispiel passt wieder einmal gut zu
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/Anfaengerfehler.html
(Problematik der unnötigen Code-Wiederholung). Überleg Dir daher, wie es aussehen würde, wenn Deine Hiscore-Liste 20 und mehr Einträge gross wäre.
Meine Tipps: Zuerst einmal solltest Du mit einer Feldvariable arbeiten, also
Code: | CONST nPlaetze% = 3
DIM rekord&(1 TO nPlaetze%) |
(ich nehme einmal an, dass die Punkte immer ganzzahlig sind und ohne Weiteres 32767 übersteigen können). Das Einlesen und Ausgeben geht dann sehr einfach:
Code: | OPEN "Rekord.txt" FOR INPUT AS #1
FOR i%=1 TO nPlaetze%
INPUT #1, rekord&(i%)
NEXT i%
CLOSE #1
PRINT "Hergestellt von D.G. Reichelt. Alle Rechte vorbehallten"
FOR i% = 1 TO nPlaetze%
PRINT
PRINT "Ihr derzeitiger Rekord("; i%; "): "; rekord&(i%)
NEXT i% |
Somit kannst Du auch Deine Auswertung sehr kompakt formulieren:
Code: | IF punkte& > rekord&(nPlaetze%) ' Besser als der letzte Platz?
' => es gibt einen Eintrag in die Bestenliste!
' Zuerst einmal den Platz/Rang bestimmen
platz% = 1
' Hinweis: Wegen des IFs zu Beginn bricht diese Schleife immer ab
WHILE rekord&(platz%) > punkte&
platz% = platz% + 1
WEND
PRINT "Super, neuer Rekord("; platz%; ")!!!"
' Einfügen in Highscore-Liste
FOR i%=nPlaetze% - 1 TO platz% STEP -1
rekord&(i% + 1) = rekord&(i%)
NEXT i%
rekord&(platz%) = punkte&
OPEN "Rekord.txt" FOR OUTPUT AS #1
FOR i%=1 TO 3
WRITE #1, rekord&(i%)
NEXT i%
CLOSE #1
PLAY "cdefga"
END IF |
Damit wird Deine Lösung skalierbar, d.h. jetzt ist es absolut kein Problem mehr, meinetwegen die Hiscoreliste auf 100 Plätze auszubauen. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 07.01.2005, 20:51 Titel: Jo |
|
|
Ja, danke. Aber ich hab net vor die Bestenliste größer zu machen...ich meine irgendwo bei Downloads hab ich mal nen Beispiel für 96 gefunden...aber das macht keinen Sinn, bei meinem Programm net. Denn das gibt einfach kein 96 mal spielen her, bevor einem langweilig wird. Eher 3 mal, und deshalb ist 3 Plätze genau richtig, wies hallt ist. |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|