Frage zu Dim Felder?

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

Schranz0r

BeitragFr, Okt 06, 2006 14:20
Antworten mit Zitat
Benutzer-Profile anzeigen
achso meinst du das, könnet man ja auch selber drauf kommen Confused

Dank dir, für den Tip
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!HAUPTSACH et kost VIEL!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 

blackmaster

BeitragSa, Okt 07, 2006 0:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo nochmal,
mein Spiel ist jetzt fast fertig, allerdings bekomme ich das mit dem löschen der steine net ganz hin, wenn ich es löschen lassen möchte wenn z.B. 5 Steine in einer Reihe sind, dann werden auch nur 3 gelöscht.
Könnte mir vieleicht jemand bitte erklären wie man das genau macht?
habs nämlich net so verstanden Rolling Eyes

Habs mal so versucht:

Code: [AUSKLAPPEN]
Function CheckSteine()

  For y=0 To 15
    For x=0 To 15
      If Spielfeld(x,y) = 2 Then
        If Spielfeld(x+1,y) = 2 And Spielfeld(x+2,y) = 2 Then
          Spielfeld(x,y) = 1
          Spielfeld(x+1,y) = 1
          Spielfeld(x+2,y) = 1
        EndIf
        If Spielfeld(x-1,y) = 2 And Spielfeld(x-2,y) = 2 Then
          Spielfeld(x,y) = 1
          Spielfeld(x-1,y) = 1
          Spielfeld(x-2,y) = 1
        EndIf
      EndIf
    Next
  Next

End Function


leider löscht er nur 3 kugeln, da im Spielfeld x-1, -2 ein lerres feld kommt.
Gibt es vieleicht eine andere Methode?

Vielen Dank schonmal

MFG Markus
 

blackmaster

BeitragSa, Okt 07, 2006 18:05
Antworten mit Zitat
Benutzer-Profile anzeigen
hat keiner ne idee wie ich das machen kann?

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, Okt 07, 2006 18:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem liegt darin das nach dem löschen der drei gleichen der vierte und fünfte alleine steht, also keine drei gleichen mehr da sind!

Das einfachste ist es erst nach dem Scan die Felder zu löschen!
Die Positionen mußt du nur zwischenspeichern.
Das kannst du mit einem Array oder einer Bank oder Types lösen.
Das schnellste wäre eine Bank!
[BB2D | BB3D | BB+]
 

Matthias

BeitragSa, Okt 07, 2006 18:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hay Blackmaster. Müssen alle 5Kugeln die gleiche farbe haben so wie bei Tetris??
 

blackmaster

BeitragSa, Okt 07, 2006 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke euch für die antworten.
@Matthias ja die sollen alle die gleiche farben habe, mein Spiel ist fast fertig, wenn die steine verschwinden dann rutschen die andere runter, das geht alles schon, nur noch möchte ich überprüfen wenn mehr als 3 steine neben einander sind das die dann verschwinden, könntest du mir vieleicht ein beispiel posten?

Danke schonmal.

Gruss Markus
 

blackmaster

BeitragSo, Okt 08, 2006 0:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier mal mein Screen:

user posted image

Ich hab das Spiel jetzt komplett überarbeitet, also man muss ein Stein anklicken und dann ein Stein weiter anklicken, und die werden dann vertauscht.
Also da wo die Maus gerade drauf zeigt sind 5 Steine neben einander, aber nur 3 gelbe steine von links verschwinden, wie kann ich machen das alle Steine die neben einander sind zu löschen?
Sry, ich kapier das nicht so richtig wie ich das hinbekomme.

Gruss Markus

Schranz0r

BeitragSo, Okt 08, 2006 0:56
Antworten mit Zitat
Benutzer-Profile anzeigen
bei der anzahl kannst du doch mit types arbeiten und dene den wert

sel = 0 ; Select

und wenn es 1 ist, sollen die Steinen Links und rechts überprüft werden, auf Farbe, und ob schon sel = 1 ist.

Wenn die Farbe stimmt, und sel = 0 ist, dann kannst du sagen Sel = 1 und somit prüft der weiter
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!HAUPTSACH et kost VIEL!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 

Matthias

BeitragSo, Okt 08, 2006 11:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Soll nur ein Beispiel sein kein fertiges Prg
(Will dir ja nicht deine Idee/Arbeit weg nehmen)

Code: [AUSKLAPPEN]
Graphics 800,600,32,2
TilesGr=32:TilesMaxTyp=10
MaxFeldX=GraphicsWidth()/TilesGr:MaxFeldY=GraphicsHeight()/TilesGr
Dim Feld(MaxFeldX,MaxFeldY)


Mo=0;"<<<<--------Bei 1 auch Oben Unten KugelnTauschen---"
Speed=800;<<<<------Für Nachrutschende Kugeln-------------"

;"------------SteineErstellen---------------------"
Image=CreateImage(TilesMaxTyp*TilesGr,TilesGr):SetBuffer ImageBuffer(Image)
For Z=1 To TilesMaxTyp-1:Color Rnd(255),Rnd(255),Rnd(255)
Oval Z*TilesGr,0,TilesGr,TilesGr:Color 255,255,0:Oval Z*TilesGr,0,TilesGr,TilesGr,0
Next:SaveImage(Image,"SteineAni.Bmp"):FreeImage Image

Kugeln=LoadAnimImage("SteineAni.Bmp",TilesGr,TilesGr,0,TilesMaxTyp)

;---------------Zufällige Plazierung--------------------------"
SeedRnd(MilliSecs())
For ZX=0 To MaxFeldX-1:For ZY=0 To MaxFeldY
Feld(ZX,ZY)=Rnd(TilesMaxTyp-1):Next:Next
 
ClsColor 100,100,0:SetBuffer BackBuffer()
PunkteLeiste=24
Repeat:
Cls

;-------------------Nachrutschen------------------------------"
For ZY=MaxFeldY-1 To 0 Step -1 :For ZX=0 To MaxFeldX-1
Select Feld(ZX,ZY+1):Case 0:D=Feld(ZX,ZY):Feld(ZX,ZY)=Feld(ZX,ZY+1):Feld(ZX,ZY+1)=D
End Select:Next:Next

;-------------------Makieren der Kugeln--------------------------------------------"
MausX=(MouseX()-TilesGr*.5)/TilesGr:MausY=(MouseY()-PunkteLeiste-TilesGr*.5)/TilesGr
AnzA=1:AnzB=1
Select Click:Case 0:KugelAX=MausX:KugelAY=MausY:AnzB=0
Default:KugelBX=MausX:KugelBY=MausY
End Select
Select MouseHit(1):Case 1:
Select Click:Case 1:D=Feld(KugelBX,KugelBY):Feld(KugelBX,KugelBY)=Feld(KugelAX,KugelAY)
Feld(KugelAX,KugelAY)=D:End Select
Click=1-Click:Pause=50:;"<<<Aktiviert Zeitverzögerung"
End Select

Select Feld(KugelAX,KugelAY):Case 0:AnzA=0:AnzB=0:Click=0:End Select
Select KugelBX<KugelAX-1 Or KugelBX>KugelAX+1 Or KugelBY<KugelAY-Mo Or KugelBY>KugelAY+Mo:Case 1
AnzB=0
End Select
;--------------------------Kugeln Anzeigen------------------------------
For ZY=0 To MaxFeldY-1:For ZX=0 To MaxFeldX-1
X=ZX*TilesGr:Y=ZY*TilesGr+PunkteLeiste:T=TilesGr*.25:DrawImage Kugeln,X,Y,Feld(ZX,ZY)
Select ZX=KugelAX And ZY=KugelAY And AnzA:Case 1:Color 255,255,0:Oval X+T,Y+T,T*2,T*2:End Select
Select ZX=KugelBX And ZY=KugelBY And AnzB:Case 1:Color 0,0,100:Oval X+T,Y+T,T*2,T*2:End Select
Next:Next
;-------------------------Prüfen auf Reihen----------------------------
PrufY=PrufY+1:Select PrufY=>MaxFeldY:Case 1:PrufY=0:End Select
For ZX=0 To MaxFeldX-1:Select Feld(ZX,PrufY)>0:Case 1:S=0:Repeat:S=S+1
Until Feld(ZX+S,PrufY)<>Feld(ZX,PrufY) Or S+ZX>MaxFeldX
Select S>1:Case 1:For ZZ=0 To S-1:Feld(ZX+ZZ,PrufY)=0:Next:Color 255,255,255
;-------------------RammenMachen Wenn gefunden eine Reihe---------"
Rect ZX*TilesGr,PrufY*TilesGr+PunkteLeiste,S*TilesGr,TilesGr,0:Warte=1:Select Pause>0
Case 1:Punkte=Punkte+2^(S+1);"Punkteberechnung"
End Select:End Select:End Select:Next

Color 255,255,255:Text 0,0,"Punkte"+Punkte

;"----------Nachrutchende Kugeln------------------"
Select MilliSecs()>Timer+Speed And Pause>0 Case 1
Timer=MilliSecs():Repeat:PX=Rnd(MaxFeldX-1):Until Feld(PX,0)=0
Feld(PX,0)=Rnd(TilesMaxTyp-1):Tod=1:For ZX=0 To MaxFeldX-1:Select Feld(ZX,0):Case 0
Tod=0:End Select:Next
Select Tod:Case 1:Text 200,200,"Tod Du looser....":Warte=1:Pause=2000:End Select:End Select

Flip:Select Warte:Case 1:Delay Pause:End Select
Until KeyDown(1) Or Tod=1:End


Mfg Matthias

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSo, Okt 08, 2006 14:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
wie kann ich machen das alle Steine die neben einander sind zu löschen?
Code: [AUSKLAPPEN]
Type Kill Field x,y End Type

Function CheckSteine ()
   
    For y = 0 To 15
        For x = 0 To 15 - 2 ; wegen Array Index Out
            If Spielfeld (x,y) = 2 Then
                If Spielfeld (x + 1 ,y) = 2 And Spielfeld (x + 2 ,y) = 2 Then
               ; sichern welcher gelöscht werden soll
               a.Kill = New Kill :a\x = X :a\y = Y
               a.Kill = New Kill :a\x = X +1:a\y = Y
                    a.Kill = New Kill :a\x = X +2:a\y = Y
                EndIf
                ;        If Spielfeld(x-1,y) = 2 And Spielfeld(x-2,y) = 2 Then
                ;          Spielfeld(x,y) = 1
                ;          Spielfeld(x-1,y) = 1
                ;          Spielfeld(x-2,y) = 1
                ;        EndIf
            EndIf
        Next
    Next
   
    For a.Kill = Each Kill
        Spielfeld (a\x,a\y) = 1
        Delete a.Kill
    Next
   
End Function
[BB2D | BB3D | BB+]

D2006

Administrator

BeitragMo, Okt 09, 2006 0:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Rekursion wäre eventuell zu empfehlen.

PseudoCode: [AUSKLAPPEN]
FUNKTION machweg(x,y,farbe)
SETZE map(x,y) = -1 ;irgendein Wert, der anzeigt, dass hier nix ist
WENN x+1 GÜLTIG UND map(x+1,y) = farbe DANN machweg(x+1,y,farbe)
WENN y+1 GÜLTIG UND map(x,y+1) = farbe DANN machweg(x,y+1,farbe)
WENN x-1 GÜLTIG UND map(x-1,y) = farbe DANN machweg(x-1,y,farbe)
WENN y-1 GÜLTIG UND map(x,y-1) = farbe DANN machweg(x,y-1,farbe)
ENDE FUNKTION


Was wichtig wäre: kümmer dich um herunterfallen von Steinen in die Lücken erst wenn alle Steine entfernt wurden. Also erst nach dem Aufruf von machweg.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group