Skip to content

Instantly share code, notes, and snippets.

@89465127
Last active December 14, 2015 15:38
Show Gist options
  • Save 89465127/5108896 to your computer and use it in GitHub Desktop.
Save 89465127/5108896 to your computer and use it in GitHub Desktop.
Perudo Game Assistant
#! /usr/bin/python
import operator
import re
import numpy as np
class Perudo():
def __init__(self):
print "-- New Game --\nNumber of players?"
num_players = int(self.user_input())
self.starting_dice = num_players * 5
self.bet_string = ''
self.play()
def user_input(self):
i = raw_input()
while(not re.search(r'^(q|[1-6]*)$', i)):
print "invalid input. please enter digits (1-6) only or q to quit."
i = raw_input()
if i == 'q':
print 'bye.'
exit(0)
return i
def suggest_bet(self):
num_unknown_dice = self.num_dice - sum(self.predicted_dice[2:])
mean_unknown_quantity = num_unknown_dice/3.0
dice_array = np.array(self.predicted_dice[2:])
max_die_quantity = max(self.predicted_dice[2:])
maxima_indexes = np.where(dice_array == max_die_quantity)[0]
max_die_face = maxima_indexes[-1] + 2 # We want the last maxima, because 6 is better than 2
num_aces = self.my_dice[1]
suggested_bet_quantity = mean_unknown_quantity + max_die_quantity + num_aces
print "suggested bet: %1.1f %d's" % (suggested_bet_quantity, max_die_face)
def play(self):
for self.num_dice in reversed(range(2, self.starting_dice+1)):
print "\nNew Turn. %d dice. Mean: %1.2f. Your dice?" % (self.num_dice, self.num_dice/3.0)
my_dice_string = str(self.user_input())
self.my_dice = [-9,0,0,0,0,0,0]
for die in my_dice_string:
self.my_dice[int(die)] += 1
self.bets = [-9,0,0,0,0,0,0]
while(True):
for bet in self.bet_string:
self.bets[int(bet)] += 1
self.predicted_dice = [x[0]+x[1] for x in zip(self.bets, self.my_dice)]
self.suggest_bet()
print "bet?"
self.bet_string = self.user_input()
if not self.bet_string:
break
def main():
Perudo()
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment