 |
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 |
engeldimo
Anmeldungsdatum: 18.10.2010 Beiträge: 4
|
Verfasst am: 07.09.2011, 09:49 Titel: Spiel "Entenjagd" |
|
|
Hello,
ich habe versucht mir das Spiel Entenjagd mit Freebasic zu programmieren,
aber irgendwie sind Fehler in meinem Code, die ich absolut nicht raus bekomme. Also, das Spiel ist eigentlich simpel. Eine Ente, erzeugt durch einfache Zeichen von Tastatur, die die ganze Zeit oben lang fliegt. Und eine Figur, mit der man Versucht die Ente abzuschießen. Und eine Schusstaste. Aber leider bekomme ich das nicht zum Laufen. Da
ich auch noch nicht viel Ahnung von der Programmiersprache habe,
würde ich mich auf ein bisschen Hilfe freuen. Danke schon mal!
Hier ist der Code:
Code: |
'Entenjagd
WINDOW (0,23)-(0,39)
COLOR 4, 14
Cls
Locate 2,10:Print "Entenjagd"
Locate 10,10:Print "Die Schusstaste ist F":Sleep 10
'Hier Up fuer die Erzeugung eigener Grafikzeichen aufrufen
label6:
Cls
Dim P As Integer
Dim DL As Integer
P = 0
DL = 1
Locate 20,23:Print DL; ". Durchlauf"
Locate 22,25:Print P; ". Treffer"
'Erzeugung der Spielfigur
Locate 20,6:Print "O"
Locate 21,5:Print "(!)"
Locate 22,5:Print " ! "
Locate 23,5:Print " ^ "
' Aktion
label5:
Dim Y As Integer
Dim Z As Integer
Dim F As Integer
Y=Int(Rnd(1)*16):Z=19:F=0
Locate 21,7 :Print ")"
Locate 22,7 :Print " "
Locate 20,7 :Print " "
'Erzeugung der Flugente
Locate Y,38 :Print "//" :Locate Y+1,38 :Print "##"
Dim I As Integer
For I=38 To 1 Step-1
Locate Y,I+1 :Print " " :Locate Y+1,I+1 :Print " "
Locate Y,I-1 :Print "//"
Locate Y+1,I-1 :Print "##"
Next
'Abfrage der F-Taste
If Z=19 And InKey$="F" Then
F=1
GoTo label1 :Else GoTo label2
EndIf
label1:
Locate 22,7 :Print " " :Locate 22,7 :Print "!"
Locate 20,7 :Print "!" :Locate 19,7 :Print "^"
label2:
Dim ZV As Integer
'ZV steht für Zeitverzögerung
If F<>1 Then
For ZV=1 To 15
Next ZV
GoTo label3
EndIf
Locate Z,7 :Print " " :Locate Z-1,7 :Print "^"
GoTo label7
If Z-1=Y+1 And (I-1=7 Or I=7) Then
GoTo label7
EndIf
If Z=1 Then
F=0 :Locate Z-1,7 :Print " " :GoTo label3
Z=Z-1
EndIf
label3:
Next I
Locate Y,0 :Print " " :Locate Y+1,0 :Print " " :Locate Z,7 :Print " "
If DL=50 Then
Locate 10,5 :Input "Wiederholung (J/N)?"; A$ :GoTo label4
EndIf
DL=DL+1
Locate 20,25-Len(Str$(DL)) :Print DL :GoTo label5
label4:
If A$="J" Then
:GoTo label6
EndIf
label7:
Sub UpTreffer
Dim P As Integer
Dim Y As Integer
Dim I As Integer
P=P+1
Locate 22,27-Len(Str$(P)) :Print P;
Locate Y,I-1 :Print "**" :Locate Y+1,I-1 :Print "**"
Locate Y,I-1 :Print " " :Locate Y+1,I-1 :Print " "
End Sub
Sleep
End
|
mfg
engeldimo |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 07.09.2011, 11:22 Titel: |
|
|
Eins vorweg, der folgende Code behebt nicht die logischen Probleme im Spielablauf, er zeigt nur wie man ohne GOTO arbeitet und arbeiten sollte. Zudem habe ich ihn generell etwas aufgeräumt.
Code: | #Lang "qb" 'Funktioniert nur mit -lang "qb"
'Entenjagd
WINDOW (0,23)-(0,39)
COLOR 4, 14
Cls
Locate 2,10:Print "Entenjagd"
Locate 10,10:Print "Die Schusstaste ist ""F"""
Sleep 10
Dim As Integer P, DL, Y, Z, F, I, ZV
'Hier Up fuer die Erzeugung eigener Grafikzeichen aufrufen
Do
Cls
P = 0
DL = 1
Locate 20,23:Print DL; ". Durchlauf"
Locate 22,25:Print P; ". Treffer"
'Erzeugung der Spielfigur
Locate 20,6:Print "O"
Locate 21,5:Print "(!)"
Locate 22,5:Print " ! "
Locate 23,5:Print " ^ "
' Aktion
Do
Y=Int(Rnd(1)*16):Z=19:F=0
Locate 21,7 :Print ")"
Locate 22,7 :Print " "
Locate 20,7 :Print " "
'Erzeugung der Flugente
Locate Y,38 :Print "//" :Locate Y+1,38 :Print "##"
For I=38 To 1 Step-1
Locate Y,I+1 :Print " " :Locate Y+1,I+1 :Print " "
Locate Y,I-1 :Print "//"
Locate Y+1,I-1 :Print "##"
Next
'Abfrage der F-Taste
If Z=19 And InKey$="F" Then
F=1
Locate 22,7 :Print " " :Locate 22,7 :Print "!"
Locate 20,7 :Print "!" :Locate 19,7 :Print "^"
EndIf
'ZV steht für Zeitverzögerung
If F<>1 Then
__Sleep 500 'FreeBASIC Sleep zum Verzögern nehmen
Else
Locate Z,7 :Print " " :Locate Z-1,7 :Print "^"
Exit Do, Do 'Programm verlassen
If Z=1 Then
F=0 :Locate Z-1,7 :Print " "
Z=Z-1
EndIf
EndIf
Locate Y,0 :Print " " :Locate Y+1,0 :Print " " :Locate Z,7 :Print " "
If DL=50 Then
Locate 10,5
Input "Wiederholung (J/N)?"; A$
If A$<>"J" Then
Exit Do, Do 'Programm verlassen
EndIf
EndIf
DL=DL+1
Locate 20,25-Len(Str$(DL))
Print DL
__Sleep 1 'CPU entlasten
Loop
__Sleep 1 'CPU entlasten
Loop
End |
Bitte gewöhne dir an, dass dein Code so in der Art aussieht und vor allem bitte keine GOTOs mehr.
In deinem Code war der größte Fehler übrigens ein NEXT zu viel in Zeile 67. |
|
Nach oben |
|
 |
engeldimo
Anmeldungsdatum: 18.10.2010 Beiträge: 4
|
Verfasst am: 07.09.2011, 11:50 Titel: |
|
|
Hello,
danke für die schnelle Antwort.
Geht zwar immer noch nicht so richtig, aber mal gucken.
Vielleicht bekomme ich das noch hin.
mfg |
|
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.
|
|