<html>
<body>
<font size=3>Is this some sort of a war game?<br>
At 11:14 16/07/2007, you wrote:<br>
<blockquote type=cite class=cite cite="">This would be a lot of fun! Make
sure to take the lessons from<br>
<a href="http://haskell.org/haskellwiki/Safely_running_untrusted_Haskell_code" eudora="autourl">
http://haskell.org/haskellwiki/Safely_running_untrusted_Haskell_code</a>
<br>
into account.<br><br>
regards,<br><br>
Bas van Dijk<br><br>
On 7/15/07, Hugh Perkins &lt;hughperkins@gmail.com&gt; wrote:<br>
<blockquote type=cite class=cite cite="">Had an idea: a real shootout
game for Haskell.<br><br>
The way it would work is:<br>
- you email a haskell program to a specific address<br>
- it shows up on a web-page<br><br>
The webpage shows the last submitted solution for each person<br>
- anyone can select two solutions and click &quot;Fight&quot;<br>
-&gt; the scripts &quot;fight&quot; in an arena for a second or so, and
the results are<br>
published to the website<br><br>
The arena itself comprises:<br>
- a 2d grid, of a certain size (or maybe variable size)<br>
- each grid cell can be a wall, or one of the opponents<br>
- the boundaries of the grid are walls<br>
- random blocks of wall are placed around the grid<br><br>
The opponents only perceive what is in a section of space to their front,
in<br>
a 45 degree arc from either side of the direction they are facing<br>
- each player can face along one of the four grid axes<br><br>
Each player takes it in turns to move<br>
- at each move the player can:<br>
&nbsp;&nbsp; - move one square<br>
&nbsp;&nbsp; - turn 90 degrees, in either direction<br>
&nbsp;&nbsp; - fire<br><br>
Firing will score one point if the opponent is in the line of fire at
that<br>
time, and there are no intervening walls.<br><br>
Opponents can see the direction the other opponent is facing, as long as
the<br>
other opponent is in their view arc, and there are no intervening
walls.<br><br>
Each turn is represented by a function something like:<br><br>
doturn :: String -&gt; [[GridValue]] -&gt; (Action,String)<br><br>
-- [[GridValue]] is a map of what Me sees this turn, or has seen
previously<br>
-- the Strings are a way for the function to pass state to itself
between<br>
moves<br><br>
data GridValue = Opponent | Me | Wall | Empty<br>
data Action = Fire | MoveNorth | MoveSouth |MoveEast | MoveWest |
TurnLeft |<br>
TurnRight | Wait&nbsp;&nbsp;&nbsp; -- (players can move backwards and
sideways)<br><br>
The turn would be run as a separate thread, which either terminates<br>
successfully, or is aborted after a fixed time x milliseconds (maybe
10<br>
milliseconds?)<br><br>
The String that doturn produces at the end of a turn is passed back in
at<br>
the beginning of the next turn (so one could use gread/gshow to<br>
serialize/deserialize arbitrary data types, and there is no limitation
on<br>
what data can be stored in the state).<br><br>
After say 1000 turns, the results are the points of each script. (or
we<br>
could give each script a number of &quot;lives&quot; and if its loses
them all the<br>
other script wins outright)<br><br>
<br>
This can run on a hosted webserver probably, because each match is part
of a<br>
webpage request, and lasts a maximum of about a second, so shouldnt
be<br>
terminated prematurely by cpu-monitoring scripts.<br><br>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
Haskell-Cafe@haskell.org<br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" eudora="autourl">
http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br><br>
</blockquote>_______________________________________________<br>
Haskell-Cafe mailing list<br>
Haskell-Cafe@haskell.org<br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" eudora="autourl">
http://www.haskell.org/mailman/listinfo/haskell-cafe</a></font>
</blockquote></body>
</html>