Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Problem mit Eingabe

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 24.12.2004, 13:18    Titel: Problem mit Eingabe Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Mecki
Igel


Anmeldungsdatum: 10.09.2004
Beiträge: 985
Wohnort: Niederbayern

BeitragVerfasst am: 01.01.2005, 15:02    Titel: Antworten mit Zitat

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 zwinkern

Grüßle,
Mecki
_________________
» Yodl.de: So sucht man gestern. verwundert
» Geld verdienen im Netz + ICQ.
» Firefox!
» 100€ zu gewinnen
» FreeBASIC.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name Yahoo Messenger MSN Messenger
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 01.01.2005, 18:15    Titel: Zusammen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 01.01.2005, 19:04    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 07.01.2005, 20:51    Titel: Jo Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz