Tetris
Übersicht

![]() |
NoobyBetreff: Tetris |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallihallo,
ich hab da einige Probleme mit mienem Tetris, u.a. dieses: grabimage Damit die schon da liegenden Steine auch da bleiben grabbe ich das image jedesmal, wenn ein Stein ankommt. Das kostet zuviel Arbeitsspeicher. Syntax: Code: [AUSKLAPPEN] Repeat
Delay 50 Cls DrawImage backround,0,0 DrawImage steine,100,0 If KeyHit(203) Then If Not ImagesCollide(aktform,w*20+80,500,0,backround,0,0,0) And (Not ImagesCollide(aktform,w*20+80,500,0,steine,100,0,0)) Then w=w-1 EndIf If KeyHit(205) Then If Not ImagesCollide(aktform,w*20+120,500,0,backround,0,0,0) And (Not ImagesCollide(aktform,w*20+120,500,0,steine,100,0,0)) Then w=w+1 EndIf h=h-1 DrawImage aktform,w*20+100,700-h*20 If ImagesCollide(aktform,w*20+100,720-h*20,0,backround,0,0,0) Or (ImagesCollide(aktform,w*20+100,720-h*20,0,steine,100,0,0)) GrabImage steine,100,0 h=35 aktform=Form(Rand(1,2)) EndIf Flip Until KeyHit(1) PS: Geht der BB-Code eigentlich wieder? |
||
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/ |
Absoluter Beginner |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
benutze lieber arrays | ||
Error Inside! |
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
Absoluter Beginner hat Folgendes geschrieben: benutze lieber arrays
Auch ich würde die Lage der Steine mit einem Array hinterlegen. Wie es scheint, prüfst du alles anhand der Bilder. Das mag vielleicht für einen Anfänger leichter zugänglich sein, aber mit den damit verbndenen Nachteilen hast du ja schon zu kämpfen. Da ein Tetrisstein nur aus Blöcken besteht, ist so ein Array bestimmt mit die beste Sache das ganze zu modellieren. |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
![]() |
NoobyBetreff: ...?! |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kann mir vielleicht jemand einen Denkanstoß geben, wie ich das schreiben könnte, vorallem das drehen? ![]() |
||
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/ |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da nicht jeder Stein gleich groß ist und daher der Mittelpunkt der Steine mal innerhalb eines Steines oder mal zwischen zwei Steinen sein kann, würde ich dafür ein zusätzliches Array hinterlegen, wo die Drehungen bereits 'vorberechnet' sind. Also ein Array für das Spielfeld und ein weiteres für die Spielsteine. Das Spielsteinarray hat dann 4 'Frames' für jede Position jedes Steines...
zB: Code: [AUSKLAPPEN] stein(0,0) bis stein(0,3)
0 1 2 3 -#-- ---- ##-- --#- -#-- ###- -#-- ###- -##- #--- -#-- ---- ---- ---- ---- ---- stein(1,0) bis stein(1,3) 0 1 2 3 -#-- -##- -#-- -##- -##- ##-- -##- ##-- --#- ---- --#- ---- ---- ---- ---- ---- stein(2,0) bis stein(2,3) 0 1 2 3 --#-- ---- --#- ---- --#-- #### --#- #### --#-- ---- --#- ---- --#-- ---- --#- ---- |
||
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Und dann soltest du noch ein Array anlegen, in dem du die Position der Steine Vermerkst. In etwa so:
Code: [AUSKLAPPEN] Dim Steine (10, 100) ;für ein Feld, dass zehn felder in der x und 100 in der y Achse hat. Der Inhalt sieht dann entweder so aus: Code: [AUSKLAPPEN] 098. Reihe:11000010101101 099. Reihe:01111110101010 100. Reihe:10011111111111 Und dass hieße dann, dass du nur Steine in weiß hast, und dann malst du jeden Schleifendurchlauf immer wo eine eins ist einen Block. Oder so: Code: [AUSKLAPPEN] 098. Reihe:41506032341503 099. Reihe:02353302020310 100. Reihe:12031434562342 Und dass könntest du dann in verschiedene Farben umsetzten, z.B.: 1 = rot, 2 = gelb, 3 = blau usw. Und dann könntest du so die Steine Malen. Aber da das ganze schon sehr teoretisch ist, ist es für dich villeicht einfacher es doch anderst zu machen ![]() Wenn du es trotzdem nach meinem Vorschlag machen willst und nach Fragen hast, frag einfach nochmal ![]() 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 |
![]() |
NoobyBetreff: Jo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke euch beiden! ![]() Ihr habt mir gezeigt, dass ich doch nich ganz sooo doof bin, denn in er Zwischenzeit hab ich mir was überlegt, was ungefähr (<-schreibt man das so?) euren Vorschlägen entspricht. Also: Code: [AUSKLAPPEN] dim block(7,4,2) ;(Steinnummer,Drehung,x\y)
Code: [AUSKLAPPEN] block(3,2,1)=3
block(3,2,2)=2 hieße also, dass der Spielstein Nr.3 mit der Drehung 2 auf den x-Koordinaten 3 und auf den y-Koordinaten 2 einen Block hat: Code: [AUSKLAPPEN] ----
--#- ---- ---- Richtig so? (Is aber wahnsinnig aufwändig!) |
||
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/ |
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das mit den x und y Koordinaten in diesem Dim ist unsinn ![]() Naja, meine Erklärweise... Hab jetzt aber grad keine zeit, villeicht später nochmal. 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 ![]() |
---|---|---|
Jaja, du meintest das Spielfeld, aber ich meine die Spielsteine.
Das mit dem Spielfeld ist so natürlich eine gute Lösung. (Oder hab ich da was falsch verstanden?) Auserdem ist mir da -oops- ein kleiner Fehler unterlaufen... es muss natürlichCode: [AUSKLAPPEN] dim block(7,4,4,2) ;(Steinnummer,Drehung,Blocknummer,x/y-Koordinaten) heißen.
Is aber ziemlich aufwändig, da ich 224 constanten definieren muss... Hab ich aber schon. Wenn jemand ne einfachere Lösung hat, soll er's sagen. Hier ist der (extrem lange) Code: Code: [AUSKLAPPEN] Graphics 1024,768,32,1
SetBuffer BackBuffer() FlushMouse FlushKeys Dim stein(7,4,4,2) ;(Nummer, Drehung, Klotznummer, x/y) Dim block(7) For a=1 To 7 block(a)=LoadImage("data\graphics\farbe"+a+".png") Next Cls For a=1 To 7 DrawImage block(a),30*a,10 Next Flip WaitKey Cls stein(1,1,1,1)=2 stein(1,1,1,2)=1 stein(1,1,2,1)=2 stein(1,1,2,2)=2 stein(1,1,3,1)=2 stein(1,1,3,2)=3 stein(1,1,4,1)=2 stein(1,1,4,2)=4 stein(1,2,1,1)=1 stein(1,2,1,2)=2 stein(1,2,2,1)=2 stein(1,2,2,2)=2 stein(1,2,3,1)=3 stein(1,2,3,2)=2 stein(1,2,4,1)=4 stein(1,2,4,2)=2 stein(1,3,1,1)=2 stein(1,3,1,2)=1 stein(1,3,2,1)=2 stein(1,3,2,2)=2 stein(1,3,3,1)=2 stein(1,3,3,2)=3 stein(1,3,4,1)=2 stein(1,3,4,2)=4 stein(1,4,1,1)=1 stein(1,4,1,2)=2 stein(1,4,2,1)=2 stein(1,4,2,2)=2 stein(1,4,3,1)=3 stein(1,4,3,2)=2 stein(1,4,4,1)=4 stein(1,4,4,2)=2 stein(2,1,1,1)=2 stein(2,1,1,2)=1 stein(2,1,2,1)=3 stein(2,1,2,2)=1 stein(2,1,3,1)=2 stein(2,1,3,2)=2 stein(2,1,4,1)=2 stein(2,1,4,2)=3 stein(2,2,1,1)=1 stein(2,2,1,2)=2 stein(2,2,2,1)=2 stein(2,2,2,2)=2 stein(2,2,3,1)=3 stein(2,2,3,2)=2 stein(2,2,4,1)=3 stein(2,2,4,2)=3 stein(2,3,1,1)=2 stein(2,3,1,2)=1 stein(2,3,2,1)=2 stein(2,3,2,2)=2 stein(2,3,3,1)=2 stein(2,3,3,2)=3 stein(2,3,4,1)=1 stein(2,3,4,2)=3 stein(2,4,1,1)=1 stein(2,4,1,2)=1 stein(2,4,2,1)=1 stein(2,4,2,2)=2 stein(2,4,3,1)=2 stein(2,4,3,2)=2 stein(2,4,4,1)=3 stein(2,4,4,2)=2 stein(3,1,1,1)=1 stein(3,1,1,2)=1 stein(3,1,2,1)=2 stein(3,1,2,2)=1 stein(3,1,3,1)=2 stein(3,1,3,2)=2 stein(3,1,4,1)=2 stein(3,1,4,2)=3 stein(3,2,1,1)=3 stein(3,2,1,2)=1 stein(3,2,2,1)=1 stein(3,2,2,2)=2 stein(3,2,3,1)=2 stein(3,2,3,2)=2 stein(3,2,4,1)=3 stein(3,2,4,2)=2 stein(3,3,1,1)=2 stein(3,3,1,2)=1 stein(3,3,2,1)=2 stein(3,3,2,2)=2 stein(3,3,3,1)=2 stein(3,3,3,2)=3 stein(3,3,4,1)=3 stein(3,3,4,2)=3 stein(3,4,1,1)=1 stein(3,4,1,2)=2 stein(3,4,2,1)=2 stein(3,4,2,2)=2 stein(3,4,3,1)=3 stein(3,4,3,2)=2 stein(3,4,4,1)=1 stein(3,4,4,2)=3 stein(4,1,1,1)=1 stein(4,1,1,2)=1 stein(4,1,2,1)=2 stein(4,1,2,2)=1 stein(4,1,3,1)=2 stein(4,1,3,2)=2 stein(4,1,4,1)=3 stein(4,1,4,2)=2 stein(4,2,1,1)=3 stein(4,2,1,2)=1 stein(4,2,2,1)=2 stein(4,2,2,2)=2 stein(4,2,3,1)=3 stein(4,2,3,2)=2 stein(4,2,4,1)=2 stein(4,2,4,2)=3 stein(4,3,1,1)=1 stein(4,3,1,2)=1 stein(4,3,2,1)=2 stein(4,3,2,2)=1 stein(4,3,3,1)=2 stein(4,3,3,2)=2 stein(4,3,4,1)=3 stein(4,3,4,2)=2 stein(4,4,1,1)=3 stein(4,4,1,2)=1 stein(4,4,2,1)=2 stein(4,4,2,2)=2 stein(4,4,3,1)=3 stein(4,4,3,2)=2 stein(4,4,4,1)=2 stein(4,4,4,2)=3 stein(5,1,1,1)=2 stein(5,1,1,2)=2 stein(5,1,2,1)=3 stein(5,1,2,2)=2 stein(5,1,3,1)=1 stein(5,1,3,2)=3 stein(5,1,4,1)=2 stein(5,1,4,2)=3 stein(5,2,1,1)=2 stein(5,2,1,2)=1 stein(5,2,2,1)=2 stein(5,2,2,2)=2 stein(5,2,3,1)=3 stein(5,2,3,2)=2 stein(5,2,4,1)=3 stein(5,2,4,2)=3 stein(5,3,1,1)=2 stein(5,3,1,2)=2 stein(5,3,2,1)=3 stein(5,3,2,2)=2 stein(5,3,3,1)=1 stein(5,3,3,2)=3 stein(5,3,4,1)=2 stein(5,3,4,2)=3 stein(5,4,1,1)=2 stein(5,4,1,2)=1 stein(5,4,2,1)=2 stein(5,4,2,2)=2 stein(5,4,3,1)=3 stein(5,4,3,2)=2 stein(5,4,4,1)=3 stein(5,4,4,2)=3 stein(6,1,1,1)=2 stein(6,1,1,2)=2 stein(6,1,2,1)=3 stein(6,1,2,2)=2 stein(6,1,3,1)=2 stein(6,1,3,2)=3 stein(6,1,4,1)=3 stein(6,1,4,2)=3 stein(6,2,1,1)=2 stein(6,2,1,2)=2 stein(6,2,2,1)=3 stein(6,2,2,2)=2 stein(6,2,3,1)=2 stein(6,2,3,2)=3 stein(6,2,4,1)=3 stein(6,2,4,2)=3 stein(6,3,1,1)=2 stein(6,3,1,2)=2 stein(6,3,2,1)=3 stein(6,3,2,2)=2 stein(6,3,3,1)=2 stein(6,3,3,2)=3 stein(6,3,4,1)=3 stein(6,3,4,2)=3 stein(6,4,1,1)=2 stein(6,4,1,2)=2 stein(6,4,2,1)=3 stein(6,4,2,2)=2 stein(6,4,3,1)=2 stein(6,4,3,2)=3 stein(6,4,4,1)=3 stein(6,4,4,2)=3 stein(7,1,1,1)=2 stein(7,1,1,2)=1 stein(7,1,2,1)=2 stein(7,1,2,2)=2 stein(7,1,3,1)=3 stein(7,1,3,2)=2 stein(7,1,4,1)=2 stein(7,1,4,2)=3 stein(7,2,1,1)=1 stein(7,2,1,2)=2 stein(7,2,2,1)=2 stein(7,2,2,2)=2 stein(7,2,3,1)=3 stein(7,2,3,2)=2 stein(7,2,4,1)=2 stein(7,2,4,2)=3 stein(7,3,1,1)=2 stein(7,3,1,2)=1 stein(7,3,2,1)=1 stein(7,3,2,2)=2 stein(7,3,3,1)=2 stein(7,3,3,2)=2 stein(7,3,4,1)=2 stein(7,3,4,2)=3 stein(7,4,1,1)=2 stein(7,4,1,2)=1 stein(7,4,2,1)=1 stein(7,4,2,2)=2 stein(7,4,3,1)=2 stein(7,4,3,2)=2 stein(7,4,4,1)=3 stein(7,4,4,2)=2 For a=1 To 7 For b=1 To 4 For c=1 To 4 DrawImage block(a),stein(a,b,c,1)*20,stein(a,b,c,2)*20 Next Flip WaitKey Cls Next Next Repeat Delay 10 Cls Flip Until KeyHit(1) End |
||
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/ |
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Was genau speicherst du eigentlich in diesem Dim? Hab das irgendwie nicht so ganz verstanden... Und wofür?
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 ![]() |
---|---|---|
Ich speichere die Anordnung der Blöcke in einem Spielstein, da sie ja, sobald der Stein unten ist unabhängig voneinander verwaltet werden | ||
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/ |
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Aber warum verwaltest du sie denn unabhängig? versteh ich erhlichgesagt nicht... Aber wenn es dir hilft ![]() 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 ![]() |
---|---|---|
Na damit ich einzelne Reihen unten löschen kann:
Code: [AUSKLAPPEN] ---#-----##-
--####--#### #########-#- ############ #####-###-#- Die 4. Reihe von oben muss gelöscht werden, da sie voll ist. Oder wie würdest du das machen? Oder kennst du Tetris gar anders? |
||
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/ |
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Und wofür deklarierst du dann vorher mehr als 200 Constanten? Das mit dem Spielfeld war ja das was ich dir vorgeschlagen hatte aber wofür du diese Spielsteine brauchst (vorallem 200 und etwas) verstehe ich nicht ![]() 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 mag ja sein, dass ich mir da was vieeeeel zu umständlich mache, aber ich erklärs trotzdem nochmal:
Das hier ist ein Block: ![]() Und das hier ist der Stein, der aus mehreren Blöcken besteht: ![]() Man stellt sich den Stein nun in einem Koordinaten System vor: ![]() Jetz habe ich für jeden der 7 Steine alle 4 blöcke "koordiniert" also Code: [AUSKLAPPEN] stein(1,4,4,2) ;(Steinnummer,Drehung,Blocknr,x/y-Koordinaten)
Klar? ![]() |
||
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/ |
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mach es für einen Stein einfach so:
Code: [AUSKLAPPEN] Dim Steine(AnzahlDerVerschiednenSteine, 3, 3) ;für den ViererStein z.B. 0000 1111 0000 0000 Denn es reicht eigentlich, wenn du es ohne Drehung hast. Die kannst du dann ja ausrechenen. Wenn du es aber einfacher findest... Mach es so^^ Du kannst es übrigens auch noch mit Types in Kombination mit Blitzarrays machen, nur so als kurze Anregung ![]() 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 ![]() |
---|---|---|
Dann müsste ich mir aber noch einen Konverter basteln, aber der code wäre insgesammt kürzer. Right ![]() Wegen der Drehung: Die Steine muss man doch auch im Spiel drehen können... |
||
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/ |
![]() |
Nooby |
![]() Antworten mit Zitat ![]() |
---|---|---|
PS: und wieso 3,3 ![]() |
||
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/ |
![]() |
5k41 |
![]() Antworten mit Zitat ![]() |
---|---|---|
weil ein array von 0 anfäng... so zählen zu lernen ist verdammt wichtig! | ||
Projekte:
For a better World - Gesellschaftsspiel ( 100%) User posted image |
![]() |
Nooby |
![]() Antworten mit Zitat ![]() |
---|---|---|
wegen 3,3 klar: ![]() wegen Drehung: Achso(Falsch verstanden) ![]() |
||
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/ |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group