small referee patch to place ball correctly and passing done
[fp1415-soccerfun.git] / src / StdTeam / Team_Student_Slalom_Assignment.icl
old mode 100755 (executable)
new mode 100644 (file)
index 94bf10c..a62f4a5
@@ -1,3 +1,4 @@
+\r
 implementation module Team_Student_Slalom_Assignment\r
 \r
 /**    Implement a solution to the slalom assignment.\r
@@ -23,14 +24,20 @@ base_TeamName_Student_Slalom :: String
 base_TeamName_Student_Slalom   = "Student Slalom"\r
 \r
 mind :: !FootballField !Home !(!BrainInput, !Void) -> (!BrainOutput, !Void)\r
-mind field home (x=:{me,others}, mm) = (fix {px=pp2 cp.px (m 2.5), py=up cp.py (m 3.5)} (m 1.0)) (x, mm)\r
+mind field home (x=:{me,others}, mm)\r
+| dist (getBall x).ballPos me.pos < (maxKickReach me) = (kick {px=sig (scale 0.5 field.flength), py=m 0.0}) (x, mm)\r
+| otherwise = (fix  {px=pp2 cp.px (m 2.5), py=up cp.py (m 3.5)} (maxKickReach me)) (x, mm)\r
        where\r
-               (comparator, pp1, pp2, targetsig) = if (home == West) ((<), (-), (+), (\w.w)) ((>), (+), (-), (~))\r
-               sf = sortBy (\x y.comparator x.pos.px y.pos.px) others\r
-               (cp, up) = closestPos (zip2 [1..] sf) (pp1 me.pos.px xWidthFootballer) {px=targetsig (scale 0.5 field.flength), py=(m 0.0)} comparator\r
+               (comparator, pp1, pp2, sig) = if (home == West) ((<), (-), (+), (\w.w)) ((>), (+), (-), (~))\r
+               sf2 = sortBy (\x y.comparator x.pos.px y.pos.px) others\r
+               sf = sf2 % (0, (length sf2) - 2)\r
+               (cp, up) = closestPos (zip2 [1..] sf) (pp1 me.pos.px xWidthFootballer) (getBall x).ballPos.pxy comparator\r
                \r
 closestPos :: [(Int, Footballer)] Metre Position (Metre Metre -> Bool) -> (Position, (Metre Metre -> Metre))\r
-closestPos [] _ d _ = (d, (+))\r
+closestPos [] _ d _ = (d, (\x y.x))\r
 closestPos [(i, x):xs] p d c\r
 | c p x.pos.px = (x.pos, if (i rem 2 == 0) (+) (-))\r
 | otherwise = closestPos xs p d c\r
+\r
+\r
+\r