示例#1
0
class Othello:
    def __init__(self):
        self.g = GUI()
        self.b = Board()
        self.players =[None, None]
        self.showMenu()

    def showMenu(self):
        # input =
        players, self.timeOut, setLayout = self.g.getPlayer()

        if players[0] == "h":
            self.players[0] = humanPlayer(BLK, self.g, self.b)
            self.players[1] = compPlayer(WHT, self.g,  self.b, self.timeOut)
        elif players[1] == "h":
            self.players[0] = compPlayer(BLK, self.g, self.b, self.timeOut)
            self.players[1] = humanPlayer(WHT, self.g, self.b)
        else:
            self.players[0] = compPlayer(BLK, self.g, self.b, self.timeOut)
            self.players[1] = compPlayer(WHT, self.g, self.b, self.timeOut)

        if setLayout:
            self.setLayout() # If a valid file isn't seleted the default layout is loaded
        self.g.showBoard()
        print("LET THE GAMES BEGIN!")

    def setLayout(self):
        Tk().withdraw()
        filename = askopenfilename()
        if filename:
            with open(filename, 'r') as f:
                board = numpy.genfromtxt(f,
                                         delimiter=' ',
                                         skip_footer=2,
                                         dtype=numpy.int32)
                self.b.board = board

            with open(filename,'r') as f2:
                options = numpy.genfromtxt(f2, delimiter=' ', dtype=numpy.int32,usecols=0, skip_header=8)
                self.timeOut = options[1]
                if options[0] == 2: # if 1 Black goes first, if 2 then white goes first.
                    self.players = self.players[::-1]


    def play(self):
        while True:
            for event in pygame.event.get():
                if event.type == QUIT:
                    pygame.quit()
                    sys.exit()
                elif event.type == KEYDOWN:
                    if event.key == K_ESCAPE:
                        pygame.display.quit()
                        sys.exit()
        # Get valid  moves and make moves
            for player in self.players:
                validMoves = self.b.getValidMoves(player.color)  # Get list of valid moves
                if validMoves:
                    self.g.updateBoard(self.b, player.color, player.isBot) # Update board to show possible moves
                    gridXY = player.getMove(validMoves)
                    self.b.putTile(gridXY, player.color)
                    self.g.updateBoard(self.b)
                    # pygame.time.wait(int((200*self.timeOut+500)/7))

            # Check end state
            if self.b.checkEnd():
                    print("Game ended")
                    tileCount = self.b.getTileCount()
                    print(tileCount)
                    if tileCount[0] > tileCount[1]:
                        self.g.showWinner(BLK)
                        print("Black wins")
                    elif tileCount[0]< tileCount[1]:
                        self.g.showWinner(WHT)
                        print("White wins")
                    else:
                        self.g.showWinner(EMP)
                        print("Magically a draw")
                    pygame.time.wait(5000)
                    pygame.quit()
                    sys.exit()