 |
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 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 26.04.2005, 17:17 Titel: Spiel klappt in QB4.5, in *.exe datei läuft alles schief. |
|
|
Hallo,
ich hab mal aus langeweile ein kleines Spiel geschrieben. In der *.bas datei klappt alles, doch sobald ich eine *.exe datei mache, dann klappt irgendwas nicht. Schwer zu erklären. Ich glaube aber, dass das an den Zufallszahlen liegt. Am besten mal die .bas datei und die .exe datei öffnen und nacher vergleichen. Dann versteht ihr was ich meine. Es scheint so, als wenn die Zufallszahlen immer gleich sind.
Danke fürs helfen!!!!!!!
Link zu der bas und exe datei ist unten.
Code: | DEFINT A-Z
DECLARE SUB best (schwer!, punkte!, name$)
SCREEN 12
RANDOMIZE TIMER
DO
DO
CLS
INPUT "Bitte w„hlen sie eine Schwierigkeitsstufe. (1-3) : ", schwer!
LOOP WHILE schwer! > 3 OR schwer! < 1
CLS
PRINT
PRINT
INPUT "Bitte geben sie ihren Namen ein. ", name$
IF name$ = "" THEN name$ = "Unbekannt"
CLS
PRINT "Steuern mit Hoch, Runter, Links, Rechts, selbstmord (beenden) mit b."
PRINT ""
PRINT "Ihre Aufgabe: Ber?hren sie keine roten Kometen."
SLEEP 2
COLOR 4
xW = 630
yW = 470
HOCH$ = CHR$(0) + "H"
RUNTER$ = CHR$(0) + "P"
LINKS$ = CHR$(0) + "K"
RECHTS$ = CHR$(0) + "M"
BEENDEN$ = "b"
CLS
kometen% = schwer! * 5 + 5
DIM kx&(kometen%)
DIM ky&(kometen%)
DIM a&(kometen%)
DIM b&(kometen%)
DIM c&(kometen%)
DIM kxalt&(kometen%)
DIM kyalt&(kometen%)
FOR i% = 1 TO kometen%
kx&(i%) = INT(RND * 500) + 60
ky&(i%) = INT(RND * 300) + 60
NEXT i%
DO
IF a$ = HOCH$ OR a$ = RUNTER$ OR a$ = LINKS$ OR a$ = RECHTS$ THEN punkte! = punkte! + 5
LOCATE 1, 1: PRINT punkte!
FOR zeit% = 1 TO 3
FOR i% = 1 TO kometen%
a&(i%) = INT(RND * 2) + 1
b&(i%) = INT(RND * 5)
c&(i%) = INT(RND * 5)
NEXT i%
FOR spieler% = 1 TO 20
bn$ = INKEY$
IF bn$ <> "" THEN
a$ = bn$
END IF
IF a$ = HOCH$ THEN yW = yW - 3
IF a$ = RUNTER$ THEN yW = yW + 3
IF a$ = LINKS$ THEN xW = xW - 3
IF a$ = RECHTS$ THEN xW = xW + 3
IF a$ = BEENDEN$ THEN EXIT DO
FOR r% = 1 TO 3
CIRCLE (xalt, yalt), r%, 0
CIRCLE (xW, yW), r%, 15
NEXT r%
xalt = xW
yalt = yW
WAIT &H3DA, 8
WAIT &H3DA, 8, 8
FOR i% = 1 TO kometen%
IF a&(i%) = 1 THEN
kx&(i%) = kx&(i%) + b&(i%)
ky&(i%) = ky&(i%) + c&(i%)
END IF
IF a&(i%) = 2 THEN
kx&(i%) = kx&(i%) - b&(i%)
ky&(i%) = ky&(i%) - c&(i%)
END IF
IF kx&(i%) > 635 THEN kx&(i%) = kx&(i%) - 5
IF kx&(i%) < 5 THEN kx&(i%) = kx&(i%) + 5
IF ky&(i%) > 475 THEN ky&(i%) = ky&(i%) - 5
IF ky&(i%) < 5 THEN ky&(i%) = ky&(i%) + 5
FOR z% = 1 TO 5
CIRCLE (kxalt&(i%), kyalt&(i%)), z%, 0
CIRCLE (kx&(i%), ky&(i%)), z%
NEXT z%
kxalt&(i%) = kx&(i%)
kyalt&(i%) = ky&(i%)
IF xW > 635 THEN xW = xW - 5
IF xW < 5 THEN xW = xW + 5
IF yW > 475 THEN yW = yW - 5
IF yW < 5 THEN yW = yW + 5
IF yW > ky&(i%) - 9 AND yW < ky&(i%) + 9 AND xW > kx&(i%) - 9 AND xW < kx&(i%) + 9 THEN EXIT DO
IF yW > ky&(i%) - 9 AND yW < ky&(i%) + 9 AND xW > kx&(i%) - 9 AND xW < kx&(i%) + 9 THEN EXIT DO
NEXT i%
NEXT spieler%
NEXT zeit%
LOOP
FOR i% = 1 TO 350 STEP 2
COLOR 4
CIRCLE (xW, yW), i%
WAIT &H3DA, 8
WAIT &H3DA, 8, 8
IF i% > 5 THEN
COLOR 6
CIRCLE (xW, yW + 1), i% - 5
END IF
NEXT i%
FOR warte% = 1 TO 40
WAIT &H3DA, 8
WAIT &H3DA, 8, 8
NEXT warte%
FOR r% = 350 TO 1 STEP -1
COLOR 0
CIRCLE (xW, yW), r%
CIRCLE (xW, yW + 1), r% + 20
NEXT r%
FOR r% = 20 TO 1 STEP -1
CIRCLE (xW, yW + 1), r%
NEXT r%
CLS
COLOR 15
CALL best(schwer!, punkte!, name$)
INPUT "(N)eustart oder (b)eenden??", ende$
SELECT CASE ende$
CASE IS = "b"
CLS
PRINT "Vielen Dank f?rs Spielen. "
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT "Copyright by Michael Laumen"
END
END SELECT
LOOP
DEFSNG A-Z
SUB best (schwer, punkte, name$)
IF schwer = 1 THEN s$ = "leicht"
IF schwer = 2 THEN s$ = "mittel"
IF schwer = 3 THEN s$ = "schwer"
OPEN s$ + "best.dat" FOR APPEND AS #1
a = 30
DO UNTIL LOF(1) > 0
PRINT #1, "Michael"
WRITE #1, a
LOOP
CLOSE #1
OPEN s$ + "best.dat" FOR INPUT AS #1
LINE INPUT #1, name$
INPUT #1, p
CLOSE #1
PRINT "Der Rekord von "; name$; " liegt bei "; p; " Punkten"
PRINT ""
PRINT ""
IF punkte < p THEN
PRINT "Sie haben mit "; punkte; " Punkten leider keinen neuen Rekord aufgestellt."
END IF
IF punkte > p THEN
PRINT "Herzlichen Gl?ckwunsch.Sie haben"; punkte; " Punkte erreicht"
PRINT "und somit den Rekord von "; name$; " geschlagen"
OPEN s$ + "best.dat" FOR OUTPUT AS #1
PRINT #1, name$
WRITE #1, punkte
CLOSE #1
END IF
SLEEP
SLEEP
END SUB
|
Hier sind die dateien[/code] _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
 |
Dorftrottel gesperrt

Anmeldungsdatum: 23.04.2005 Beiträge: 97 Wohnort: Welt
|
Verfasst am: 26.04.2005, 17:28 Titel: |
|
|
ich hab ne idee
kommt bei dir immer der fehler hier?
Unzulässiger Dateiname in Zeile Keine zeilennummer in Modul SIRENE
0E23:12EF
weil dann heißt dass so vie wie dass der pfadname der best.txt
falsch is
(du musst den genauen pfad angeben) z.b
OPEN s$ + "c:\game1\best.txt"... _________________ Euer Dorftrottel!
Unser Name ist unser Auftrag!  |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 26.04.2005, 18:08 Titel: |
|
|
Also, bei mir klappt das Spiel.
Weiß nicht, wo das Problem ist...
jb |
|
Nach oben |
|
 |
Dorftrottel gesperrt

Anmeldungsdatum: 23.04.2005 Beiträge: 97 Wohnort: Welt
|
Verfasst am: 26.04.2005, 18:15 Titel: |
|
|
bei mir auch.
nur die ...best.dat findets nich obwohl ich se erstellt habe? _________________ Euer Dorftrottel!
Unser Name ist unser Auftrag!  |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 26.04.2005, 18:47 Titel: |
|
|
jb hat Folgendes geschrieben: | Also, bei mir klappt das Spiel.
Weiß nicht, wo das Problem ist...
jb |
bei mir klappt das auch, aber es läuft anders ab als in QB. Die "Kometen" (roten Dinger) schwirren in QB.exe über dem kompletten Bildschirm. In der erstellten exe-datei gehen die nach ein paar sek. alle in der oberen linken ecke und bleiben dort. Kuzgesagt, das ist sch*****, weil das dann super-einfach zu spielen ist. Ich habs schon an 2 PCs getestet. Vielleicht liegts auch am CPU. Beide PCs haben über 2000MHZ.
@dorftrottell: Danke, aber daran liegts nicht. _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
 |
Bernd

Anmeldungsdatum: 14.09.2004 Beiträge: 498 Wohnort: Kulmbach
|
Verfasst am: 26.04.2005, 19:25 Titel: |
|
|
also bei mir ist das Problem aber da...
probier mal das RANDOMIZE TIMER dierekt vor die Stelle zu setzten, wos dus brauchst, vielleicht hilfts ja, was ich aber kaum glaube...
Bernd _________________ Neue Homepage: http://www.glubb.rockt.de
UND
Der Wahnsinn hat seine eigene Homepage: http://pulmollwand.rulz.de |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 26.04.2005, 22:36 Titel: |
|
|
Dorftrottel hat Folgendes geschrieben: | ich hab ne idee
kommt bei dir immer der fehler hier?
Unzulässiger Dateiname in Zeile Keine zeilennummer in Modul SIRENE
0E23:12EF |
Genau dort liegt der "Bock": Wenn s$ z.B. auf "leicht" gesetzt wird, ergibt "leicht" + "best.dat" = "leichtbest.dat" einen zu langen Dateinamen (entspricht nicht der 8+3-DOS-Konvention). Ein kürzeres s$, z.B. "L_", "M_" und "S_" löst das Problem eigentlich bereits... _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 26.04.2005, 22:42 Titel: |
|
|
dreael hat Folgendes geschrieben: | Dorftrottel hat Folgendes geschrieben: | ich hab ne idee
kommt bei dir immer der fehler hier?
Unzulässiger Dateiname in Zeile Keine zeilennummer in Modul SIRENE
0E23:12EF |
Genau dort liegt der "Bock": Wenn s$ z.B. auf "leicht" gesetzt wird, ergibt "leicht" + "best.dat" = "leichtbest.dat" einen zu langen Dateinamen (entspricht nicht der 8+3-DOS-Konvention). Ein kürzeres s$, z.B. "L_", "M_" und "S_" löst das Problem eigentlich bereits... |
Klappt aber immer noch nicht. UNd was hat die bestenliste mit dem Verlauf des Spiels zu tun, wenn sie erst am Ende(wenn das spiel vorbei ist) geladen bzw. darauf zugegriffen wird. Das Problem besteht darin, dass die Kometen sich Falsch verhalten und das Spiel schrotten. Das ist nur in der exe-datei so.
EDIT: Hab auch schon das ausgetestet, was Bernd und was Drael gesagt haben. Klappt alles nicht. _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 27.04.2005, 15:33 Titel: |
|
|
Ich hab eine Lösung gefunden.
Wenn ich die *.exe datei erstelle und auf debug-code erstellen klicke, dann klappt das Programm. Wieso klappt das ohne dem debug-code nicht???
Mfg
Michael _________________
Code: | #include "signatur.bi" |
|
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 27.04.2005, 22:28 Titel: |
|
|
Ich denke einmal, dass vielleicht diese WAIT-Anweisungen nicht ganz unproblematisch sind. So etwas würde ich lieber mit TIMER (und Tiefpassfilter wegen 55 ms-Problem) lösen... _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 28.04.2005, 14:14 Titel: |
|
|
Achso. Mit timer hab ich bis jetzt noch nichts gemacht. Mal gucken ob ich klarkomme.
THX@all _________________
Code: | #include "signatur.bi" |
|
|
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.
|
|