def init_players(self): self.bot = GamePlayer(self.choices[randint(0, 1)]) self.player = "X" if self.bot.choice == "O" else "O" if randint(0, 1) == 1: self.bot.make_move(self.board, self.winning_combos) greeting = "Hello Player! Bot plays first! You are playing with \"" + self.player + "\"" else: greeting = "Hello Player! You are playing with \"" + self.player + "\"" self.popup_message(greeting)
def add_player(self, player): if player.id not in self.players: self.players[player.id] = GamePlayer(player, self.botv, lesketon.bot) return "New player ({}) successfully added.".format(player.id) else: return "Player of id {} already registered.".format(player.id)
def playGame(self, gameIndex, currentRound, blackName, blackCmd, whiteName, whiteCmd, opening, verbose): if verbose: print print "===========================================================" print "Game ", gameIndex print "===========================================================" bcmd = "nice " + blackCmd + " --seed %SRAND" \ + " --logfile-name " + self._outdir + "/" \ + blackName + "-" + str(gameIndex) + ".log" wcmd = "nice " + whiteCmd + " --seed %SRAND" \ + " --logfile-name " + self._outdir + "/" \ + whiteName + "-" + str(gameIndex) + ".log" bLogName = self._outdir + "/" + blackName + "-" + str(gameIndex) \ + "-stderr.log" wLogName = self._outdir + "/" + whiteName + "-" + str(gameIndex) \ + "-stderr.log" black = Program("B", bcmd, bLogName, verbose) white = Program("W", wcmd, wLogName, verbose) resultBlack = "?" resultWhite = "?" error = 0 errorMessage = "" game = Game() # just a temporary gamePlayer = GamePlayer(black, white, self._size) try: game = gamePlayer.play(opening, verbose) swapped = game.playedSwap() resultBlack = self.handleResult(swapped, black.getResult()) resultWhite = self.handleResult(swapped, white.getResult()) except GamePlayer.Error: error = 1 errorMessage = gamePlayer.getErrorMessage() except Program.Died: error = 1 errorMessage = "program died" name = "%s/%04i" % (self._outdir, gameIndex) # save the result # recall it has been flipped if a swap move was played result = "?" if resultBlack == resultWhite: result = resultBlack game.setResult(result) # save it to the results file self._resultsFile.addResult(currentRound, opening, blackName, whiteName, resultBlack, resultWhite, # -1 so we don't count "resign" as a move game.getLength()-1, game.getElapsed("black"), game.getElapsed("white"), error, errorMessage) # save game gamePlayer.save(name + ".sgf", name, resultBlack, resultWhite) if error: print "Error: Game", gameIndex for program in [black, white]: try: program.sendCommand("quit"); except Program.Died: pass return game
for opt in wsettings: white.sendCommand(opt) except GamePlayer.Error: print "Error during initialization!" print gamePlayer.getErrorMessage() except Program.Died: print "Error during initialization!" print "program died" opening = randomOpening(size, seed / 2) resultBlack = "?" resultWhite = "?" error = 0 errorMessage = "" game = Game() # just a temporary gamePlayer = GamePlayer(black, white, size) try: game = gamePlayer.play(opening, verbose) resultBlack = black.getResult() resultWhite = white.getResult() filename = path + ("/%07d.sgf" % seed) gamePlayer.save(filename, seed, resultBlack, resultWhite) result = "?" if resultBlack == resultWhite: result = resultBlack if result == '?': print "Error: could not determine game result" elif 'B+' in result: if (seed % 2 == 0): # seed even ==> black == opt
class TicTacToeApp(App): title = 'Tic Tac Toe' board = [] choices = ["X", "O"] game_over = False winning_combos = [ [0, 1, 2], [3, 4, 5], [6, 7, 8], # Horizontal [0, 3, 6], [1, 4, 7], [2, 5, 8], # Vertical [0, 4, 8], [2, 4, 6] # Diagonal ] # On application build handler def build(self): Config.set('graphics', 'width', '450') Config.set('graphics', 'height', '450') Config.set('graphics', 'resizable', False) self.layout = StackLayout() for x in range(9): bt = Button(text='', color=(0.8, 0.8, 0.8, 1), font_size=120, width=150, height=150, size_hint=(None, None), id=str(x), background_color=(0.4, 0.65, 0.90, 1.0)) bt.bind(on_release=self.btn_pressed) self.board.append(bt) self.layout.add_widget(bt) return self.layout # On application start handler def on_start(self): self.init_players() # On button pressed handler def btn_pressed(self, button): if len(button.text.strip() ) < 1: # Continue only if the button has no mark on it... button.text = self.player self.bot.make_move(self.board, self.winning_combos) self.check_winner() # Initializes players def init_players(self): self.bot = GamePlayer(self.choices[randint(0, 1)]) self.player = "X" if self.bot.choice == "O" else "O" if randint(0, 1) == 1: self.bot.make_move(self.board, self.winning_combos) greeting = "Hello Player! Bot plays first! You are playing with \"" + self.player + "\"" else: greeting = "Hello Player! You are playing with \"" + self.player + "\"" self.popup_message(greeting) # Checks winner after every move... def check_winner(self): for combo in self.winning_combos: if self.board[combo[0]].text == self.board[ combo[1]].text == self.board[combo[2]].text and self.board[ combo[0]].text != '': self.game_over = True if self.board[combo[0]].text == self.player: self.popup_message('Player wins!') else: self.popup_message('Bot wins!') # Resets game state by deleting button values... def reset_game(self, popup): if self.game_over: for button in self.board: button.text = '' self.game_over = False def popup_message(self, msg, title="Welcome!"): popup = Popup(title=title, content=Label(text=msg), size=(435, 100), size_hint=(None, None)) popup.bind(on_dismiss=self.reset_game) popup.open()
def playGame(self, gameIndex, currentRound, blackName, blackCmd, whiteName, whiteCmd, opening, verbose): if verbose: print print "===========================================================" print "Game ", gameIndex print "===========================================================" bcmd = "nice " + blackCmd + " --seed %SRAND" \ + " --logfile-name " + self._outdir + "/" \ + blackName + "-" + str(gameIndex) + ".log" wcmd = "nice " + whiteCmd + " --seed %SRAND" \ + " --logfile-name " + self._outdir + "/" \ + whiteName + "-" + str(gameIndex) + ".log" black = Program("B", bcmd, verbose) white = Program("W", wcmd, verbose) resultBlack = "?" resultWhite = "?" error = 0 errorMessage = "" game = Game() # just a temporary gamePlayer = GamePlayer(black, white, self._size) try: game = gamePlayer.play(opening, verbose) swapped = game.playedSwap() resultBlack = self.handleResult(swapped, black.getResult()) resultWhite = self.handleResult(swapped, white.getResult()) except GamePlayer.Error: error = 1 errorMessage = gamePlayer.getErrorMessage() except Program.Died: error = 1 errorMessage = "program died" name = "%s/%04i" % (self._outdir, gameIndex) # save the result # recall it has been flipped if a swap move was played result = "?" if resultBlack == resultWhite: result = resultBlack game.setResult(result) # save it to the results file self._resultsFile.addResult(currentRound, opening, blackName, whiteName, resultBlack, resultWhite, # -1 so we don't count "resign" as a move game.getLength()-1, game.getElapsed("black"), game.getElapsed("white"), error, errorMessage) # save game gamePlayer.save(name + ".sgf", name, resultBlack, resultWhite) if error: print "Error: Game", gameIndex for p in (black, white): if p.isDead(): p.saveLog(name + ".log") p.saveCommandLog(name + ".gtp") break for program in [black, white]: try: program.sendCommand("quit"); except Program.Died: pass return game
Using GamePlayer ''' import sys import os # Add parent directory to PYTHONPATH parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) os.sys.path.insert(0, parentdir) from gameplayer import GamePlayer from action import Action from state import State # Main: initState = State.getInitState() gamePlayer = GamePlayer(Action, State) result = gamePlayer.treeSearch(initState) # Somme comments: #print "Search type:", SEARCH_TYPE print "Iterations Checked:", gamePlayer.iterations print "Solution Path:", result print "Num of moves needed:", len(result) print "Hit Enter to see it played out." yn = sys.stdin.readline() # Play solution gamePlayer.play(initState, result)