Von Tom Wehnert & Konstantin Preißer
Ein-/Zweispielermodus Künstliche Intelligenz Internet-Highscoreliste 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 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=10 gibt 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> AnacondaTomWehnertKonstantinPreisserReplayDatei7cc1d94f97f3e185350b8f137c33f86c 22F38,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