Programm-Version v1.14 von RandomXmas vom 29.11.2002 (ca. 347 KB)
Readme.txt: 29.11.2002  (247 Zeilen)
Texturen: *.bmp: 05.05.2002 (77.512 Bytes)
makefile: 08.08.2002  (73 Zeilen) 
Programmierer: Stefan Ziegler
Mails an: 
stefan.ziegler@s1998.tu-chemnitz.de
Webseite: http://www.tu-chemnitz.de/~zst/weihnachten/weihprogs.html
(English version in readme_EN.html)

Lizenz/ License

--- Deutsch ------------- 
Hinweise: siehe Datei COPYING

--- English -------------
    This program is a game with a partly randomized scenery
    Copyright (C) 2002   Stefan Ziegler
    This file is part of RandomXmas v1.14.

    RandomXmas v1.14 is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    RandomXmas v1.14 is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy (gpl.txt) of the GNU General Public
    License along with RandomXmas v1.14; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

While executing the program, you get the license text by pressing the key 'l'.
E-mail address: stefan.ziegler@s1998.tu-chemnitz.de
For additional and/or more actual information see file COPYING in the root
directory of this package.
-------------------------

Inhalt:

1. Anleitungen
1.1 Bedienung
1.2 Spielbeschreibung
1.3 Benutzung
1.4 Texturen
2. Programmierung
2.1 Geschichte des Programms
2.2 Geplante Verbesserungen
2.3 Klassen

1. Anleitungen

1.1 Bedienung:

In beiden Modi:
- Menue mit rechter Maustaste erreichbar, alle Tastaturfunktionen abgebildet.
- 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'.
- Durch Verschieben der Maus mit gedrueckter linker Maustaste im Fenster
  erreicht man auch Ansichtsveraenderungen entsprechend dem gewaehlten 
  Koordinatensystem im Menuepunkt "Drehen" oder "Verschieben" 
- Mit Taste 'l' wird die GPL angezeigt. Im Menue "Programm"->"Lizenz".
- Mit Taste 'h' wird diese Datei angezeigt, per Menue "Programm"->"Hilfe".  

Dateianzeige-Modus / Highscore:
- Scrollen mit 'Bild hoch' (Page Up) oder 'Bild herunter' (Page Down)
  oder mit Maus("Rollen" im Menue) mit gedrueckter linker Maustaste Maus
  hoch-/herunterziehen.
- Mit Cursortasten 'Links' bzw. 'Rechts' Zeilen nach links bzw. rechts 
  verschieben oder mit Maus (im "Rollen"-Modus des Menues) Maus mit gedrueckter
  linker Maustaste waagerecht ziehen.
- Ende des Modus mit 'Esc' bzw. "Beenden" im Menue.

Spiel-Modus:
- Spielfigur bewegen auch mit Maus: Taste links gedrueckt halten und Maus
  verschieben. Spielfigur bewegt sich dann in diese Richtung. Aufladen fuer
  Sprung mit mittlerer Maustaste. Je nach Programmgeschwindigkeit ist die
  Bewegung per Maus unterschiedlich sensibel, (einstellbar in "konstanten.h"). 
- Taste 'p' schaltet Punktanzeige an/aus, Menue: "Punktanzeige".
- 'Esc'-Taste beendet Spiel vorzeitig mit Punktzahl 0.
- Spielfigur bewegen Sie mit Cursortasten (oder Maus).
- Mit Taste 'Ende' aufladen fuer Sprung, ausgefuehrt mit Cursortasten.
- Umschalten auf Blick von Spielfigur/von aussen mit 'b'. ausgefuehrt nach
  einer Bewegung der Spielfigur. 
  Mit Maus: Im Menue "Mann"->"Blick" und dann in die Richtung mit Maus ziehen
  mit gedrueckter linker Maustaste.
- Weitere Spielfiguren mit 'n', Auswaehlen der Figur mit 's'. Es zaehlen die
  Punkte der Figur, die als letztes im Spiel benutzt wurde.
  Per Maus im Untermenue "Mann" auch mit "Neu" / "Naechster".
- Theoretisch auch mit Joystick (ab GLUT-API 4, nur mit Windows, 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'). 
Dann kommt die TopTen und darunter ihre Punktzahl (bei verlorenen -1, 
abgebrochenen Spielen 0) mit Datum, Uhrzeit und Namen (soweit angegeben).
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. spiel114.tar.gz in ein Verzeichnis kopieren, auspacken mit 
   'tar -xzvf spiel114.tar.gz'
2. Programm uebersetzen mit 'make spiel'
3. Bei fehlerfreier Uebersetzung ist eine Datei 'bin/spiel' angelegt worden.
4. Mit 'bin/spiel' starten sie das Programm
5. Mit 'bin/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 zurueckgeschrieben.
6. Mit 'bin/spiel highscore Name' oder 'bin/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:
Im Verzeichnis textures/
- "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

Die Namen bei Konstante SUMMER=1 beginnen mit "sum_".

Mitgeliefert wurden folgende 10 Bilder (erstellt mit 'xfig' und 'xv'):
  Dateiname		  empfohlene Nutzung (per Link/Kopieren)
- "baum.bmp"		  Baum-Textur fuer Baum
- "beton.bmp"		  Beton-Textur fuer Huegel/Ebene
- "colorgrid.bmp"	  Farbiges Gitter, zum Testen auf runden Oberflaechen
- "eis.bmp"		  Eis-Textur fuer Huegel/Ebene
- "erde.bmp"		  Erd-Textur fuer Huegel/Ebene
- "gesicht.bmp"		  Gesicht fuer Kopf der Spielfigur
- "holz.bmp"		  Holz-Textur fuer Baum/Huegel/Ebene
- "sand.bmp"		  Sand-Textur fuer Huegel/Ebene
- "schnee.bmp"		  Schnee-Textur fuer Huegel/Ebene
- "stein.bmp"		  Stein-Textur fuer Huegel/Ebene

Zum Testen, ob das Bild im Programm ladbar ist, kann man "testtexturen"
verwenden (make testtexturen). Starten mit "bin/testtexturen "
Das geladene Bild kann man dann genauso drehen und verschieben wie die Ebene
oder das Highscorefile im Spiel (nur mit Tastatur).
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 Geschichte des Programms

siehe Datei history.txt

2.2 Geplante Verbesserungen

- Klasse main ?
- Konfigurationsfile statt "konstanten.h",
- autoconf - Uebersetzung,
- 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, Texture und Feldpunkte.
Feldpunkte:	Punkte eines Spielfeldes, Weitergabe dieser an Geschenke ueber
(geschenke.h)	Mann, nutzt Grafikausgabe, abgeleitet von Punkte.
Fileviewer:	Zur Anzeige von Textdateien im Zeilenmodus, nutzt Grafikausgabe,
(highsboard.h)  Doublelist und Objpointerlist, Vater von Highscoreboard.

Geschenke: 	Punkte eines Spielers, Darstellung dieser, nutzt Grafikausgabe
(geschenke.h)	mithilfe der Vaterklasse Punkte.		
Grafikausgabe:	Darstellung/Aufbewahrung von Zahlen, char[]-Zeichenketten
(grafikausg.h)  mit eigener oder GLUT-Schrift, Berechnungen mit Zahleninhalt
		moeglich	
	
Highscoreboard: Darstellung der Highscore-Datei, Einlesen und Schreiben dieser, 
(highsboard.h)	nutzt Doublelist, Objpointerlist und Grafikausgabe mit Hilfe der
		Vaterklasse Fileviewer.

Simplelist:     Grundklasse der Listen, einfach verkettet, fuer Zahlen
(listen.h)	
Objpointerlist:	Listenklasse fuer beliebige Typen, bewahrt Zeiger dieser auf, 
(listen.h)	abgeleitet von Simplelist, Template. 
Doublelist: 	Doppeltverkettete Liste fuer Listenhierarchie (nimmt Listen 
(listen.h)	auf), abgeleitet von Simplelist.
 
Mann: 		Darstellung, Verwaltung eines Spielers, nutzt Geschenke, 
(mann.h)	Spielraum und Texture
Punkte:		Grundklasse fuer Geschenke und Feldpunkte, nutzt Grafikausgabe.
(geschenke.h)
Spielraum: 	Aufnahme aller noetigen Variablen eines Spiels, ohne Spieler, 
(spielraum.h)  	Nutzung von Ebene, Texture. Verwaltung und Weitergabe der
		Werte an nutzende Klassen/Programme.
Texture:	Laden einer Textur aus BMP-Datei, Darstellung/Nutzen dieser.
(texture.h)

Haupt-Programm: nutzt Spielraum, Mann, Highscoreboard, Fileviewer.  
(spiel.cpp)	Zusammenspiel aller wichtigen Klassen geregelt, 
		GL-Grundfunktionen, Bedienung Tastatur/Maus/Menue.