Warning: session_start(): open(/var/lib/php/sessions/sess_c5d8a52703097c817e2a293acf54043e, O_RDWR) failed: No such file or directory (2) in /var/www/web1319/html/cwx/phpwebed/config.inc.php on line 1

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /var/www/web1319/html/cwx/phpwebed/config.inc.php:1) in /var/www/web1319/html/cwx/phpwebed/config.inc.php on line 1
codeworx.org - GameDev - Tutorials - Klassen

www.codeworx.org/game-dev/Klassen

Klassen

mail: andy@unitedbytes.de
www : http://www.unitedbytes.de

Release Date: 10/02/99

2.1 Jetzt gehts los!
====================

Hiieeyaa! Hier bin ich wieder mit meinem 2. Tutorial! Ich hoffe, das das hier
genausogut ankommt, wie das erste Tut!! Heute werden wir ein paar grundlegende
Dinge besprechen wie: Strukturen für den Player, Programmieren der Haupt-Engine,
Kollisions-Abfrage usw ...

2.2 Mit was fangen wir an?
==========================

Hmm ... *gruebel* ...mit was fangen wir am Besten an? Da ihr schon grundlegende
Kenntnisse in C/C++ habt, würde ich sagen, wir erschaffen uns erstmal eine einfache
Player-Struktur. Nun werden einige sich wahrscheinlich fragen: "Player-Struktur???"

Wir wollen für den Anfang ein kleines Spiel zusammen programmieren, das eine Art
Jump´n Run + Adventure werden soll. Gut. Und jetzt schauen wir uns einmal so eine
"Player Struktur" an:


Struktur:
Name: ..........Eddy Mustermann (mir ist nix besseres eingefallen!)
Position x .....20 (X-Position der Figur)
Position y .....20 (Y-Position der Figur)
Feld x .........3 (auf welchem X-Feld? )
Feld y .........3 ( " Y-Feld? )
Energie ........100 (Lebens-Energie der Figur)
CanFly .........0/1 (kann der Typ fliegen?)
AttackPower ....5 (Angriffskraft)
CurrentWeapon ..1 (Welche Waffe?)
Speed ..........10 (Schnelligkeit der Figur)
Update .........0/1 (hat sich irgendetwas verändert?)

Sodele. In C/C++ sähe das dann so aus:

/* Code-Anfang */ 
class ThePlayer{ 
   public: 
   char *name; 
   int xpos; 
   int ypos; 
   int xfeld; 
   int yfeld; 
   int energie; 
   short canfly; 
   int attackpower; 
   int currentweapon; 
   int speed; 
   int update; 
}; 
   
/* Code-Ende */ 

Sehr gut. Jetzt haben wir eine Klasse names "ThePlayer" erstellt. Klassen bringen uns sehr
viele Vorteile in der Spieleprogrammierung, weil man sehr einfach neue Player ins Spiel bringen
kann, ohne das was ändern muss ... na gut, fast nichts! :)


2.3 Einstieg in die Grafikwelt !?
=================================

Nun, mit den Kenntnissen, die wir jetzt schon haben, können wir (leider) noch kein Spiel
schreiben! Ich werde euch jetzt nicht (noch nicht!) mit Grafik-Knowhow versorgen, weil
die Grafik vorerst noch Nebensache ist. Daher möchte ich mich auf den stinknormalen
25x80 Textmodus konzentrieren ... but don´t worry! Mode13 is coming soon!! ;)

Jetzt brauchen wir noch eine Struktur die ich in meinen Spielen IMMER verwende. Ihr Name
ist "Global". Global deswegen, weil sich alle anderen Funktionen, Klassen usw. auf diese
Struktur stützen.
Hier ist meine "Global-Struktur" für den Textmodus.

 /* Code-Anfang */ 
   
int Map [25][80]; // Landkarte des Spiels 
struct MyGlobals { 
   int tilesize; // Feldergröße (für Jump´n Runs etc.) 
   int screensizex; // Größe des Bilschirms X 
   int screensizey; // " " " Y 
   int status; // Status-Variable (ist manchmal ganz nützlich) 
} 
 

2.4 Here is it!! Der komplette Quellcode
========================================

Hehe ...dachtet ihr wohl!! Ich packe den Quellcode doch net in eine Textdatei!
Alle Sources, die bei meinen Tutorials mitgeliefert werden, sind gleich komplette
C/C++ Dateien.

Jetzt haben wir zwar eine wunderbare Struktur für den Player und die virtuelle Welt, aber
wir können nichts damit anfangen! Ok, das wird sich jetzt ändern! Hier der Code für eine
einfache Anzeige-Routine im Textmodus. Sie ist zwar nicht die schnellste, aber dafür leicht
zu verstehen:

void ThePlayer::Draw () 
{ 
   if (update==1) // Ist Update nötig? 
   { 
      textcolor (0); // Schwarze Farbe 
      gotoxy (oldxpos, oldypos); // Zeichne an OldX u. OldY 
      cprintf (" "); // Lösche Player 
      textcolor (14); // Gelbe Farbe 
      gotoxy (xpos, ypos); // Zeichne an X u. Y 
      cprintf ("O"); // Das 'O' kann auch gegen ein anderes Zeichen 
      // eurer Wahl ausgetauscht werden! 
      update=0; // Update wieder auf 0 setzen 
   } 
} 


Gut. Jetzt brauchen wir noch 4 Funktionen, um den Player bewegen zu lassen.
4 Stück deshalb: Auf, Ab, Rechts, Links! Achtung: Diese Codes haben noch keine
Kollisionsabfrage! Wir werden sie erst später einbauen.

void ThePlayer::MoveUp () 
{ 
   oldxpos=xpos; 
   oldypos=ypos; 
   ypos--; 
   update=1; 
} 
void ThePlayer::MoveDown () 
{ 
   oldxpos=xpos; 
   oldypos=ypos; 
   ypos++; 
   update=1; 
} 
void ThePlayer::MoveRight () 
{ 
   oldxpos=xpos; 
   oldypos=ypos; 
   xpos++; 
   update=1; 
} 
   
void ThePlayer::MoveLeft () 
{ 
   oldxpos=xpos; 
   oldypos=ypos; 
   xpos--; 
   update=1; 
} 

Wow! Jetzt haben wir alles, um den Player bewegen zu können! Nur wie machen wir das?
Da ich jetzt (noch) nicht in die Interrupt-Programmierung einsteigen möchte, nehmen
wir die ganz normalen Tastaturabfragen in C/C++. Die sind zwar nicht die schnellsten,
aber dafür einfach zu erlernen.

void ThePlayer::EventManager () 
{ 
   char ch; 
   if (kbhit()) ch=getch (); // Auf Tastendruck warten 
   if (ch==27) exit (0); // Wenn ESC gedrückt wurde, dann abbrechen 
   if (ch==0) // Wenn Sondertaste gedrückt wurde (Scancode 0) 
   { 
      ch=getch (); 
      if (ch==72) MoveUp (); // Wenn Cursor NACH OBEN gedrückt wurde 
      if (ch==80) MoveDown (); // " " NACH UNTEN " " 
      if (ch==77) MoveRight (); // " " NACH RECHTS " " 
      if (ch==75) MoveLeft (); // " " NACH LINKS " " 
   }
}

Taattaaa!! Unser erstes kleines (Test-) Spiel ist fertig!! Man kann jetzt den Player auf
dem Bildschirm herumbewegen.

2.5 Ende von Kapitel 2
======================

Yep, das war Kapitel 2! Ich hoffe, es hat euch gefallen! :)
Mein nächstes Tutorial wird in den nächsten Tagen verfügbar sein.
Es kann aber auch sein, das das ganze noch n paar Tage warten muss,
weil ich z.Zt in der Schule ziemlich viel zu tun habe ;)

Cya in the next tutorial,

Andreas Löffler aka GD^CRAZY

Kontakt:

mail: andy@unitedbytes.de
www : http://www.unitedbytes.de

-=[EOF]=-

 
 

Warning: Unknown: open(/var/lib/php/sessions/sess_c5d8a52703097c817e2a293acf54043e, O_RDWR) failed: No such file or directory (2) in Unknown on line 0

Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/sessions) in Unknown on line 0