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