module Exercise_8wett where import Game import System.Random {-H8.4-} {- Relevanter Auszug aus Game.hs: type Position = (Int, Int) data Player = Red | Blue deriving (Eq, Ord, Show, Read) data Board = … Folgende Hilfsfunktionen könnten interessant sein: isValidPosition :: Position -> Bool neighbors :: Position -> [Position] isNeighborOf :: Position -> Position -> Bool playerAt :: Position -> Board -> Maybe Player isValidMove :: Position -> Board -> Bool Für mehr Hilfsfunktionen und detailliertere Dokumentation siehe -} {-WETT-} nextMove :: Player -> Board -> Position nextMove = undefined -- --------------------------------------------------------------------------------------------------------------------- -- Ignorieren Sie alles ab hier, falls Sie nicht am Wettbewerb teilnehmen möchten. -- --------------------------------------------------------------------------------------------------------------------- -- Wenn Sie das erweiterte Interface (mit Zufallsgenerator und Zustand) nutzen möchten, ersetzen Sie das "True" hier -- durch "False"... useSimpleStrategy :: Bool useSimpleStrategy = True -- ...und implementieren Sie hier Ihre Strategie. Sie dürfen aber auf KEINEN FALL die obige Definition von -- "nextMove" löschen. Setzen Sie in diesem Fall einfach "nextMove" auf "undefined", wie in der Schablone vorgegeben. -- Das System wählt anhand des Werts von "useSimpleStrategy" die Tests aus. -- Dies ist der Typ des Zustands, den Sie in Ihrer Strategie mitführen. Sie können ihn frei wählen. type MyState = Int -- Dies ist der Anfangszustand Ihrer Strategie, abhängig vom Zufallsgenerator g (siehe Dokumentation von System.Random) -- und dem Spieler, als der Sie spielen (Red oder Blue) myInitialState :: RandomGen g => g -> Player -> MyState myInitialState g pl = undefined -- Diese Funktion berechnet, welchen Zug Sie in einer bestimmten Spielsituation ausführen wollen. -- Sie erhalten wieder einen frischen Zufallszahlengenerator (g) und die Angabe, als welcher Spieler sie spielen (pl). -- Außerdem erhalten Sie den aktuellen Zustand Ihrer Strategie (s) und das aktuelle Spielbrett (board). -- -- Die Rückgabe Ihrer Funktion muss der auszuführende Zug sowie der neue Zustand Ihrer Strategie sein. myComputeMove :: RandomGen g => g -> MyState -> Player -> Board -> (Position, MyState) myComputeMove g s pl board = (undefined, undefined) -- Dies bitte NICHT verändern; gewertet werden myInitialState/myComputeMove strategy :: Strategy MyState strategy = Strategy myInitialState myComputeMove {-TTEW-}