- Updated Friday, September 30th 2016 @ 07:56:32
I've made an unofficial Ultimate TicTacToe engine which can be used for local testing:
It may not exactly match the reference implementation in some ways (an illegal move is treated as a 'pass', for example) but the IO format is mostly the same. It sends an extra "player_seed n" line in the setup, which can be used to initialize the PRNG in your bot for more repeatable results.
Also, I have set up a server which allows you to run games in real time against other contestants via TCP:
The bot runs on your own machine, only the moves are sent via the network. Beware that the passwords are sent in plaintext, so choose a disposable password and save it in the script you use to run bots. Timekeeping here is not done properly, so if you want proper timekeeping your bot will have to do it internally.
You are encouraged to run as many bots as you like in parallel there (with different usernames), and do whatever automated scraping you want from the tables.
If you discover any bugs, please let me know by opening an issue in the relevant github project. The code for the TCP server is here:
- Created Wednesday, March 30th 2016 @ 09:52:58
Thank you for sharing it!
- Created Saturday, April 16th 2016 @ 00:19:46
That is very cool!
I gave it a try and my bot is receiving id 0 with the command "settings your_botid 0". As far as I can tell, the bot ID can only be 1 or 2. That makes my bot very confused.
- Created Saturday, April 16th 2016 @ 20:29:09
Thanks for letting me know, I'll post back when I've updated it.
- Created Sunday, April 17th 2016 @ 06:32:00
This has now been fixed, it should now only ever send '1' or '2' for "settings your_botid".
- Updated Tuesday, May 17th 2016 @ 19:31:57
Just watched my engine Ultraviolet43 play a game against test3 and my engine thought it has won, but got asked to play again, whereupon it passed. Looking at the game Replay 146421 sure enough it won the game, but test3 played another move! Not sure if the bug is in test3 or in the server.
- Created Saturday, May 21st 2016 @ 19:43:47
The following lines doesn't make sense as a setting, I guess thats a (harmless) bug?
settings move 0 settings round 0
- Created Sunday, May 22nd 2016 @ 04:50:48
Yes, the extra move in that game is definitely a bug. I'll look into it, though there will be a bit of a delay.
The "settings move/round 0" lines are indeed rubbish, I'll see if I can get rid of them.
I'm also planning to display the player names in the replay.
I'll post back when changes have been made, but it might take a bit of time. Thanks for calling these to attention!
- Created Saturday, June 4th 2016 @ 08:38:06
A couple of updates:
- The extra settings move/round lines have been removed.
- Player names are now visible in the replay.
I still haven't worked out why there was an extra move in that game. I'll post back if I find a solution.
- Created Monday, July 4th 2016 @ 18:41:07
For some reason my bot right when it's about to win gets a bunch of null moves and the other bot get;s like 10 free turns and wins. my bot is lolzers. if you could check that out i would be greatful because i have no idea what's going on?
- Updated Tuesday, July 5th 2016 @ 17:23:44
I had a look at some games and I can see what you mean. It looks like the engine is not understanding the input from your bot on those turns for some reason. If that's true, It treats the 'invalid' data as a pass, and gives the opponent another turn. Unfortunately the replay data doesn't contain the IO stream, so I can't see what's going wrong (and it could be something else, I'm just speculating).
If you log the IO stream to a file, it will probably reveal the problem. If it isn't clear, feel free to paste the file somewhere and post the link and I'll see if I can work it out.
Thanks for trying out the system!
- Created Wednesday, July 13th 2016 @ 23:19:19
Hi, never used python in my life and was wondering if this could be used on a windows platform since I'm having a little trouble.
- Created Friday, July 15th 2016 @ 05:27:40
I believe it does work on Windows, though I don't have any installs to test on. I can't remember if it requires Python 2 or Python 3 - that may be the source of the trouble.
If you'd like to post the error message I'll see if I can help.
- Updated Saturday, July 16th 2016 @ 13:13:51
Yes, it runs fine on Windows.
For running it using python 2.7 I added the following line after the shebang line (#!) at the top:
from __future__ import print_functionand changed the following line from:
print( USAGE )
- Created Tuesday, July 19th 2016 @ 18:38:29
Thanks, that's good to know.