190 likes | 407 Views
Von Tom Wehnert & Konstantin Preißer. Features: 4 Schwierigkeitsgrade Ein-/Zweispielermodus Künstliche Intelligenz Internet- Highscoreliste Replay-Funktion Musik über MIDI-Schnittstelle (noch in Arbeit). Von Tom Wehnert & Konstantin Preißer. Spielfeld.
E N D
Features: • 4 Schwierigkeitsgrade • Ein-/Zweispielermodus • Künstliche Intelligenz • Internet-Highscoreliste • Replay-Funktion • Musik über MIDI-Schnittstelle (noch in Arbeit) Von Tom Wehnert & Konstantin Preißer
Spielfeld • Unterteilung in 40x30 Quadrate • Richtungsänderung mit linker und rechter Pfeiltaste • Speicherung der Schlangenposition in 2-dim. Feld • Je nach gewähltem Schwierigkeitsgrad Intervall von 400 ms, 200 ms, 100 ms oder 60 ms 0 1 2 3 4 5 x 0 1 2 3 y 4 3 2 1 feld[3][2] = 2
Künstliche Intelligenz • KI über Backtracking-Algorithmus (Tiefensuche) (x/y) Links Rechts Oben Unten (x-1/y) (x+1/y) (x/y-1) (x/y+1)
Künstliche Intelligenz • KI über Backtracking-Algorithmus (Tiefensuche) (x/y) Links (x/y)
Künstliche Intelligenz • KI über Backtracking-Algorithmus (Tiefensuche) (x/y) Links (x/y) (x-1/y) Links
Künstliche Intelligenz • KI über Backtracking-Algorithmus (Tiefensuche) (x/y) Links (x/y) (x-1/y) Links (x-2/y)
Künstliche Intelligenz • KI über Backtracking-Algorithmus (Tiefensuche) (x/y) Links (x/y) (x-1/y) Links Rechts (x-2/y)
Künstliche Intelligenz • KI über Backtracking-Algorithmus (Tiefensuche) (x/y) Links (x/y) (x-1/y) Links Rechts (x-2/y) (x/y)
Künstliche Intelligenz • KI über Backtracking-Algorithmus (Tiefensuche) (x/y) Links (x/y) (x-1/y) Links Oben Rechts (x-2/y) (x/y)
Künstliche Intelligenz • KI über Backtracking-Algorithmus (Tiefensuche) (x/y) Links (x/y) (x-1/y) Links Oben Rechts (x-2/y) (x-1/y-1) (x/y) Links
Künstliche Intelligenz • KI über Backtracking-Algorithmus (Tiefensuche) (x/y) Links (x/y) (x-1/y) Links Oben Rechts (x-2/y) (x-1/y-1) (x/y) Links (x-2/y-1) Links
Künstliche Intelligenz • KI über Backtracking-Algorithmus (Tiefensuche) (x/y) Links (x/y) (x-1/y) Links Oben Rechts (x-2/y) (x-1/y-1) (x/y) Links (x-2/y-1) Links (x-3/y-1) Links usw.
Künstliche Intelligenz • KI über Backtracking-Algorithmus (Tiefensuche) • Jedoch: Exponentielle Laufzeit O(4x·y) bei immer gleicher Reihenfolge der Pfade (Links – Rechts – Oben – Unten) • Deshalb: Pfade werden in Reihenfolge durchlaufen, die am ehesten zum „Futter“ führt • Bei zunehmender Schlangenlänge (ca. 150) kann KI nicht immer schnell einen Weg finden; Programm würde „hängenbleiben“. Deshalb: Multithreading • KI-Thread bekommt Zeit für Wegsuche bis zum nächsten Spieltakt. Wenn bis dahin kein Weg gefunden wurde, wird Wegsuche abgebrochen und mit aktueller Richtung fortgefahren, danach wird Wegsuche erneut gestartet
Internet-Highscoreliste • Programm verbindet sich über HTTP zu IIS-Webserver, auf dem eine ASP-Datei (mit VBScript bzw. JavaScript) mit einer Access-Datenbank interagiert • ASP-Script kommuniziert mit Datenbank und schreibt Daten im Textformat in die Ausgabe bzw. erstellt neuen Eintrag • Programm liest die Ausgabe wie Textdatei • URL: http://preisser.dynalias.org/dere1/anaconda/highscore.asp?anz=10gibt die Top 10 der Highscore zeilenweise aus Internetverbindung, HTTP MS Access- Datenbank ASP-Seite Programm Webserver
Replay-Funktion • Aufzeichnung der Richtungsänderungen und Futterpositionen in Textdatei • Darstellung des Dateiformats in BNF (Backus-Naur-Form): <Datei> ::= <DateiKennzeichnung> <Prüfsumme> <Diffy> <AnzahlSpieler> <Food> [{<TaktContainer>}] <Diffy> ::= '1' | '2' | '3' | '4' <AnzahlSpieler> ::= '1' | '2' <TaktContainer> ::= '!' <Takt> <Takt> ::= [<R1>] [<R2>] [<Food>] <R1> ::= '1' <Richtung> <R2> ::= '2' <Richtung> <Richtung> ::= '1' | '2' | '3' | '4' <Food> ::= 'F' {<Ziffer>} ',' {<Ziffer>} '?' <Ziffer> ::= '0' ... '9' DateiKennzeichnung ::= 'AnacondaTomWehnertKonstantinPreisserReplayDatei' <Prüfsumme> ::= <Hex-Zahl> x 32 <Hex-Zahl> ::= '0' | .. | '9' | 'a' | ... | 'f'
Replay-Funktion • Aufzeichnung der Richtungsänderungen und Futterpositionen in Textdatei • Beispiel: <Prüfsumme> (MD5) <DateiKennzeichnung> AnacondaTomWehnertKonstantinPreisserReplayDatei7cc1d94f97f3e185350b8f137c33f86c22F38,2?!1323!!!!12!!!!!!!!!!!!22!23!22!23!1322F2,19?!24!11!21!!!!!!!!!!!!!!!! <R1><R2> <Food> … <Food> <TaktContainer> (kann Elemente <R1>, <R2>, <Food> enthalten) <AnzahlSpieler> <Diffy> (Schwierigkeit)
Musik über MIDI • MIDI: Musical Instrument Digital Interface • Beschreibt Standard zur dynamischen Erzeugung von Tönen • MIDI-Interface in Java integriert • MIDI: • Es werden nur die zu erzeugenden Töne gespeichert (Tonhöhe, Dauer, Instrument usw.); • Audiosignal wird zur Laufzeit von Synthesizer erzeugt • MIDI: 16 Kanäle (Channel), jeder davon kann eines von 127 Instrumenten spielen • Vorteil: Geringe Dateigröße, dynamische Änderungen (Tempo, Tonhöhe usw.) • Nachteil: Je nach Synthesizer unterschiedlicher Klang; keine Wiedergabe von Geräuchen, Stimmen usw. möglich) • Sampled Audio (Wave, MP3, …): • Tonsignal wird abgetastet (z. B. 44,1 kHz) und Lautstärke wird gespeichert (Auflösung: 16 Bit) • Vorteil: Exakte Reproduktion des Audiosignals • Nachteil: Hohe Dateigröße