JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

zu doof für alles
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
DarK
Super JLI'ler



Anmeldedatum: 23.07.2002
Beiträge: 452
Wohnort: NRW
Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 01:42    Titel: zu doof für alles Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nEp
Junior JLI'ler



Anmeldedatum: 03.06.2003
Beiträge: 75

Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 04:55    Titel: Antworten mit Zitat

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 Sad 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
Benutzer-Profile anzeigen Private Nachricht senden
DarK
Super JLI'ler



Anmeldedatum: 23.07.2002
Beiträge: 452
Wohnort: NRW
Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 05:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
underberg
JLI'ler



Anmeldedatum: 11.01.2003
Beiträge: 153

Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 05:57    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
DarK
Super JLI'ler



Anmeldedatum: 23.07.2002
Beiträge: 452
Wohnort: NRW
Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 06:51    Titel: Antworten mit Zitat

versteh ich net Sad
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 07:37    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
DarK
Super JLI'ler



Anmeldedatum: 23.07.2002
Beiträge: 452
Wohnort: NRW
Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 07:50    Titel: Antworten mit Zitat

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 Sad
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 09:10    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nEp
Junior JLI'ler



Anmeldedatum: 03.06.2003
Beiträge: 75

Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 12:17    Titel: Antworten mit Zitat

man kann ja ein zweiten array als "buffer" benutzen.
Doch DarK im Prinzip steht das schon auch da, halt nicht direkt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DarK
Super JLI'ler



Anmeldedatum: 23.07.2002
Beiträge: 452
Wohnort: NRW
Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 15:27    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
underberg
JLI'ler



Anmeldedatum: 11.01.2003
Beiträge: 153

Medaillen: Keine

BeitragVerfasst am: 20.08.2003, 15:58    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
DarK
Super JLI'ler



Anmeldedatum: 23.07.2002
Beiträge: 452
Wohnort: NRW
Medaillen: Keine

BeitragVerfasst am: 21.08.2003, 00:42    Titel: Antworten mit Zitat

thx,
kennt jemand ein Tetris Tutorial ? Confused
ich hab nun kein Plan wie ich den doofen Stein Array in beziehung zum Spielfeld zeichnen soll Sad

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
underberg
JLI'ler



Anmeldedatum: 11.01.2003
Beiträge: 153

Medaillen: Keine

BeitragVerfasst am: 21.08.2003, 05:31    Titel: Antworten mit Zitat

Warte mal...
Ich versuch grad mal ein Tetrisspiel zu schreiben...
Vielleicht hilfts dir, wird aber ein ganz einfaches...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 21.08.2003, 05:39    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 21.08.2003, 08:22    Titel: Antworten mit Zitat

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? Wink

Nein Unreal leider nicht, aber eins für Quake! Wink
(http://www.zfx.info/Tutorials.php?ID=1)
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
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

Impressum