Tetris

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Nooby

Betreff: Tetris

BeitragSa, März 25, 2006 14:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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!!! Crying or Very sad
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/
 

ke^kx

BeitragSa, März 25, 2006 15:14
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, März 25, 2006 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei mir geht der Link. Confused
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

BeitragSa, März 25, 2006 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, März 26, 2006 9:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, März 26, 2006 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, März 26, 2006 17:53
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Rolling Eyes Kann sich da mal wer einfuxxen? Wink
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/
 

ke^kx

BeitragSo, März 26, 2006 21:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, März 27, 2006 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
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?

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group