Turn-based game - experimental economics

Terry Reedy tjreedy at udel.edu
Sat Sep 5 11:13:59 EDT 2009


Paolo Crosetto wrote:
> Dear all,
> 
> I am writing an application in Python for an experiment in Experimental 
> Economics.
> 
> For those who do not know what this is: experimental economics uses 
> controlled, computerised lab experiments with real subjects, putting the 
> subject in a game mimicking the situation of interest and collecting 
> behavioural data about choices made.
> 
> Hence, experiments involve the use of a multi-client architecture with one 
> server, and are sort of online games, with actions taken by clients and 
> computation, data collection, etc... handled by servers.
> 
> I chose to use Python because I needed something flexible, powerful and easy - 
> I am a beginner programmer.
> 
> My game is a sort of scrabble, with palyers buying letters and producing words 
> or extending existing words. I use a pipe to ispell -a for spellcheck, XMLRPC 
> for the server-client infrastructure, and have developed all the rules of the 
> game as server functions, called by a client. States of players and of words 
> created are stored in instances of two basic classes, Player and Word, on the 
> server side.
> 
> The problem I now face is to organise turns. Players, as in Scrabble, will 
> play in turns. So far I have developed the server and ONE client, and cannot 
> get my head round to - nor find many examples of - how to simply develop a 
> turn-based interaction.
> I basically need the server to freeze in writing all the clients while client 
> i is playing, then when i is over passing the turn to i+1; clients are still 
> accessible by the server at any time (the payoff of a player changes even as 
> she is not playing, by royalties collected from other players extending her 
> words).
> 
> In another thread (about a battleship game) I found two possible leads to a 
> solution:
> 1. using 'select'.
> 2. using threads.
> 
> But in both cases I could not find any clear documentation on how to do this. 
> The 'select' road was said to be the easiest, but I found no further hints.
> 
> Does anyone have any hints?

As I understand your description, the server and each client will be a 
separate process on a separate machine (once deployed), so threads do 
not seem applicable. (For development, you can use separate processes on 
one machine communicating through sockets just as if they were on 
multiple machines.) As I understand select, it is for select *any* 
available client input, not just one in particular. I believe the 
standard solution is to define a 'turn token' and write the clients so 
that they only do 'turn' activities when and only when they have that 
token. I presume you do not need to worry about players trying to cheat 
by rewriting the client.

tjr




More information about the Python-list mailing list