

                                 Tutorial:
                           Spiele-Programmierung
                               von GD^CRAZY


                          
                    <<< KAPITEL 2: Jetzt gehts los! >>>



 Kontakt:

 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 fr 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, wrde ich sagen, wir erschaffen uns erstmal eine einfache
 Player-Struktur. Nun werden einige sich wahrscheinlich fragen: "Player-Struktur???"
 
 Wir wollen fr den Anfang ein kleines Spiel zusammen programmieren, das eine Art
 Jumpn 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 verndert?)

 Sodele. In C/C++ she 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, knnen 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 mchte ich mich auf den stinknormalen
 25x80 Textmodus konzentrieren ... but dont 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 sttzen.
 Hier ist meine "Global-Struktur" fr den Textmodus.

 /* Code-Anfang */
 
 int Map [25][80];			// Landkarte des Spiels

 struct MyGlobals {
 int tilesize;			// Feldergre (fr Jumpn Runs etc.)
 int screensizex;		// Gre des Bilschirms X
 int screensizey;		//  "     "      "      Y
 int status;			// Status-Variable (ist manchmal ganz ntzlich)
 }


 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 fr den Player und die virtuelle Welt, aber
 wir knnen nichts damit anfangen! Ok, das wird sich jetzt ndern! Hier der Code fr eine
 einfache Anzeige-Routine im Textmodus. Sie ist zwar nicht die schnellste, aber dafr leicht
 zu verstehen:

 void ThePlayer::Draw () 
 {
	if (update==1)    			// Ist Update ntig?
	{
		textcolor (0);			// Schwarze Farbe
		gotoxy (oldxpos, oldypos);  	// Zeichne an OldX u. OldY
		cprintf (" ");			// Lsche 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 Stck deshalb: Auf, Ab, Rechts, Links! Achtung: Diese Codes haben noch keine
 Kollisionsabfrage! Wir werden sie erst spter 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 knnen! Nur wie machen wir das?
 Da ich jetzt (noch) nicht in die Interrupt-Programmierung einsteigen mchte, nehmen
 wir die ganz normalen Tastaturabfragen in C/C++. Die sind zwar nicht die schnellsten,
 aber dafr einfach zu erlernen.

 void ThePlayer::EventManager ()
 {
	char ch;
	if (kbhit()) ch=getch ();	// Auf Tastendruck warten
 
	if (ch==27) exit (0);		// Wenn ESC gedrckt wurde, dann abbrechen
	if (ch==0)			// Wenn Sondertaste gedrckt wurde (Scancode 0)
	{
		ch=getch ();
		if (ch==72) MoveUp ();		// Wenn Cursor NACH OBEN gedrckt 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 nchstes Tutorial wird in den nchsten Tagen verfgbar 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 Lffler aka GD^CRAZY
 

 Kontakt:

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


                               -=[EOF]=-
