Last active
December 14, 2015 15:38
-
-
Save 89465127/5108896 to your computer and use it in GitHub Desktop.
Perudo Game Assistant
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /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