class Simulation:
 def __init__(self, games=5000, max_games=10000, default_games=5000):
  self.points = {}
  self.played = {}
  self.won = {}
  self.max_games = max_games
  self.default_games = default_games

  self.games = self.default_games
  if self.games > self.max_games:
   print '<h1>Can\'t play %s games, playing %s games instead' % (self.games,self.max_games)
   self.games = self.max_games
  else:
   self.games = games

 def run(self):
  from CrapsGame import CrapsGame
  a = CrapsGame()

  for i in range(0,self.games):
   a.play()

   length = str(a.length)
   self.increment(self.played,length)

   if (a.outcome == 'won'):
    self.increment(self.won,length)

 def show_form(self):
  print '<form action="fastjack.cgi" method="get">'
  print '<input type="hidden" name="play" value="true">'
  print '<p><b>Number of games (1-%d)</b>' % self.max_games
  print '<input type="text" name="games" size=5 maxlength=5 value="%d">' % self.default_games
  print '</p>'
  print '<input type="submit" value="Show me what you\'ve got, Fast Jack!">'
  print '</form>'

 def print_stats(self):
  cumulative_odds = 0

  print '<html><body>'
  print '<h1>Fast Jack\'s Floating Hall of Craps<br>'
  print 'Stats on %s games</h1>' % self.games
  print '<table border=1>'
  print '<tr>'
  print '<td>Length of Game</td>'
  print '<td>Number of Games</td>'
  print '<td>Games won</td>'
  print '<td>Games lost</td>'
  print '<td>Cumulative odds</td>'
  print '</tr>'

  keys = self.played.keys()

  for i in range(0,len(keys)):
   keys[i] = int(keys[i])
  keys.sort()

  total_rounds_played = 0

  for key in keys:
   length = key
   total_rounds_played = total_rounds_played + (key * self.played[str(key)])
   key = str(key)   

   if self.played.has_key(key):
    number_played = self.played[key]
    percent_played = float(number_played) / self.games * 100
   else:
    number_played = 0

   if self.won.has_key(key):
    number_won = self.won[key]
    percent_won = float(number_won) / number_played * 100
   else:
    number_won = 0
    percent_won = 0

   number_lost = number_played - number_won
   if number_lost == 0:
    percent_lost = 0
   else:
    percent_lost = float(number_lost) / number_played * 100

   cumulative_odds = cumulative_odds + ((float(number_won) / self.games) * 100)

   print '<tr>'
   print '<td>%d</td>' % length
   print '<td>%d (%.2f%%)</td>' % (number_played, percent_played)
   print '<td>%d (%.2f%%)</td>' % (number_won, percent_won)
   print '<td>%d (%.2f%%)</td>' % (number_lost, percent_lost)
   print '<td>%.2f%%</td>' % (cumulative_odds)
   print '</tr>'

  print '</table>'

  print '<h1>Total probability of winning: %.2f%%</h1>' % cumulative_odds

 def increment(self,dict,key):
  if dict.has_key(key):
   dict[key] = dict[key] + 1
  else:
   dict[key] = 1

