initial framework added
[fp1415-soccerfun.git] / src / Game / Referee.icl
1 implementation module Referee
2
3 import StdEnvExt
4 import matchGame
5 import Umpire
6 // When coding for all referees, include following modules:
7 import RefereeCoach_Rounds_Assignment
8 import RefereeCoach_Slalom_Assignment
9 import RefereeCoach_Passing_Assignment
10 import RefereeCoach_DeepPass_Assignment
11 import RefereeCoach_Keeper_Assignment
12
13 allAvailableReferees :: [FootballField -> Referee]
14 allAvailableReferees = [ umpire ]
15 // When coding for all referees, use following list:
16 ++
17 [ RefereeCoach_Rounds
18 , RefereeCoach_Slalom
19 , RefereeCoach_Passing
20 , RefereeCoach_DeepPass
21 , RefereeCoach_Keeper
22 ]
23
24 instance nameOf Referee where nameOf {Referee | name} = name
25
26 defaultReferee :: Referee
27 defaultReferee = { name = "Default"
28 , brain = {memory = Void,ai = \(_,st) -> ([ContinueGame],st)}
29 , refActionPics = []
30 }
31
32 defaultImage :: !Match !RefereeAction !*env -> (!Bitmap,!*env) | FileSystem env
33 defaultImage match action env
34 # bitmapf = case action of
35 (ReprimandPlayer _ r) = "ivanov_" +++ reprimandf r +++ ".bmp"
36 (Hands _) = "hands.bmp"
37 (OwnBallIllegally _) = "ivanov_badluck.bmp"
38 (TellMessage _) = "ivanov_look.bmp"
39 (DirectFreeKick _ p) = ivanovf (p.px < zero)
40 (GoalKick h) = ivanovf (h == West)
41 (Corner h _) = ivanovf (h == West)
42 (ThrowIn h _) = ivanovf (h == West)
43 (Penalty h) = ivanovf (h == West)
44 (Advantage _) = "ivanov_badluck.bmp"
45 _ = "ivanov_fluit.bmp"
46 = case openBitmap ("afbeeldingen\\" +++ bitmapf) env of
47 (Just bm,env) = (bm,env)
48 nothing = abort "defaultImage: unable to load default picture.\n"
49 where
50 reprimandf r = case r of
51 Warning = "warning"
52 YellowCard = "yellow"
53 RedCard = "red"
54 ivanovf left = "ivanov_wijst_" +++ if left "links" "rechts" +++ ".bmp"
55
56 defaultSoundFile :: !RefereeAction -> Maybe String
57 defaultSoundFile action = if (soundfilename == "") Nothing (Just ("sound\\"+++soundfilename))
58 where
59 soundfilename = defaultSoundFileName action
60
61 defaultSoundFileName (Hands _) = "stopBecauseOfFoul.wav"
62 defaultSoundFileName (TackleDetected _) = "tackles_ed.wav"
63 defaultSoundFileName (DangerousPlay _) = "tackles_ed.wav"
64 defaultSoundFileName GameOver = "endGameOrHalf.wav"
65 defaultSoundFileName (GameCancelled _) = "endGameOrHalf.wav"
66 defaultSoundFileName EndHalf = "endGameOrHalf.wav"
67 defaultSoundFileName (Offside _) = "offside.wav"
68 defaultSoundFileName (GoalKick _) = "ballOut.wav"
69 defaultSoundFileName (Corner _ _) = "ballOut.wav"
70 defaultSoundFileName (ThrowIn _ _) = "ballOut.wav"
71 defaultSoundFileName (Goal _) = "CenterKick.wav"
72 defaultSoundFileName (OwnBallIllegally _) = "wrongPosition2restartFrom.wav"
73 defaultSoundFileName _ = ""
74
75 randomlessRefereeAI :: (RefereeAI msg memory) -> RefereeAI msg (memory,RandomSeed)
76 randomlessRefereeAI f = \(input,(memory,seed)) = let (decisions,memory`) = f (input,memory) in (decisions,(memory`,seed))
77
78 amnesiaRefereeAI :: (RefereeAI msg RandomSeed) -> RefereeAI msg (memory,RandomSeed)
79 amnesiaRefereeAI f = \(input,(memory,seed)) = let (decisions,seed`) = f (input,seed) in (decisions,(memory,seed`))
80
81 witlessRefereeAI :: (RefereeAI` msg) -> RefereeAI msg (memory,RandomSeed)
82 witlessRefereeAI f = \(input,state) = (f input,state)