Hi,

I've had a go at making a robot battle game in Haskell (a robocode clone), I was using Yampa for both the robots and the game logic - however using Yampa for the game logic presented a number of problems, mostly in ensuring every single piece of data "emitted" from the game logic portion was evaluated.

I had a fair amount of work done, and it was shaping up nicely, but it needed simplification, trying to add in too many extras such as physical simulation of collisions etc. turned it into a bit of a monster when the core design needed some work!

http://saulzar.orcon.net.nz/robots2.jpg

I'd definitely like to give it another go, this time without Yampa for game logic - though it seems fantastic for the user robot code, perhaps it needn't be compulsory - interested users could always use Yampa if they desired.



Oliver Batchelor


On 7/16/07, apfelmus < apfelmus@quantentunnel.de> wrote:
Hugh Perkins wrote:
> Had an idea: a real shootout game for Haskell.
>
> scripts "fight" in an arena for a second or so, and the results are
> published to the website

Sounds great :)

There are lots of "robot battle" games out there, like

   http://realtimebattle.sourceforge.net/
  http://robocode.sourceforge.net

but none in Haskell, of course. I think there's a classic predecessor to
those but I don't know exactly.

> Each turn is represented by a function something like:
>
> doturn :: String -> [[GridValue]] -> (Action,String)

The explicit state can be dispensed with by introducing a stream type

  data Robot = Robot (BattleField -> (Action, Robot)

  type BattleField = [[GridValue]]

This way, the program is entirely free in how to choose its state
representation. You can turn any  doturn - based program into a
stream-based one

  toRobot :: String -> (BattleField -> String -> (Action,String))
            -> Robot
  toRobot s doturn = Robot $ \arena ->
     let (action, s') = doturn bf s in (action, toRobot s' doturn)

The drawback is that it's no longer possible to save a snapshot of each
program's state to disk and resume the fight later.

Regards,
apfelmus

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe