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_zst@gmx.de Webseite: http://www.stefanziegler-online.de/weihnachten/weihprogs.html Lizenz/License /* RandomXmas v1.12 zu Weihnachten 2001 * Frei kopierbar, aber nur vollständig mit diesem Spiel.cpp, Makefile, * readme.txt und tex*.bmp. Veränderungen möglich, 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 " 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.