Frage zu Dim Felder?
Übersicht

![]() |
Schranz0r |
![]() Antworten mit Zitat ![]() |
---|---|---|
achso meinst du das, könnet man ja auch selber drauf kommen ![]() Dank dir, für den Tip |
||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!HAUPTSACH et kost VIEL!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
blackmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hat keiner ne idee wie ich das machen kann? | ||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hay Blackmaster. Müssen alle 5Kugeln die gleiche farbe haben so wie bei Tetris?? | ||
blackmaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hier mal mein Screen:
![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
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+]
|
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group