# L-28 MCS 507 Wed 28 Oct 2011 : taketurns.py

# Two players taking turns.

from threading import *
import time
import random

class Player(Thread):
   """
   Player waits turn and makes move.
   """
   def __init__(self,t,v):
      """
      Initializes player with name t,
      and stores the shared value v.
      """
      Thread.__init__(self,name=t)
      print 'player ' + t + ' born'
      self.sv = v

   def run(self):
      """
      Player checks value every 5 time units.
      If parity matches, value is decreased.
      The game is over if value == 0.
      """
      p = self.getName()
      n = int(p)
      while True:
         while True:
            time.sleep(5)
            v = self.sv[0]
            print p + ' checks value %d ' % v
            if v <= 0 or v % 2 == n: break
         if v <= 0: break # game over
         r = random.randint(1,10)
         s = p + ' thinks %d' % r
         print s + ' time units'
         time.sleep(r)
         v = self.sv.pop(0) - 1
         print p + ' changes value to %d ' % v
         self.sv.append(v)
     
def main():
   """
   Defines two players '0' and '1'
   and starts the game.
   """
   shared = []
   p1 = Player('0',shared)
   p2 = Player('1',shared)
   print 'starting the game'
   shared.append(3)
   p1.start()
   p2.start()
   print 'game has started'

if __name__ == "__main__": main()
