initial framework added
[fp1415-soccerfun.git] / src / Game / Referee.icl
diff --git a/src/Game/Referee.icl b/src/Game/Referee.icl
new file mode 100644 (file)
index 0000000..2f88d83
--- /dev/null
@@ -0,0 +1,82 @@
+implementation module Referee
+
+import StdEnvExt
+import matchGame
+import Umpire
+//     When coding for all referees, include following modules:
+import RefereeCoach_Rounds_Assignment
+import RefereeCoach_Slalom_Assignment
+import RefereeCoach_Passing_Assignment
+import RefereeCoach_DeepPass_Assignment
+import RefereeCoach_Keeper_Assignment
+
+allAvailableReferees   :: [FootballField -> Referee]
+allAvailableReferees   = [ umpire ]
+//     When coding for all referees, use following list:
+                                                       ++
+                                                 [ RefereeCoach_Rounds
+                                                 , RefereeCoach_Slalom
+                                                 , RefereeCoach_Passing
+                                                 , RefereeCoach_DeepPass
+                                                 , RefereeCoach_Keeper
+                                                 ]
+
+instance nameOf Referee where nameOf {Referee | name} = name
+
+defaultReferee                 :: Referee
+defaultReferee                 = { name                        = "Default"
+                                                 , brain                       = {memory = Void,ai = \(_,st) -> ([ContinueGame],st)}
+                                                 , refActionPics       = []
+                                                 }
+
+defaultImage                   :: !Match !RefereeAction !*env -> (!Bitmap,!*env)       | FileSystem env
+defaultImage match action env
+# bitmapf                              = case action of
+                                                       (ReprimandPlayer  _ r)  = "ivanov_" +++ reprimandf r +++ ".bmp"
+                                                       (Hands            _)    = "hands.bmp"
+                                                       (OwnBallIllegally _)    = "ivanov_badluck.bmp"
+                                                       (TellMessage      _)    = "ivanov_look.bmp"
+                                                       (DirectFreeKick   _ p)  = ivanovf (p.px < zero)
+                                                       (GoalKick         h)    = ivanovf (h == West)
+                                                       (Corner           h _)  = ivanovf (h == West)
+                                                       (ThrowIn          h _)  = ivanovf (h == West)
+                                                       (Penalty          h)    = ivanovf (h == West)
+                                                       (Advantage        _)    = "ivanov_badluck.bmp"
+                                                       _                                               = "ivanov_fluit.bmp"
+= case openBitmap ("afbeeldingen\\" +++ bitmapf) env of
+       (Just bm,env)           = (bm,env)
+       nothing                         = abort "defaultImage: unable to load default picture.\n"
+where
+       reprimandf r            = case r of
+                                                       Warning    = "warning"
+                                                       YellowCard = "yellow"
+                                                       RedCard    = "red"
+       ivanovf left            = "ivanov_wijst_" +++ if left "links" "rechts" +++ ".bmp"
+
+defaultSoundFile               :: !RefereeAction -> Maybe String
+defaultSoundFile action        = if (soundfilename == "") Nothing (Just ("sound\\"+++soundfilename))
+where
+       soundfilename           = defaultSoundFileName action
+       
+       defaultSoundFileName (Hands _)                                  = "stopBecauseOfFoul.wav"
+       defaultSoundFileName (TackleDetected _)                 = "tackles_ed.wav"
+       defaultSoundFileName (DangerousPlay _)                  = "tackles_ed.wav"
+       defaultSoundFileName GameOver                                   = "endGameOrHalf.wav"
+       defaultSoundFileName (GameCancelled _)                  = "endGameOrHalf.wav"
+       defaultSoundFileName EndHalf                                    = "endGameOrHalf.wav"
+       defaultSoundFileName (Offside _)                                = "offside.wav"
+       defaultSoundFileName (GoalKick _)                               = "ballOut.wav"
+       defaultSoundFileName (Corner _ _)                               = "ballOut.wav"
+       defaultSoundFileName (ThrowIn _ _)                              = "ballOut.wav"
+       defaultSoundFileName (Goal _)                                   = "CenterKick.wav"
+       defaultSoundFileName (OwnBallIllegally _)               = "wrongPosition2restartFrom.wav"
+       defaultSoundFileName _                                                  = ""
+
+randomlessRefereeAI            :: (RefereeAI msg memory) -> RefereeAI msg (memory,RandomSeed)
+randomlessRefereeAI f  = \(input,(memory,seed))        = let (decisions,memory`) = f (input,memory) in (decisions,(memory`,seed))
+
+amnesiaRefereeAI               :: (RefereeAI msg RandomSeed) -> RefereeAI msg (memory,RandomSeed)
+amnesiaRefereeAI f             = \(input,(memory,seed))        = let (decisions,seed`) = f (input,seed) in (decisions,(memory,seed`))
+
+witlessRefereeAI               :: (RefereeAI` msg) -> RefereeAI msg (memory,RandomSeed)
+witlessRefereeAI f             = \(input,state)                        = (f input,state)