Anfänger braucht Hilfe!

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Spikespine

Betreff: Anfänger braucht Hilfe!

BeitragMi, Apr 28, 2004 14:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi erstmal,
also ich bin seit schon einem Monat mit BlitzBasic beschäftigt, habe aber noch kein einziges Spiel geschafft. Ich hab dann heute mal angefangen, das Spiel "4 gewinnt" (hoffentlich kennt ihr es) zu programmieren, doch schon beim Zug des Spielers gibt es ein Problem! Könnt ihr mir verraten, warum dieser Code nich funktioniert?:
Code: [AUSKLAPPEN]
Graphics 800,600
Dim Loch(7,5) ; ein Feld des Spielfeldes erstellen: 7 waagrechte mal 5 senkrechte Löcher
Maus = LoadImage("Pointer.bmp") :
X = 1 ; X zeigt an, wo der "Chip" eingeworfen wird
;

.Spielerzug
Color 0,0,255
Repeat
   Cls
   LoadBuffer (BackBuffer(), "Löcher.bmp")         
   For I = 1 To 7                            ; Die Maus wird je nach
      If X = I Then DrawImage Maus, (I*100)-50, 30 ; Stand von X über einer
   Next                                  ; der sieben Reihen gezeichnet
   For K = 1 To 7
      For L = 1 To 5
         If Loch(K,L) = 1 Then
            If L = 1 Then Oval (17+(X*100))-100, 501, 83, 83 ; Hier soll ein Kreis
            If L = 2 Then Oval (17+(X*100))-100, 401, 83, 38 ; (Chip) 
            If L = 3 Then Oval (17+(X*100))-100, 301, 83, 83 ; in das passende
            If L = 4 Then Oval (17+(X*100))-100, 201, 83, 83 ; Spielfeldloch
            If L = 5 Then Oval (17+(X*100))-100, 101, 83, 83 ; gezeichnet werden
         EndIf
      Next
    Next
   
   If KeyHit(203) Then X = X - 1 ; X wird verschoben, wenn
   If KeyHit(205) Then X = X + 1 ; man die Pfeiltasten drückt
   If X < 1 Then X = 1 ; es wird verhindert, dass X die erste
   If X > 7 Then X = 7 ; und die siebte Spalte überschreitet
   If KeyHit(28) Then                                    ; wenn die
      Repeat                                          ; Eingabetaste
         J=0                                          ; gedrückt
         J = J + 1                                     ; wird,
         If Loch(X,J) = 0 Then                            ; soll
            If J = 1 Then Oval (17+(X*100))-100, 501, 83, 83   ; auf das
            If J = 2 Then Oval (17+(X*100))-100, 401, 83, 38   ; Spielfeld ein Oval   
            If J = 3 Then Oval (17+(X*100))-100, 301, 83, 83   ; gezeichnet
            If J = 4 Then Oval (17+(X*100))-100, 201, 83, 83   ; werden
            If J = 5 Then Oval (17+(X*100))-100, 101, 83, 83
         EndIf            
         Until Loch(X,J) = 0            ; das entscheidene: das Loch erhält
      Loch(1,J) = 1                  ; den Wert 1
   EndIf
   Flip
Until KeyHit(1)

Ciao
-Spikespine

Gossi

BeitragMi, Apr 28, 2004 14:59
Antworten mit Zitat
Benutzer-Profile anzeigen
An deinem Code wäre sehr viel zu verbessern. Aber besonders fällt mir diese Zeile auf:

Code: [AUSKLAPPEN]


 Repeat                                          ; Eingabetaste
         J=0                                          ; gedrückt
         J = J + 1   



Ich glaube, dass da etwas nicht stimmt.
Alle Wasser laufen ins Meer, doch wird das Meer nicht voller; an den Ort, dahin sie fließen, fließen sie immer wieder. (...) Was geschehen ist, eben das wird hernach sein. Was man getan hat, eben das tut man hernach wieder, und es geschieht nichts neues unter der Sonne. Geschieht etwas, von dem man sagen könnte: "Sieh, das ist neu"? Es ist längst vorher auch geschehen in den Zeiten, die vor uns gewesen sind.

Spikespine

BeitragMi, Apr 28, 2004 15:16
Antworten mit Zitat
Benutzer-Profile anzeigen
So ähnlich wie ne For-Schleife, aber da gibts ja kein Until
 

graythread

BeitragMi, Apr 28, 2004 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ähh, du kannst auch jedes Mal J=1 schreiben, hat denselben Effekt;-).



Edit:

Ich seh gerade, du hast 2 Repeat-Schleifen, sowas darfst du NIE machen, das kann kaum funktionieren, versuche diese mal zu umgehen!

soli

BeitragMi, Apr 28, 2004 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Du müsstest J vor der Schleife auf 0 setzen.
solitaire

Spikespine

BeitragMi, Apr 28, 2004 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Oha, stimmt!

Funktioniert aber immer noch nicht wirklich,
1. wirft er nur manchmal blaue chips ein und
2. verschwindet die Maus, wenn ich sie bewegen will.

Zitat:
Ich seh gerade, du hast 2 Repeat-Schleifen, sowas darfst du NIE machen, das kann kaum funktionieren, versuche diese mal zu umgehen!


Warum darf ich nie 2 Repeatschleifen haben, und wie soll ich sie umgehen? Naja, das zweite kann ich ja mal versuchen...

regaa

BeitragMi, Apr 28, 2004 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Spikespine hat Folgendes geschrieben:
Zitat:
Ich seh gerade, du hast 2 Repeat-Schleifen, sowas darfst du NIE machen, das kann kaum funktionieren, versuche diese mal zu umgehen!


Also 2 Repeat schleifen in sich, sind absolut kein Problem, benutz ich sehr oft, naja nicht wirklich repeat aber while (weil das die schnellste schleife ist) in while ist kein problem, und sogar 3 fahc und mehrfach verschachtelungen . Wo soll da das Problem sein?
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Spikespine

BeitragMi, Apr 28, 2004 16:08
Antworten mit Zitat
Benutzer-Profile anzeigen
OK, ich habs in While umgeändert.
@garythread: Kannst du das mit den 2 verschachtelten Repeat-Schleifen genauer begründen? ich weiß auch nicht wo das problem sein soll...

Weiß denn irgendjemand die Lösung(en) der Probleme?

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Apr 28, 2004 16:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
1. Fehler drinn da du X anstatt k genommen hast
Code: [AUSKLAPPEN]
  For K = 1 To 7
      For L = 1 To 5
         If Loch(K,L) = 1 Then
            If L = 1 Then Oval (17+(k*100))-100, 501, 83, 83 ; Hier soll ein Kreis
            If L = 2 Then Oval (17+(k*100))-100, 401, 83, 38 ; (Chip) 
            If L = 3 Then Oval (17+(k*100))-100, 301, 83, 83 ; in das passende
            If L = 4 Then Oval (17+(k*100))-100, 201, 83, 83 ; Spielfeldloch
            If L = 5 Then Oval (17+(k*100))-100, 101, 83, 83 ; gezeichnet werden
         EndIf
      Next
    Next

2. gezeichnet wird oben , hier brauchste nur das Feld aktivieren
habe das mal mit einer For..Next gelöst
Code: [AUSKLAPPEN]
  If KeyHit(28) Then                                    ; wenn die
   For j = 0 To 5 ; wenn keiner mehtr frei dann wird auch keiner eingeschmissen!
         If Loch(X,J) = 0 Then; soll
          Loch(X,J) = 1; das entscheidene: das Loch erhält
          Exit ; schleife verlassen  da ein stein  drinne
         EndIf             
    Next 
EndIf

so köönte es gehen....
[BB2D | BB3D | BB+]

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Apr 28, 2004 16:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
.Spielerzug
Color 0,0,255
Repeat
Cls
LoadBuffer (BackBuffer(), "Löcher.bmp")



Normalerweise wird das so gemacht:
Code: [AUSKLAPPEN]
Graphics 800,600
Dim Loch(7,5)
Maus = LoadImage("Pointer.bmp") :
Hintergrund =  LoadImage("Löcher.bmp") 
SetBuffer BackBuffer()
X = 1 ; X zeigt an, wo der "Chip" eingeworfen wird

.Spielerzug
Color 0,0,255
Repeat
cls ; nur wenn unbedingt nötig
   drawimage Hintergrund ,0,0
oder
drawblock Hintergrund ,0,0
[BB2D | BB3D | BB+]

Spikespine

BeitragMi, Apr 28, 2004 17:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Wahrscheinlich hab ich den ganzen Code völlig falsch gemacht denn es funzt immer noch nicht Sad Arrow Crying or Very sad Arrow Mad

Mein Problem: Der Mauszeiger wird nicht gezeichnet und wenn ich die Eingabetaste drücke passiert nichts!

Wenn ich im Vollbildmodus bin bleibt der ganze Hintergrund
schwarz

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Apr 28, 2004 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Graphics 800,600
Dim Loch(7,5) ; ein Feld des Spielfeldes erstellen: 7 waagrechte mal 5 senkrechte Löcher
;Maus = LoadImage("Pointer.bmp") :
X = 1 ; X zeigt an, wo der "Chip" eingeworfen wird
;
SetBuffer BackBuffer()
.Spielerzug
Color 0,0,255
Repeat
   Cls
   ;For I = 1 To 7                            ; Die Maus wird je nach
      ;If X = I Then DrawImage Maus, (I*100)-50, 30 ; Stand von X über einer
     Rect (x*100)-50, 30 ,20,20,1;mal ohne Bild einfach nur ein rechteck
   ;Next                                  ; der sieben Reihen gezeichnet
   For K = 1 To 7
      For L = 1 To 5
         If Loch(K,L) = 1 Then
            If L = 1 Then Oval (17+(k*100))-100, 501, 83, 83 ; Hier soll ein Kreis
            If L = 2 Then Oval (17+(k*100))-100, 401, 83, 83 ; (Chip) 
            If L = 3 Then Oval (17+(k*100))-100, 301, 83, 83 ; in das passende
            If L = 4 Then Oval (17+(k*100))-100, 201, 83, 83 ; Spielfeldloch
            If L = 5 Then Oval (17+(k*100))-100, 101, 83, 83 ; gezeichnet werden
         EndIf
      Next
    Next
   
   If KeyHit(203) Then X = X - 1 ; X wird verschoben, wenn
   If KeyHit(205) Then X = X + 1 ; man die Pfeiltasten drückt
   If X < 1 Then X = 1 ; es wird verhindert, dass X die erste
   If X > 7 Then X = 7 ; und die siebte Spalte überschreitet

   
   If KeyHit(28) Then
   
   For j = 1 To 5 ; wenn keiner mehtr frei dann wird auch keiner eingeschmissen!
         If Loch(X,J) = 0 Then; soll
          Loch(X,J) = 1; das entscheidene: das Loch erhält
          Exit ; schleife verlassen  da ein stein  drinne
         EndIf             
    Next 
   EndIf
   Flip
Until KeyHit(1)

so hier anstatt des Mausbildes mal mit rect ohne Schleife!
inklusive änderung
[BB2D | BB3D | BB+]

Spikespine

BeitragMi, Apr 28, 2004 18:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Perfekt! Danke, jetzt muss ich nur noch den gegnerischen Zug programmieren und ich bin fertich!
 

Ted1406

BeitragMi, Apr 28, 2004 19:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Aloha,

ich bin ja auch noch nicht so weit mit meinen BlitzBasic-Kenntnissen... aber diese Zeile macht mich stutzig...

Code: [AUSKLAPPEN]

Dim Loch(7,5) ; ein Feld des Spielfeldes erstellen: 7 waagrechte mal 5 senkrechte Löcher


Bei 7 x 5 müsste es doch dann... Dim Loch(6,4) ...heißen, oder?

Ted1406

Kryan

BeitragMi, Apr 28, 2004 19:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich benutz' meistens die 0 bei einem DIm-Feld nicht, da dadrin dann platz für andere sachen sind
könnte man gut für ki in diesem spiel verwenden oder so...
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

regaa

BeitragMi, Apr 28, 2004 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ted1406 hat Folgendes geschrieben:
Bei 7 x 5 müsste es doch dann... Dim Loch(6,4) ...heißen, oder?

Ted1406


Richtig
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Apr 28, 2004 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt viele die erst mit 1 anfangen und die null felder leer lassen,
weil es zum teil einfacher ist bzw. verständlicher !
[BB2D | BB3D | BB+]
 

Ted1406

BeitragDo, Apr 29, 2004 6:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Na gut, dann habe ich daraus wenigstens gelernt, dass dies keinen Fehler verursacht... Smile

Ted1406
 

storzi

BeitragDo, Apr 29, 2004 11:08
Antworten mit Zitat
Benutzer-Profile anzeigen
dadurch dass du das feld größer definierst werden ressourcen verschwendet, das ist hier zwar nicht so tragisch aber es geht ja ums prinzip Wink
http://www.splattergamez.de
 

Omenaton_2

BeitragDo, Apr 29, 2004 11:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Spikespine hat Folgendes geschrieben:
Perfekt! Danke, jetzt muss ich nur noch den gegnerischen Zug programmieren und ich bin fertich!


Hehe, das wird lustig. Du mußt sehr bald feststellen, daß das was du bisher gemacht hast der sehr viel leichtere und kleinere Teil der Arbeit war, als das was jetzt "nur noch" kommt.
Ich wünsche dir viel Glück!

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group