Tetris

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

Nooby

Betreff: Tetris

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

BeitragSo, März 12, 2006 23:26
Antworten mit Zitat
Benutzer-Profile anzeigen
benutze lieber arrays
Error Inside!

SpionAtom

BeitragSo, März 12, 2006 23:33
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Nooby

Betreff: ...?!

BeitragSo, März 19, 2006 15:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann mir vielleicht jemand einen Denkanstoß geben, wie ich das schreiben könnte, vorallem das drehen? Sad
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, März 19, 2006 15:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, März 19, 2006 16:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

Wenn du es trotzdem nach meinem Vorschlag machen willst und nach Fragen hast, frag einfach nochmal Very Happy

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

Betreff: Jo

BeitragSo, März 19, 2006 20:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke euch beiden! Wink
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

BeitragSo, März 19, 2006 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Das mit den x und y Koordinaten in diesem Dim ist unsinn Wink Ich meinte, das ganze statt eines immer wieder aktualisierendem Spielfeldimage...

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

BeitragMo, März 20, 2006 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, März 20, 2006 16:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, März 20, 2006 16:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, März 20, 2006 22:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber warum verwaltest du sie denn unabhängig? versteh ich erhlichgesagt nicht... Aber wenn es dir hilft Wink

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

BeitragDi, März 21, 2006 17:02
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 21, 2006 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Sad

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

BeitragDi, März 21, 2006 18:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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:
user posted image
Und das hier ist der Stein, der aus mehreren Blöcken besteht:
user posted image
Man stellt sich den Stein nun in einem Koordinaten System vor:
user posted image
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? Wink
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/
 

ke^kx

BeitragDi, März 21, 2006 18:48
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

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

BeitragDi, März 21, 2006 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann müsste ich mir aber noch einen Konverter basteln, aber der code wäre insgesammt kürzer. Right Question

Wegen der Drehung: Die Steine muss man doch auch im Spiel drehen können...
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/

Nooby

BeitragDi, März 21, 2006 18:54
Antworten mit Zitat
Benutzer-Profile anzeigen
PS: und wieso 3,3 Question
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/

5k41

BeitragDi, März 21, 2006 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 21, 2006 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
wegen 3,3 klar: Rolling Eyes

wegen Drehung: Achso(Falsch verstanden) Rolling Eyes
DAS PERPETUOMOBILE!!!
http://www.sax.de/~stalker/pad/199801/

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group