4Gewinnt problem :(

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

ToeB

Betreff: 4Gewinnt problem :(

BeitragDi, Jan 02, 2007 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab heute morgen(so um 11/12...) mit 4Geinnt angefangen, und hab schon das erste problem:

Also...Die erste reihe krig ich voller Steine; aber ich krig die Zweite reihe nich hin:
Code: [AUSKLAPPEN]

Graphics 800,600,16,2
SetBuffer BackBuffer()

Type stone
Field x,y,speed
End Type

Global s.stone

Function Feld()
Color 0,0,255
Rect 100,100,600,600
Color 0,0,0
For x = 105 To 700 Step 90
For y = 105 To 700 Step 90
Oval x,y,50,50
Next
Next
End Function
my = 50
mx = 105
Repeat
If KeyHit(203) Then mx = mx - 90
If KeyHit(205) Then mx = mx + 90
If mx < 105 Then mx = 105
If mx > 650 Then mx = 650

Color 255,255,255
Oval mx,50,50,50
Feld
If KeyHit(57) Then
s.stone = New stone
s\x = mx
s\y = 50
s\speed = 10
EndIf

For s.stone = Each stone
Color 255,255,255
Oval s\x,s\y,50,50
s\speed = s\speed + 2
s\y = s\y + s\speed
If s\y > 555 Then s\y = 555
EndIf
Next

Flip
Cls
Until KeyHit(1)
End



Kann mia jemand helfen?

thx schonmal...

mfg Crack93
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Smokie

BeitragDi, Jan 02, 2007 16:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst das doch alles mit Dims machen (lol, da lernt man mühsam Types und dann sagt einer Dims sind besser). In dem Fall sind die Types unnötig.

Du machst einfach ein Dimso wie eine Tile-Map:
Code: [AUSKLAPPEN]


Const frei      = 0
Const rot_belegt = 1
Const blau_belegt = 2

dim feld(zeilen,spalten)

if keyhit(57) then

 for i = zeilen to 1

  if feld(i,aktuelle_spalte) <> frei then

    if player_eins_am_zug then

        feld(i - 1,aktuelle_spalte) = rot_belegt

    else

        feld(i - 1,aktuelle_spalte) = blau_belegt
 
    endif
 
     exit
  endif

next



Also ganz "unten" ist die letzte Zeile in deinem Spiel die sechste zeile. Und wenn die belegt is, dann belegt er einfach das Feld obendrüber.

Grüße
Smokie
M-Soft Studios Mit selbst gemachtem Forum!!!
Unbequem lebt's sich schwer.
Musik macht erst Spaß, wenn man sie mit 2,8 facher Geschwindigkeit hört
Zuletzt bearbeitet von Smokie am Fr Jan 01, 1888 51:58 PM, insgesamt 1000-mal bearbeitet

darth

BeitragDi, Jan 02, 2007 16:42
Antworten mit Zitat
Benutzer-Profile anzeigen
4 gewinnt läuft in einem 2d feld (... meistens), dessen grösse vorher bestimmt ist (also z.b 7x8), also würde ich dir von einem Type abraten in dieser situation!
Nimm einen Array... so in der art:
Code: [AUSKLAPPEN]
Dim Feld(6,7)
while not keyhit(1)
 ;feld zeichnen
 for x=0 to 6
 for y=0 to 7
  rect x*50+10,y*50+10,50,50,0
  if feld(x,y)=1 then oval x*50+10,y*50+10,50,50 ;du
  if feld(x,y)=2 then rect x*50+10,y*50+10,50,50 ;gegner
  ;ginge auch mit farben oder so
 next
 next
 ;stein setzen
 for x=0 to 6
  if mousehit(1) then
   if rectsoverlap(mousex(),mousey(),1,1,x*50+10,0,50,graphicsheight()) then
    for y=7 to 0 step -1
     if feld(x,y)=0 then feld(x,y)=1 : exit
    next
   endif
  endif
 next
 ;dann noch KI...
flip 0
Wend : end


[edit]
der olle smokie war schneller Sad ich werd depressiv
Diese Signatur ist leer.

ToeB

BeitragDi, Jan 02, 2007 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
hey danke euch "allen" !
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Smokie

BeitragDi, Jan 02, 2007 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Lol, ja ich war schneller, aber dafür hast du ihm ein ausführlicheres Beispiel gegeben. Ich wollt ihm halt net alles vorweg nehmen. Zu deinem Beispiel:
Ich würd das mousehit(1) vor die schleife mit dem x setzen, weil du die maustaste im richtigen moment drücken müsstest, damit ein stein gesetzt wird. Außerdem ist es schneller wenn, man erst prüft wenn auch wirklich die Maustaste gedrückt wurde Wink

@Crack93

Ich hab noch einen Fehler in deinem Code gefunden: in Zeile 45 muss das Endif weg, wenn du die Befehle in eine Zeile schreibst.
M-Soft Studios Mit selbst gemachtem Forum!!!
Unbequem lebt's sich schwer.
Musik macht erst Spaß, wenn man sie mit 2,8 facher Geschwindigkeit hört
Zuletzt bearbeitet von Smokie am Fr Jan 01, 1888 51:58 PM, insgesamt 1000-mal bearbeitet

ToeB

BeitragDi, Jan 02, 2007 17:01
Antworten mit Zitat
Benutzer-Profile anzeigen
ich muss sowieso jetzt alles ändern, wenn ich es mit Dim ...() mache Wink

aba jetzt klappt nicht der Code: [AUSKLAPPEN]

Graphics 800,600,16,2
SetBuffer BackBuffer()

Dim Feld(6,7)


Repeat
Color 0,0,255
Rect 100,100,600,600
For x = 1 To 6
If MouseHit(1) Then
If RectsOverlap(MouseX(),MouseY(),1,1,x+90+50,0,50,50) Then
For y = 1 To 7 Step -1
If Feld(x,y)= 0 Then Feld(x,y) = 1:Exit
Next
EndIf
EndIf
Next

For x = 0 To 6
For y = 0 To 7
Color 0,0,0
Oval x*90+50,y*90+10,50,50
Color 255,0,0
If Feld(x,y) = 1 Then Oval x*90+50,y+90+10,50,50
If Feld(x,y) = 2 Then Rect x*90+50,y*50+10,50,50
Next
Next
Color 255,255,255


Flip 0
Cls
Until KeyHit(1)
End






Warum??

ToeB

BeitragDi, Jan 02, 2007 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
sry schonmal wegen Doppelposts, aber mia antwortet keiner Sad
Code: [AUSKLAPPEN]

Graphics 640,480

Dim Feld(7,6)

While Not KeyHit(1)
;feld zeichnen
For x = 0 To 7
   For y = 0 To 6
     Color 255,255,255
     Rect x*50+10,y*50+10,50,50,0
      If feld(x,y)=1 Then Color 255,0,0:Oval x*50+10,y*50+10,50,50;du
       If feld(x,y)=2 Then Color 0,0,255:Rect x*50+10,y*50+10,50,50;gegner
      ;ginge auch mit farben oder so   
   Next
Next


For x = 0 To 7
  If MouseHit(1) Then
    If RectsOverlap(MouseX(),MouseY(),1,1,x*50+10,0,50,GraphicsHeight()) Then
       For y = 6 To 0 Step -1
         If feld(x,y)=0 Then feld(x,y) = 0:Exit
       Next
    EndIf
  EndIf
Next
;dann noch KI...
Flip 0

Wend:End




Der code funzt bei mia nich-> warum???

zur info: Ich habe den Text abgeschrieben, und 1000* durchgeguckt, aber ich find den Fehler nich Sad ...
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Eingeproggt

BeitragDi, Jan 02, 2007 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
also da braucht man nicht lang suchen.
Du machst eine For-Next Schleife mit 8 (0 bis 7) Durchgängen, hast in deinem Array aber nur 7 Elemente!
(Gilt natürlich auch für y)
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

ToeB

BeitragDi, Jan 02, 2007 18:02
Antworten mit Zitat
Benutzer-Profile anzeigen
darth gamer hat Folgendes geschrieben:

Code: [AUSKLAPPEN]
Dim Feld(6,7)
while not keyhit(1)
 ;feld zeichnen
 for x=0 to 6
 for y=0 to 7
  rect x*50+10,y*50+10,50,50,0
  if feld(x,y)=1 then oval x*50+10,y*50+10,50,50 ;du
  if feld(x,y)=2 then rect x*50+10,y*50+10,50,50 ;gegner
  ;ginge auch mit farben oder so
 next
 next
 ;stein setzen
 for x=0 to 6
  if mousehit(1) then
   if rectsoverlap(mousex(),mousey(),1,1,x*50+10,0,50,graphicsheight()) then
    for y=7 to 0 step -1
     if feld(x,y)=0 then feld(x,y)=1 : exit
    next
   endif
  endif
 next
 ;dann noch KI...
flip 0
Wend : end




Bei ihm hats ja auch gefunzt Sad
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Eingeproggt

BeitragDi, Jan 02, 2007 18:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Bei ihm hats ja auch gefunzt


Schonmal seine Version probiert? Funzen ist was anderes!

Nur muss ich zugeben, dass es doch nicht an der Schleife liegen dürfte...
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

ToeB

BeitragDi, Jan 02, 2007 18:11
Antworten mit Zitat
Benutzer-Profile anzeigen
ja hab ich ! aber alz ich das appgetippt habe, ging es nich mehr...
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Smokie

BeitragDi, Jan 02, 2007 20:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab doch gesagt das liegt am Mousehit, du musst das vor die Schleifen setzen. Du müsstest genau im Richtigen Moment die Maus drücken, wärend er genau an der Position an der schleife ist, wo geprüft wird. Außerdem sollst du den Code net abtippen sondern ihn verstehen. WEnn du den dann kannst du auch gleich strg + c benutzen. Es muss so heißen:
Code: [AUSKLAPPEN]

 if mousehit(1) then
 for x=0 to 6
   if rectsoverlap(mousex(),mousey(),1,1,x*50+10,0,50,graphicsheight()) then
    for y=7 to 0 step -1
     if feld(x,y)=0 then feld(x,y)=1 : exit
    next
   endif

 next
endif


Außerdem wegen dem Doppelpost, warte lieber ma 2 Tage bis dir einer nicht antwortet. Du hast ca eine Stunde gewartet und du kannst net verlangen, dass wir den ganzen tag nur am PC hocken und im BB-Forum sind.

GRüße
Smokie
M-Soft Studios Mit selbst gemachtem Forum!!!
Unbequem lebt's sich schwer.
Musik macht erst Spaß, wenn man sie mit 2,8 facher Geschwindigkeit hört
Zuletzt bearbeitet von Smokie am Fr Jan 01, 1888 51:58 PM, insgesamt 1000-mal bearbeitet

ToeB

BeitragDi, Jan 02, 2007 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
ok,sorry. Aus fehlern lernt man Wink !
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group