Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
 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
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
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()
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
   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)