Programm-Version v1.12 von RandomXmas vom 9.1.2002 (ca. 82.000 Bytes)
Readme.txt: 9.1.2002  (215 Zeilen)
tex*.bmp: 9.1.2002 (ca. 45.600 Bytes)
makefile: 9.1.2002  (48 Zeilen) (neu)
Programmierer: Stefan Ziegler
Mails an: stefan.ziegler@s1998.tu-chemnitz.de
Webseite: http://www.tu-chemnitz.de/~zst/weihnachten/weihprogs.html

			Lizenz/License

/* RandomXmas v1.12 zu Weihnachten 2001 
 * Frei kopierbar, aber nur vollstndig mit diesem Spiel.cpp, Makefile,
 * readme.txt und tex*.bmp. Vernderungen mglich, bei Weitergabe aber
 * immer Original Spiel.cpp mit beilegen (gleicht moegliche Fehler im 
 * geaenderten Teil aus),
 * Keine Patentierungen auf Teile des oder ganzes Programm(s)*/
/* RandomXmas v1.12 for Christmas 2001
 * Free Copying, only with all belonging program files, Makefile, Readme.txt,
 * and tex*.bmp. Changes are possible, but republishing only with all original
 * files (to have an original if there will be any mistakes in changes).
 * I don't want any software patents on parts or all of the program.*/

			Inhalt:

1. Anleitungen

1.1 Bedienung/Which Keys used in game (only in German)
1.2 Spielbeschreibung/Game description (only in German)
1.3 Benutzung/Using it (only in German)
1.4 Texturen/Textures (only in German)

2. Programmierung

2.1 Geschichte des Programms/History of the program(only in German)
2.2 Geplante Verbesserungen /ToDo List (only in German)
2.3 Klassen/Classes (only in German)

			1. Anleitungen
			==============

			1.1 Bedienung:

- Tasten 'x', 'y', 'z' drehen Spielfeld auf der entsprechenden Achse,
  je um 30 Grad in positiver Richtung.
- Tasten 'X', 'Y', 'Z' drehen Spielfeld entsprechend in negativer Richtung.
- Mit Taste 'i' drehen sie das Spielfeld wieder in die Ausgangsrichtung.
- Mit 'd', 'v', 'r' schalten Sie zwischen (D)rehen, (V)erschieben und 
  (R)eshape (Fenstergroesse) um. 
  Bei allen funktioniert 'X'/'x', 'Y', 'y', 'i', beim Verschieben/Drehen
  natuerlich auch 'z'/'Z'.
- Taste 'p' schaltet Punktanzeige an/aus.
- 'Esc'-Taste beendet Spiel vorzeitig mit Punktzahl 0.
- Spielfigur bewegen Sie mit Cursortasten.
- Mit Taste 'Ende' aufladen fuer Sprung, ausgefuehrt mit Cursortasten.
- Scrollen bei Highscore mit 'Bild hoch' oder 'Bild herunter'(Page Up/Down)
- Umschalten auf Blick von Spielfigur/von aussen mit 'b'. ausgefuehrt nach
  einer Bewegung der Spielfigur.
- Theoretisch auch mit Joystick (nicht getestet).
Die Groesse des Fensters ist variabel, sollte aber quadratisch gehalten 
werden, sonst verdreht sich in Extremfaellen das Spielfeld nach unten.

		     1.2. Spielbeschreibung:

  Sammeln Sie Punkte unter (zufaellige Werte) und ueber (zufaellig, aber 
gleicher Buchstabe(nur noch 6 verschiedene) - gleiche Veraenderung)
den Baeumen (hineinlaufen/springen).
In einigen Faellen aendert sich dabei die Maximalpunktzahl (nicht zufaellig).
  Mit groesseren Huegeln wechseln sie in andere Ebenen. In einigen Faellen
verlieren sie aber auch(siehe Konstanten). Bei kleineren passiert nichts. Fuer
die Buchstaben darueber gilt das gleiche wie bei den Baeumen.
  Wenn die Maximalpunktzahl erreicht ist (rechts von den Punkten), dann
gehen sie in einen Huegel und das Spiel ist beendet (oder mit 'Esc'). 
Wenn sie eine Taste druecken, kommt die TopTen und darunter ihre Punktzahl
(bei verlorenen -1, abgebrochenen Spielen 0) mit Datum, Uhrzeit und Namen.
Mit 'Esc'-Taste beendet sich dann das Programm.

			1.3. Benutzung:

Braucht Libraries GL, GLU, GLUT und andere Standardbibliotheken.
Download-Hinweise bei www.opengl.org -> Downloads
Glut: http://www.opengl.org/developers/documentation/glut.html
glut.dll fuer Windows bei http://www.xmission.com/~nate/glut.html
Uebersetzungs-Hinweise bei: http://www.lighthouse3d.com/opengl/glut/

Variable DETAILS in konstanten.h: 10 ist Standard, d.h. 100 Polygone je Kugel,
50 Polygone je Kegel(-stumpf).

1. spiel11.tar.gz in ein Verzeichnis kopieren, auspacken mit 
   'gzip -d spiel11.tar.gz' und 'tar -xvf spiel11.tar'
2. Programm uebersetzen mit 'make spiel'
3. Bei fehlerfreier Uebersetzung ist eine Datei 'spiel' angelegt worden.
   Mit dieser koennen Sie dann das Spiel starten.
4. Mit './spiel' starten sie das Programm
5. Mit './spiel highscore' wird das Punktergebnis in dieses File eingetragen.
   Die Filelaenge ist beliebig (sollte in den Speicher passen), je Zeile 
   werden 100 Zeichen gelesen (sonst Umbruch) und nach Einordnung der 
   erspielten Punkte die Zeilen geschrieben.
6. Mit './spiel highscore Name' oder 'spiel highscore Vorname Nachname' wird
   der Name ins Highscorefile mit eingetragen.
7. Also am besten Variante 6 in Script/Batch-Datei stecken und damit starten.

			   1.4 Texturen

Als Texturen koennen beliebige BMP-Dateien genutzt werden. Diese werden dann
auf das entsprechende Objekt draufgelegt(gestreckt/gezerrt) und dargestellt.
Durch die erwaehnte Zerrung sieht das Bild dann nicht immer so aus wie 
erwartet. Auf der Ebene wird es nur verkleinert/vergroessert.

Voreingestellt sind folgende Dateinamen entsprechend ihrer Bestimmung:
- "texebene.bmp"          Dateiname fuer Textur auf Ebene
- "texhuegel.bmp"         Dateiname fuer Textur auf Huegel
- "texbaum.bmp"           Dateiname fuer Textur auf Baeumen
- "texcap.bmp"            Dateiname fuer Textur auf Muetze des Weihnachtsmannes
- "texhead.bmp"           Dateiname fuer Textur auf Kopf des Weihnachtsmannes
- "texbody.bmp";          Dateiname fuer Textur auf Mantel des Weihnachtsmannes
- "texshoes.bmp"          Dateiname fuer Textur auf Schuhen

Zum Testen, ob das Bild im Programm ladbar ist, kann man "testtexturen"
verwenden (make testtexturen). Starten mit "testtexturen <Bilddatei.bmp>"
Das geladene Bild kann man dann genauso drehen und verschieben wie die Ebene
oder das Highscorefile im Spiel.
Es muessen nicht alle Dateien vorhanden sein! Wenn eine fehlt, sieht die 
Darstellung genauso aus wie in Version 1.11 . Es entsteht kein Programmfehler.
Die Groesse ist beliebig, sollte aber in den Speicher passen(4 Byte pro Pixel
und Zusatzinfos). Bei grossen Bildern dauert aber das Laden am Programmstart
laenger und diese werden meist stark verkleinert, damit sie "passen".

			2. Programmierung
			=================

			  2.1 History:

21.12.2000: erste Beta-Version, einige kleinere Macken, aber keine schweren
		Fehler, spielbar
22.12.2000: v1.00 Erste nahezu fehlerfreie Version
25.12.2000: v1.01 -Anzeige der Geschenke ausschaltbar,
		  -eine schon vorhandene Ebene wird nicht neu angelegt, wenn in
		   sie gewechselt wird (sonst Speicher belegt, der nicht
		   wieder freigegeben werden kann)
		  -Readme mit History
		  -Versionsnummern eingefuehrt.
05.01.2001: v1.02 Punktanzeige korrigiert, jetzt FELDEINHEIT ueberall
		  Mass fuer Abstand, statt MAXFELDHOEHE zwischen grossen und
		  kleinen Geschenken.
06.01.2001: v1.03 Zeitausgabe am Ende umprogrammiert auf gettimeofday. und ohne
		  doppeltes Newline
		  Makefile erweitert auf alle X-Libs
09.11.2001: v1.10 - Punkteanzeige mit Ziffern, Schriftverwendung,
		  - Highscorefile-Verarbeitung/Anzeige,
		  - Punktesammeln erweitert,
		  - globales Licht in Szene und entsprechende Farben,
		  - Joystickfunktion eingebaut aber nicht getestet,
		  - Aufteilen des Codes in Files mit den entsprechende Klassen,
		  - Standard-Sicht veraendert.
		  - ToDoList eingefuegt in readme
23.12.2001: v1.11 - Sprunghoehe abhaengig von MAXFELDHOEHE
		  - Quadrics geloescht bei Ebenenwechsel
		  - Schriftanzeige deutlicher, von 64 auf ca. 128 Zeichen
		  - auch bei Highscore X-Drehung(vorher nur Y/Z) moeglich
		  - Highscore zeigt jetzt auch beliebiges File ohne Probleme 
		    an (bei Readonly-Rechten auch nicht veraendert)
		  - Filelaenge beliebig durch Nutzung von Listen
		  - Scrolling bei Highscore-Dateianzeige.
		  - Displaylisten in extra Programmstueck ausprobiert
		  - Detaillevel einstellbar fuer Baeume/Huegel
		  - Klassen-Beschreibung eingefuehrt in Readme.txt
05.01.2002: v1.12 - Tabulator in Grafikausgabe korrigiert, 1 als erste Position
		  - Displaylisten und Texturen vollstaendig in Ebene/Feld,
		    auch ungerade Anzahl in MAXFELD unterstuetzt
		  - Mann mit Texturen, auf eigenen Blickwinkel umschaltbar,
		    bei Bedarf auch mit DETAILS anpassbar, Displaylist
		  - nur noch 6 verschiedene Buchstaben zum Punktesammeln
		  - Klasse Texturen, kann sie auch selber darstellen
		  - Klasse Stringlist geaendert, nur noch strlen in FindText
		    abhaengig von Grundtyp char-Feld.
		  - Readme mit Inhalt, Abschnitte Texturen, Lizenz,
		    Teile in Englisch.
		  - Vier Textur-Dateien mitgeliefert, Makefile neu geschrieben
		  - Darstellung von Mann/Ebene/Feld weniger Push-/Popmatrix,
		    beschleunigt
		  - Double-Buffer eingefuehrt gegen Flimmern beim Neu-Zeichnen

			2.2 ToDoList:

nicht vor Maerz 2002:
- Mausunterstuetzung per glutmotionfunc,
- Version fuer Nicht-Weihnachtszeit (Farben, Felder, Spielfigur, Texturen),
- ladbare Schriften (Konsolefonts ?),
- Sound (Soundblaster-Beeps und Wavefile-Abspielung),
- Netzwerk- und Mehrspieler-Modus irgendwann

			2.3 Klassen:

Ebene: 		Darstellung eines Levels, nutzt Feld, Grafikausgabe und
(ebenefeld.h)	Texture
Feld: 		Darstellung eines Gegenstandes(Baum/Huegel),
(ebenefeld.h)	nutzt Grafikausgabe und Texture
Geschenke: 	Punkte eines Spielers, Darstellung dieser, nutzt Grafikausgabe
Grafikausgabe:	Darstellung/Aufbewahrung von Zahlen, char[]-Zeichenketten
Simplelist: 	Grundklasse der Listen, einfach verkettet, fuer Zahlen
(listen.h)	Template spaeter ?
Stringlist: 	Listenklasse fuer char-Felder(Strings), abgeleitet von 
(listen.h)	Simplelist, Texttype derzeit nur fuer char-Felder,
	    	strlen fuer beliebige Felder ? dann Template-Klasse.
Doublelist: 	Doppeltverkettete Liste fuer Listenhierarchie (nimmt Listen 
(listen.h)	auf), abgeleitet von Simplelist. Template spaeter ?
Mann: 		Darstellung, Verwaltung eines Spielers, nutzt Geschenke, 
		Grafikausgabe, Spielraumtyp und Texture
Highscoreboard: Darstellung des Highscore oder allgemein von Files, nutzt 
(spiel.cpp)	Doublelist, Stringlist und Grafikausgabe
Spielraumtyp: 	Aufnahme aller noetigen Variablen eines Spiels, Nutzung von
(ebenefeld.h)  	Ebene, Texture, ohne Spieler, spaeter Struct -> Klasse ?
Texture:	Laden einer Textur aus BMP-Datei, Darstellung/Nutzen dieser
Main-Prog Spiel.cpp: nutzt Spielraumtyp, Mann, Highscoreboard.

