Tetris
Übersicht

![]() |
NoobyBetreff: Tetris |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallihallo,
ich hab schon wieder ein Problem mit meinem Tetris. Wer nett ist kann sich mal da einhacken: http://www.freeuploader.com/view.php/136169.rar Wieso geht das nicht? Sieht ziemlich komisch aus, was? http://img164.imageshack.us/img164/2246/tet7qy.gif Bitte helft mir!!! ![]() |
||
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/ |
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hm, der Link funktioniert nicht. Was ist denn das Problem, was du meinst? Dass mehrere Steine auf einmal herunterfallen oder dass die Kollision irgendwie nciht richtig geht?
Jiriki |
||
http://i3u8.blogspot.com
Asus Striker II Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-) Geforce 9800 GTX 2GB RAM |
![]() |
Nooby |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also bei mir geht der Link. ![]() Das Problem ist schwer zu erklären. Die Steine Spiegeln sich irgendwie... Naja man braucht den Code und (ich glaube) auch die Bilder. Vielleicht kannst du dir ja selber sieben 20x20 Bilder machen. Code: Graphics 1024,768,32,1
SetBuffer BackBuffer() FlushMouse FlushKeys Dim stein(6,3,3,1) ;(Nummer, Drehung, Blocknummer, x/y) Dim position(1) Dim block(6) Dim feld(24,38) aktstein=0 drehung=0 position(0)=11 position(1)=38 For a=0 To 6 block(a)=LoadImage("data\graphics\farbe"+(a+1)+".png") Next backround=LoadImage("data\graphics\backround.png") Cls stein(0,0,0,0)=1 stein(0,0,0,1)=0 stein(0,0,1,0)=1 stein(0,0,1,1)=1 stein(0,0,2,0)=1 stein(0,0,2,1)=2 stein(0,0,3,0)=1 stein(0,0,3,1)=3 stein(0,1,0,0)=0 stein(0,1,0,1)=1 stein(0,1,1,0)=1 stein(0,1,1,1)=1 stein(0,1,2,0)=2 stein(0,1,2,1)=1 stein(0,1,3,0)=3 stein(0,1,3,1)=1 stein(0,2,0,0)=1 stein(0,2,0,1)=0 stein(0,2,1,0)=1 stein(0,2,1,1)=1 stein(0,2,2,0)=1 stein(0,2,2,1)=2 stein(0,2,3,0)=1 stein(0,2,3,1)=3 stein(0,3,0,0)=0 stein(0,3,0,1)=1 stein(0,3,1,0)=1 stein(0,3,1,1)=1 stein(0,3,2,0)=2 stein(0,3,2,1)=1 stein(0,3,3,0)=3 stein(0,3,3,1)=1 stein(1,0,0,0)=1 stein(1,0,0,1)=0 stein(1,0,1,0)=2 stein(1,0,1,1)=0 stein(1,0,2,0)=1 stein(1,0,2,1)=1 stein(1,0,3,0)=1 stein(1,0,3,1)=2 stein(1,1,0,0)=0 stein(1,1,0,1)=1 stein(1,1,1,0)=1 stein(1,1,1,1)=1 stein(1,1,2,0)=2 stein(1,1,2,1)=1 stein(1,1,3,0)=2 stein(1,1,3,1)=2 stein(1,2,0,0)=1 stein(1,2,0,1)=0 stein(1,2,1,0)=1 stein(1,2,1,1)=1 stein(1,2,2,0)=1 stein(1,2,2,1)=2 stein(1,2,3,0)=0 stein(1,2,3,1)=2 stein(1,3,0,0)=0 stein(1,3,0,1)=0 stein(1,3,1,0)=0 stein(1,3,1,1)=1 stein(1,3,2,0)=1 stein(1,3,2,1)=1 stein(1,3,3,0)=2 stein(1,3,3,1)=1 stein(2,0,0,0)=0 stein(2,0,0,1)=0 stein(2,0,1,0)=1 stein(2,0,1,1)=0 stein(2,0,2,0)=1 stein(2,0,2,1)=1 stein(2,0,3,0)=1 stein(2,0,3,1)=2 stein(2,1,0,0)=2 stein(2,1,0,1)=0 stein(2,1,1,0)=0 stein(2,1,1,1)=1 stein(2,1,2,0)=1 stein(2,1,2,1)=1 stein(2,1,3,0)=2 stein(2,1,3,1)=1 stein(2,2,0,0)=1 stein(2,2,0,1)=0 stein(2,2,1,0)=1 stein(2,2,1,1)=1 stein(2,2,2,0)=1 stein(2,2,2,1)=2 stein(2,2,3,0)=2 stein(2,2,3,1)=2 stein(2,3,0,0)=0 stein(2,3,0,1)=1 stein(2,3,1,0)=1 stein(2,3,1,1)=1 stein(2,3,2,0)=2 stein(2,3,2,1)=1 stein(2,3,3,0)=0 stein(2,3,3,1)=2 stein(3,0,0,0)=0 stein(3,0,0,1)=0 stein(3,0,1,0)=1 stein(3,0,1,1)=0 stein(3,0,2,0)=1 stein(3,0,2,1)=1 stein(3,0,3,0)=2 stein(3,0,3,1)=1 stein(3,1,0,0)=2 stein(3,1,0,1)=0 stein(3,1,1,0)=1 stein(3,1,1,1)=1 stein(3,1,2,0)=2 stein(3,1,2,1)=1 stein(3,1,3,0)=1 stein(3,1,3,1)=2 stein(3,2,0,0)=0 stein(3,2,0,1)=0 stein(3,2,1,0)=1 stein(3,2,1,1)=0 stein(3,2,2,0)=1 stein(3,2,2,1)=1 stein(3,2,3,0)=2 stein(3,2,3,1)=1 stein(3,3,0,0)=2 stein(3,3,0,1)=0 stein(3,3,1,0)=1 stein(3,3,1,1)=1 stein(3,3,2,0)=2 stein(3,3,2,1)=1 stein(3,3,3,0)=1 stein(3,3,3,1)=2 stein(4,0,0,0)=1 stein(4,0,0,1)=1 stein(4,0,1,0)=2 stein(4,0,1,1)=1 stein(4,0,2,0)=0 stein(4,0,2,1)=2 stein(4,0,3,0)=1 stein(4,0,3,1)=2 stein(4,1,0,0)=1 stein(4,1,0,1)=0 stein(4,1,1,0)=1 stein(4,1,1,1)=1 stein(4,1,2,0)=2 stein(4,1,2,1)=1 stein(4,1,3,0)=2 stein(4,1,3,1)=2 stein(4,2,0,0)=1 stein(4,2,0,1)=1 stein(4,2,1,0)=2 stein(4,2,1,1)=1 stein(4,2,2,0)=0 stein(4,2,2,1)=2 stein(4,2,3,0)=1 stein(4,2,3,1)=2 stein(4,3,0,0)=1 stein(4,3,0,1)=0 stein(4,3,1,0)=1 stein(4,3,1,1)=1 stein(4,3,2,0)=2 stein(4,3,2,1)=1 stein(4,3,3,0)=2 stein(4,3,3,1)=2 stein(5,0,0,0)=1 stein(5,0,0,1)=1 stein(5,0,1,0)=2 stein(5,0,1,1)=1 stein(5,0,2,0)=1 stein(5,0,2,1)=2 stein(5,0,3,0)=2 stein(5,0,3,1)=2 stein(5,1,0,0)=1 stein(5,1,0,1)=1 stein(5,1,1,0)=2 stein(5,1,1,1)=1 stein(5,1,2,0)=1 stein(5,1,2,1)=2 stein(5,1,3,0)=2 stein(5,1,3,1)=2 stein(5,2,0,0)=1 stein(5,2,0,1)=1 stein(5,2,1,0)=2 stein(5,2,1,1)=1 stein(5,2,2,0)=1 stein(5,2,2,1)=2 stein(5,2,3,0)=2 stein(5,2,3,1)=2 stein(5,3,0,0)=1 stein(5,3,0,1)=1 stein(5,3,1,0)=2 stein(5,3,1,1)=1 stein(5,3,2,0)=1 stein(5,3,2,1)=2 stein(5,3,3,0)=2 stein(5,3,3,1)=2 stein(6,0,0,0)=1 stein(6,0,0,1)=0 stein(6,0,1,0)=1 stein(6,0,1,1)=1 stein(6,0,2,0)=2 stein(6,0,2,1)=1 stein(6,0,3,0)=1 stein(6,0,3,1)=2 stein(6,1,0,0)=0 stein(6,1,0,1)=1 stein(6,1,1,0)=1 stein(6,1,1,1)=1 stein(6,1,2,0)=2 stein(6,1,2,1)=1 stein(6,1,3,0)=1 stein(6,1,3,1)=2 stein(6,2,0,0)=1 stein(6,2,0,1)=0 stein(6,2,1,0)=0 stein(6,2,1,1)=1 stein(6,2,2,0)=1 stein(6,2,2,1)=1 stein(6,2,3,0)=1 stein(6,2,3,1)=2 stein(6,3,0,0)=1 stein(6,3,0,1)=0 stein(6,3,1,0)=0 stein(6,3,1,1)=1 stein(6,3,2,0)=1 stein(6,3,2,1)=1 stein(6,3,3,0)=2 stein(6,3,3,1)=1 Repeat Delay 100 Cls DrawImage backround,0,0 For a=0 To 24 For b=0 To 38 If feld(a,b)<>0 Then DrawImage block(feld(a,b)),100+20*a,(38-b)*20 Next Next wand1=False wand2=False If check Then For a=0 To 3 feld(position(0)+stein(aktstein,drehung,a,0),position(1)+stein(aktstein,drehung,a,1))=aktstein Next aktstein=aktstein+1 If aktstein=7 Then aktstein=0 check=False position(1)=38 position(0)=11 Else For a=0 To 3 If position(0) + stein(aktstein,drehung,a,0)=0 Then wand1 = True : Goto weiter If feld(position(0) + stein(aktstein,drehung,a,0)-1,position(1)-stein(aktstein,drehung,a,1))<>0 Then wand1=True If position(0) + stein(aktstein,drehung,a,0)=24 Then wand2 = True : Goto weiter If feld(position(0) + stein(aktstein,drehung,a,0)+1,position(1)-stein(aktstein,drehung,a,1))<>0 Then wand2=True Next .weiter If KeyDown(203) And (Not wand1) position(0)=position(0)-1 ElseIf KeyDown(205) And (Not wand2) position(0)=position(0)+1 ElseIf KeyDown(200) b=drehung+1 EndIf EndIf Text 0,0,position(0) Text 0,20,position(1) For a=0 To 24 For b=0 To 34 If feld(a,b)<>0 Then DrawImage block(feld(a,b)),100+20*a,20*b Next Next x=0 For a=0 To 3 If position(1) - stein(aktstein,drehung,a,1)=0 Or feld(position(0)+stein(aktstein,drehung,a,0),position(1)-stein(aktstein,drehung,a,1))<>0 Then x=1 Next If x check=True Else position(1)=position(1)-1 EndIf For a=0 To 3 DrawImage(block(aktstein),100+(position(0)+stein(aktstein,drehung,a,0))*20,(34-position(1)+stein(aktstein,drehung,a,1))*20) Next Flip Until KeyHit(1) End |
||
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/ |
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hm, was willst du überhaupt mit diesem Anzeigen der Steine da oben erwirken? Verstehe ich nciht so ganz. Versuch es doch ersteinmal ohne korrekt zu lösen und mach dann weiter.
Jiriki |
||
http://i3u8.blogspot.com
Asus Striker II Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-) Geforce 9800 GTX 2GB RAM |
![]() |
Blitzard |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaube er meint des Problem oben und unten zusammenkleben.
Also unten ma rand solltest du ne kollision für die Steine einbauen if steiny= bla then steiny = bla Und oben ville3icht auch ne kollisions abfrqage? |
||
User posted image |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm, ich habe mir jetzt nicht so den Code angeschaut, aber vielleicht hilt ja folgendes. Das Spielfeld würde ich in jeder Richtung um die Anzahl größer machen, wie die Dimension des Steinarrays ist. Also 4... Ist sicherlich nicht die sauberste Methode, aber macht die Sache wesentlich einfacher in der Handhabung. Sonst muß eine dynamische If-Abfrage da rein um kein Überlauf der Arrays zu erzeugen. Auf Kollision könnte man dann einfach per 'And' oder einfaches addieren machen. Als Beispiel mal eine Funktion per Addition:
Code: Global SteinXPos Global SteinYPos ... Function kollision() For y=0 to 3 For x=0 to 3 If SteinArray(x,y) + MapArray(x+SteinXPos,y+SteinYPos+1,Drehung)=>2 Then Return 1 Next Next End Function Da jeder Eintrag von 0 kein Stein bedeutet, ist alles andere ein Stein in jeweil einer Farbe oder wie auch immer. Eine Summe von beiden muß also einen Wert von 2 oder mehr haben. Code: 1111000000001111
1111000000001111 1111[0100]001111 <--- Hier fällt ein neuer Stein! 1111[0100]001111 | 1111[0100]001111 | 1111[0100]001111 <--- Hier fällt ein neuer Stein! 1111000000001111 Position beträgt zZ 4,2 1111000001001111 1111000001001111 1111033021001111 1111332221001111 1111111111111111 1111111111111111 1111111111111111 1111111111111111 Bei vor jeder Bewegung wird auf die Kollisionsfumktion verwiesen, um zu testen, ob sich das Feld weiter nach unten bewegen kann. Auch muß vor einer Drehung des Steines über diese Funktion getestet werden, ob es überhaupt möglich ist... Das Anzeigen der Map würde ich dann natürlich nicht mit der Mauer umrum machen, sondern nur die Mitte davon. Die Mauer diehnt nur zur leicheren Berechnung. Die paar Einträge mehr im Speicherverbrauch kann man ohne weiteres hinnehmen. |
||
![]() |
Nooby |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich glaube, wir reden aneinander vorbei...
eigentlich müsste alles funktionieren, das tut es aber nicht: wenn ein Stein unten ist, passiert was ganz komisches mit ihm. Er wird verdoppelt und total falsch angezeigt. Ich muss wohl irgendwo im Code nen Tipp- oder Denkfehler haben, bloß ich find ihn nicht. ![]() ![]() |
||
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/ |
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hm, einfach so (ohne Kommentare) hab ich ehrlich gesagt nicht die Zeit das zu machen. Wenn du den Code nochmal ordentlich kommentieren würdest und ihn in Functions teilen würdest, hättest du auch sicher mehr Leute, die dir helfen würden.
Jiriki |
||
http://i3u8.blogspot.com
Asus Striker II Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-) Geforce 9800 GTX 2GB RAM |
Gerhard |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
For a=0 To 24
For b=0 To 38 If feld(a,b)<>0 Then DrawImage block(feld(a,b)),100+20*a,(38-b)*20 Next Next Und weiter unten kommt: For a=0 To 24 For b=0 To 34 If feld(a,b)<>0 Then DrawImage block(feld(a,b)),100+20*a,20*b Next Next Ist das ok? |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group