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:

Spiel "Entenjagd"

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



Anmeldungsdatum: 18.10.2010
Beiträge: 4

BeitragVerfasst am: 07.09.2011, 09:49    Titel: Spiel "Entenjagd" Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 07.09.2011, 11:22    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 18.10.2010
Beiträge: 4

BeitragVerfasst am: 07.09.2011, 11:50    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail 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 FreeBASIC. 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