|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
DarK Super JLI'ler
Anmeldedatum: 23.07.2002 Beiträge: 452 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 20.08.2003, 01:42 Titel: zu doof für alles |
|
|
hi,
anscheinend bin ich zu doof fürn dummes Tetris, kann mir jemand einen Ansatz geben um mir zu helfen ?
Steine fallen lassen, schön und gut, verschieden farbige Stein , auch kein problem.... nur kollisionsmässig breuchte ich ein paar gute Ansätze...
Code: | xxxx // spielfeld[y+1][x] = NULL; |
kein problem
Runterbewegen
Code: |
x //spielfeld[y+1][x] = NULL;
x
x
x
|
bullshit
Rechtsbewegung
Code: | xxxx // spielfeld[y][x+1] = NULL; |
auch bullshit
plz help _________________ "Denken ist Arbeit, Arbeit ist Energie und Energie soll man sparen."
"Theorie ist, wenn man alles weiss, aber nichts funktioniert.
Praxis ist, wenn man nichts weiss, aber alles funktioniert.
Realität ist, wenn nichts funktioniert und keiner weiss warum."
"Es gehört ein wenig Mut dazu nicht das zu tun was ALLE tun" |
|
Nach oben |
|
|
nEp Junior JLI'ler
Anmeldedatum: 03.06.2003 Beiträge: 75
Medaillen: Keine
|
Verfasst am: 20.08.2003, 04:55 Titel: |
|
|
Also du speicherst jeden "Tetris-Stein" in einer 4*4 Matrix, und das 4 mal -für jede Rotation einmal- (im Endeffekt ist das ein dreidimensionales Array (4*4*4)) . Das sieht dann z.B. so aus:
0100 0000 0100 0000
0100 0000 0100 0000
0100 1111 0100 1111
0100 0000 0100 0000
Das wäre jetzt für so ein langes Ding. Du kannst verschiedene Zahlen für verschiedene Farben benutzen. "0" bedeutet halt dass da nix ist(also nix gezeichnet wird). Der Tetris-Stein ist somit aus 4 Quadraten zusammengesetzt. Du läufst dann für die jeweilige Rotation einfach den ganzen Array durch und zeichnest alles was != 0 ist an der jeweiligen Position (ist im Prinzip wie eine Tile-Engine). Für das Spielfeld benutzt du ein 2 dimensionales Array. Wenn du das Spielfeld zeichnen willst, läufst du auch gneauso wie oben das ganze Array durch und schaust was sich in jedem Element befindet, "0" steht z.B. wieder für nichts, und 1 würde dann eben z.B. für die obige Farbe stehen (also würde sich an dieser Stelle im Array ein einzelner Block befinden). Um dann z.B. zu überprüfen ob eine Reihe voll ist, durchläufst du einfach eine Reihe im Array und schaust ob dort jedes Element ungleich Null ist, wenn ja dann ist die Reihe voll. Naja sry komm gerade von der Arbeit und geh jetzt erst mal schlafen ist natürlich unvollständig, aber ich hoffe es hilft dir ein bisschen. Wenn du dich mit Tile-Engines auskennst wird das kein großes Problem sein.. |
|
Nach oben |
|
|
DarK Super JLI'ler
Anmeldedatum: 23.07.2002 Beiträge: 452 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 20.08.2003, 05:08 Titel: |
|
|
du hast genau alles gesagt was ich bereits habe ..
und genau das nicht was ich brauche, und zwar die kollision wenn der stein anhalten muss wenn dort unter ihm schon einer ist _________________ "Denken ist Arbeit, Arbeit ist Energie und Energie soll man sparen."
"Theorie ist, wenn man alles weiss, aber nichts funktioniert.
Praxis ist, wenn man nichts weiss, aber alles funktioniert.
Realität ist, wenn nichts funktioniert und keiner weiss warum."
"Es gehört ein wenig Mut dazu nicht das zu tun was ALLE tun" |
|
Nach oben |
|
|
underberg JLI'ler
Anmeldedatum: 11.01.2003 Beiträge: 153
Medaillen: Keine
|
Verfasst am: 20.08.2003, 05:57 Titel: |
|
|
Also folgendes... Du machst eine Struktur so groß wie dein Spielfeld beispielsweise 10*40 dort speicherst du alles wo ein Stein liegt mit 1 ab und alles andere ist 0... (+2 in der breite für den Rand)
Jetzt erschaffst du dir eine zweite Struktur die die maximalen Ausmaße eines Steines hat (Ich schätze mal 4*4) und trägst über all dort wo der Stein ist eine 1 ein... Speichern tust du von diesem Feld noch die obere Linke ecke... Sobald jetzt zwei Einsen aufeinandertreffen hast du ne Kollision... |
|
Nach oben |
|
|
DarK Super JLI'ler
Anmeldedatum: 23.07.2002 Beiträge: 452 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 20.08.2003, 06:51 Titel: |
|
|
versteh ich net _________________ "Denken ist Arbeit, Arbeit ist Energie und Energie soll man sparen."
"Theorie ist, wenn man alles weiss, aber nichts funktioniert.
Praxis ist, wenn man nichts weiss, aber alles funktioniert.
Realität ist, wenn nichts funktioniert und keiner weiss warum."
"Es gehört ein wenig Mut dazu nicht das zu tun was ALLE tun" |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 20.08.2003, 07:37 Titel: |
|
|
Hallo,
erstmal ist ein Tetris zu schreiben eine gute Idee, ich bin schon auf das Ergebnis gespannt.
du erstellst ein Feld in mit Breite 10 und Höhe 40:
Code: |
unsigned char Spielfeld[30][10] = {
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,0,0,0,0,0,0,0,0,1,
1,1,1,1,1,1,1,1,1,1 };
unsigned char Stein1[4][4] = {
0,1,0,0,
0,1,0,0,
0,1,0,0,
0,1,0,0 };
// hier Stein 2,3,4,5 usw.
|
Wenn der nächste Stein aufs Spielfeld kommt, hat er die Position 29, 3 im Spielfeld. Jede Sekunde prüfst du, bevor du eins von der Position (Y-Wert) abziehst, ob du dann bereits am Ende des Feldes angekommen bist oder ob sich ein Stein direkt unter dem Stein befindet. Das gleiche gilt für die Bewegung nach links und rechts. Das ist eigentlich schon alles.
C.
Zuletzt bearbeitet von Christian Rousselle am 20.08.2003, 16:21, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
DarK Super JLI'ler
Anmeldedatum: 23.07.2002 Beiträge: 452 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 20.08.2003, 07:50 Titel: |
|
|
irgendwie weiss ich auch net wofür ich den Stein da brauch, ich erzeug doch die Steine auf dem Spielfeld durch die Zahlen ???
ah plz help , ich rall es net _________________ "Denken ist Arbeit, Arbeit ist Energie und Energie soll man sparen."
"Theorie ist, wenn man alles weiss, aber nichts funktioniert.
Praxis ist, wenn man nichts weiss, aber alles funktioniert.
Realität ist, wenn nichts funktioniert und keiner weiss warum."
"Es gehört ein wenig Mut dazu nicht das zu tun was ALLE tun" |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 20.08.2003, 09:10 Titel: |
|
|
Du packst die Steine gleich in das Spielfeld Array? Das ist eine schlechte Idee... Dann weißt du doch garnicht mehr was sich bewegen soll und was schon fest ist. _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
nEp Junior JLI'ler
Anmeldedatum: 03.06.2003 Beiträge: 75
Medaillen: Keine
|
Verfasst am: 20.08.2003, 12:17 Titel: |
|
|
man kann ja ein zweiten array als "buffer" benutzen.
Doch DarK im Prinzip steht das schon auch da, halt nicht direkt. |
|
Nach oben |
|
|
DarK Super JLI'ler
Anmeldedatum: 23.07.2002 Beiträge: 452 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 20.08.2003, 15:27 Titel: |
|
|
und wie krieg ich den Stein Array dann ins Spielfeld? _________________ "Denken ist Arbeit, Arbeit ist Energie und Energie soll man sparen."
"Theorie ist, wenn man alles weiss, aber nichts funktioniert.
Praxis ist, wenn man nichts weiss, aber alles funktioniert.
Realität ist, wenn nichts funktioniert und keiner weiss warum."
"Es gehört ein wenig Mut dazu nicht das zu tun was ALLE tun" |
|
Nach oben |
|
|
underberg JLI'ler
Anmeldedatum: 11.01.2003 Beiträge: 153
Medaillen: Keine
|
Verfasst am: 20.08.2003, 15:58 Titel: |
|
|
So ungefähr (habs jetzt nicht ausprobiert):
Code: | int Pos_X, Pos_Y;
//Beispiel-Stein
int Stein[4][4]={0,0,1,0,
0,1,1,0,
1,1,1,0,
0,1,1,0};
int Feld[10][40]={...}
void Kollision()
{
for (int i=0;i<4;++i)
{
if ((Stein[i][3]==1)&&(Feld[Pos_X+i][PosY+5]==1))
{
UebernehmeStein();
Nächster Stein();
break;
}
}
} |
Und dann musst du das selbe noch für Links und Rechts machen bei der Tastaturauswertung und statt if, if not nehmen und nur dann die Bewegung erlauben...
So müsste es eigentlich gehen... |
|
Nach oben |
|
|
DarK Super JLI'ler
Anmeldedatum: 23.07.2002 Beiträge: 452 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 21.08.2003, 00:42 Titel: |
|
|
thx,
kennt jemand ein Tetris Tutorial ?
ich hab nun kein Plan wie ich den doofen Stein Array in beziehung zum Spielfeld zeichnen soll
so zeichne ich mein Spielfeld, aber den Stein muss ich doch irgendwie Extra oder net?
Code: |
void Render()
{
Background.draw();
int spriteX = 0;
int spriteY = 0;
for (int y = 0; y < 30; y++)
{
for (int x = 0; x < 10; x++)
{
switch (Spielfeld[y][x])
{
case BLAU:
Stone[1].setposition(spriteX, spriteY);
Stone[1].draw();
break;
case BRAUN:
Stone[2].setposition(spriteX, spriteY);
Stone[2].draw();
break;
case GELB:
Stone[3].setposition(spriteX, spriteY);
Stone[3].draw();
break;
case GRAU:
Stone[4].setposition(spriteX, spriteY);
Stone[4].draw();
break;
case GRUEN:
Stone[5].setposition(spriteX, spriteY);
Stone[5].draw();
break;
case ORANGE:
Stone[6].setposition(spriteX, spriteY);
Stone[6].draw();
break;
case PINK:
Stone[7].setposition(spriteX, spriteY);
Stone[7].draw();
break;
case ROT:
Stone[8].setposition(spriteX, spriteY);
Stone[8].draw();
break;
}
spriteX += 20;
}
spriteX = 0;
spriteY += 20;
}
}
|
_________________ "Denken ist Arbeit, Arbeit ist Energie und Energie soll man sparen."
"Theorie ist, wenn man alles weiss, aber nichts funktioniert.
Praxis ist, wenn man nichts weiss, aber alles funktioniert.
Realität ist, wenn nichts funktioniert und keiner weiss warum."
"Es gehört ein wenig Mut dazu nicht das zu tun was ALLE tun" |
|
Nach oben |
|
|
underberg JLI'ler
Anmeldedatum: 11.01.2003 Beiträge: 153
Medaillen: Keine
|
Verfasst am: 21.08.2003, 05:31 Titel: |
|
|
Warte mal...
Ich versuch grad mal ein Tetrisspiel zu schreiben...
Vielleicht hilfts dir, wird aber ein ganz einfaches... |
|
Nach oben |
|
|
Hazel JLI MVP
Alter: 39 Anmeldedatum: 19.07.2002 Beiträge: 1761
Medaillen: Keine
|
Verfasst am: 21.08.2003, 05:39 Titel: |
|
|
Tetristutorial?? Man sollte schon versuchen das Spiel an sich selber zu schreiben. Wo bleibst sonst die Erfahrung? .... Ach, und kennt jemand zufällig ein Unreal-Tutorial? ;) _________________ *click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
|
|
Nach oben |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 21.08.2003, 08:22 Titel: |
|
|
Hazel hat Folgendes geschrieben: | Tetristutorial?? Man sollte schon versuchen das Spiel an sich selber zu schreiben. Wo bleibst sonst die Erfahrung? .... Ach, und kennt jemand zufällig ein Unreal-Tutorial? |
Nein Unreal leider nicht, aber eins für Quake!
(http://www.zfx.info/Tutorials.php?ID=1) _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|