This isn't specifically about this implementation, but I've noticed perhaps almost ten similar projects (virtual, programmed PCROBOTS descendants) on HN over the past year. There seems to be a real interest in this area (I made one myself on a hack day a few years ago ;-)) but a lot of reinventing the wheel.
Are there are any particularly popular open source projects of this sort that people interested in this area could perhaps collaborate around?
(Reads a bit like the Old Testament; all that begetting.)
One problem is that almost all of them are language-specific. Robot Battle implemented its own language, RoboCode uses Java, this game is in Python.
One game in the genre is RealTimeBattle, which instead allows bots to communicate with the game simulator via standard IPC. So, in theory, robot programs can be written in a variety of languages.
> "One problem is that almost all of them are language-specific."
Shameless plug: I built a platform [0] like this - but language-agnostic - for use during hackathons at the local TU's department of CS / software engineering. By language-agnostic I mean both bots and engines can be written in any programming language one prefers, as long as that language can encode/decode JSON. Three game engines are ready, one more (called Trapdoor Reversi) is in the planning stages. I've already gotten enthusiastic feedback from a group of sophomores at a recent hackathon.
If anyone finds it interesting, please star the repo.
Hi! i actually built one too. But it was for a rather specific Competition at my university. the json idea is pretty cool. I built one in Java that ran the bot code as a process and used i/o redirection to talk to it. So the system had a client side program that would talk to the bot and a server side program that would arrange matches and maintain leaderboards etx
The ideal language-agnostic "robot wars" engine would prob involve just passing structured text messages over a socket via TCP. Then the robot's logic can be written in anything, as long as it could do sockets (which almost every language/stdlib/runtime/OS you care about can do already), and, could be running remotely or locally.
Yeah, but it doesn't really seem to fit this particular format, in that this one is sort of an "idempotent" method where you submit your code and the results are calculated deterministically by the server. The other way would require something to be compiled and run on the clients' individual machines. It'd be nice to not have to install any libraries or worry about connecting to a server at the "right" time.
Every year the UofI ACM puts on an AI programming game competition. I've competed and worked on the 2012 game, its a lot of fun. If you're a student or corp in the midwest, take a trip down in October. And the game is usually language agnostic.
Did I mention there's also a whole conference with a bunch of tech talks, student parties, etc?
I saw AI Challenge earlier! It looks really fun. I might steal one of their ideas and of put five or so teams of robots in a bigger map and see what happens.
This is how we should teach kids programming; the goal is simple, the API is simple and they can play against their friends... This has got me thinking...
Heh this reminds me of a game I wrote a while back, also python: https://github.com/phreeza/cells In fact I would guess the API is perhaps inspired by the cells API.
Writing a web frontend is something I have been wanting to do for this a long time, nice to see someone implement that!
It seems a large part of the previous discussion surrounded sandboxing Python; anyone know where the author is with that? I find it hard to believe it would be very hard if you just embed the players game in a C++ engine.
Well, it turns out you can't sandbox Python at the language level. So now each user's code is run (a) in a separate process (b) in a chroot jail (c) as user nobody (d) with umask set to 0 (e) with a time limit of 300ms.
Have you experimented with using linux's cgroups for real security? (e.g. you can white/black-list specific syscalls, set time & memory limits etc, all at the kernel level)
And this one is ok, http://berlin-ai.com/ - you just provide the URL of your AI and they POST game states to you, and you have 5 seconds to reply with your orders.
I always get a maximum recursion depth exceeded exception in game.py using the rgkit. The exceptions aren't very helpful and only point to problems in the runner, not the bot. I'm not even sure what is triggering it. The only rg method I'm using is locs_around.
Seems to happen whenever I use locs_around. I think I'll replace that method with my own. Half my robots are guarding because this function is hitting recursion limits every god damn time.
Why python? The API could have been a simple textual one (or maybe JSON, or whatever) and piped to/from the robot programs. That way, robots could be written in whatever language the authors like. It would also help sandbox the robots from the game server.
My guess is one of the project's goals it to reach programming. If that is the case, Python is a great language.
If the goal was simply to make fighting robots, something more agnostic would be cool. That said, the system enforces a 300ms response time per robot, so compiled languages would have a big advantage.
This would be better if there were more in-depth docs. I want to know if my a bot is on my team? But how? Let's check the docs..oh wait..they're incomplete.
Anybody aware of a similar game to ~teach~ python? I remember seeing a thread that used a war game to teach java, was hoping there's one for python too
cheers
Are there are any particularly popular open source projects of this sort that people interested in this area could perhaps collaborate around?