X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=nac-trinket%2Fmenace.py;h=bb75c0656585b84e243c6e034776e4b7e9e5864f;hb=HEAD;hp=f8adde21071f89865425109af67349d27141e15e;hpb=47e500374c34310a28eee29d00081215c5df591b;p=menace.git diff --git a/nac-trinket/menace.py b/nac-trinket/menace.py index f8adde2..bb75c06 100644 --- a/nac-trinket/menace.py +++ b/nac-trinket/menace.py @@ -1,7 +1,5 @@ from nac import * -import itertools -import functools import collections import random @@ -10,10 +8,11 @@ INITIAL_BEAD_COUNT = 3 def new_game(player1, player2): return {'board': empty_board(), - 'player1': player1, - 'player2': player2, - 'player1_active': True, - 'history': []} + 'player1': player1, + 'player2': player2, + 'player1_active': True, + 'history': []} + def game_finished(game): return (winner(game['board']) is not None) or (game['board'].count('.') == 0) @@ -35,6 +34,7 @@ def new_menace(): boxes[b] = box return boxes + def menace_move(game): board, r, f = canonical(game['board']) player = active_player(game) @@ -44,6 +44,7 @@ def menace_move(game): moved_board = untransform(cmove_board, r, f) return moved_board.index(token) + def new_human(): return {'human?': True} @@ -71,6 +72,7 @@ def human_move(game): print('Please enter a number.') return move + def make_move(game): if game['player1_active']: active = game['player1'] @@ -90,6 +92,7 @@ def play_game(game): while not game_finished(game): make_move(game) + def winning_player(game): if winner(game['board']) is None: return None @@ -98,6 +101,7 @@ def winning_player(game): else: return game['player2'] + def losing_player(game): if winner(game['board']) is None: return None @@ -111,6 +115,7 @@ def winning_moves(game): return [h for h in game['history'] if h['player1?'] == game['history'][-1]['player1?']] + def losing_moves(game): return [h for h in game['history'] if h['player1?'] != game['history'][-1]['player1?']] @@ -132,6 +137,7 @@ def update_winner(game): cmove = cmove_board.index('+') player[board][cmove] += 1 + def update_loser(game, allow_drop_move=False): player = losing_player(game) moves = losing_moves(game) @@ -150,7 +156,6 @@ def update_loser(game, allow_drop_move=False): player[board][cmove] -= 1 - def count_wins(p1, p2, plays=1000): wins = 0 draws = 0 @@ -172,20 +177,19 @@ def game_with_players(p1, p2, report_result_for=None): play_game(g) if report_result_for: - print('\nFinal position') - print(show_board(g['board'])) - if winner(g['board']) is None: - print('A draw') - elif winning_player(g) == ph: - print('You won') - else: - print('You lost') - + print('\nFinal position') + print(show_board(g['board'])) + if winner(g['board']) is None: + print('A draw') + elif winning_player(g) == ph: + print('You won') + else: + print('You lost') return g + def train_players(p1, p2, rounds=10000, allow_drop_move=False): for _ in range(rounds): g = game_with_players(p1, p2) update_players(g, allow_drop_move=allow_drop_move) return p1, p2 - \ No newline at end of file