Example #1
0
    def mainLoop(self):    
        pygame.init()    
        
        pieces = {}    
        chess = ChessBoard(self.pattern)
        board = chess.getBoard()
        turn = chess.getTurn()
	predicted = False
	print "chess.pattern", chess.pattern
        screen = pygame.display.set_mode((480, 480),1)
        pygame.display.set_caption('ChessBoard Client')

        # load all images
        pieces = [{},{}]
        pieces[0]["r"] = pygame.image.load("./img/brw.png")                
        pieces[0]["n"] = pygame.image.load("./img/bnw.png")                
        pieces[0]["b"] = pygame.image.load("./img/bbw.png")                
        pieces[0]["k"] = pygame.image.load("./img/bkw.png")                
        pieces[0]["q"] = pygame.image.load("./img/bqw.png")                
        pieces[0]["p"] = pygame.image.load("./img/bpw.png")                
        pieces[0]["R"] = pygame.image.load("./img/wrw.png")                
        pieces[0]["N"] = pygame.image.load("./img/wnw.png")                
        pieces[0]["B"] = pygame.image.load("./img/wbw.png")                
        pieces[0]["K"] = pygame.image.load("./img/wkw.png")                
        pieces[0]["Q"] = pygame.image.load("./img/wqw.png")                
        pieces[0]["P"] = pygame.image.load("./img/wpw.png")                
        pieces[0]["."] = pygame.image.load("./img/w.png")                
        pieces[1]["r"] = pygame.image.load("./img/brb.png")                
        pieces[1]["n"] = pygame.image.load("./img/bnb.png")                
        pieces[1]["b"] = pygame.image.load("./img/bbb.png")                
        pieces[1]["k"] = pygame.image.load("./img/bkb.png")                
        pieces[1]["q"] = pygame.image.load("./img/bqb.png")                
        pieces[1]["p"] = pygame.image.load("./img/bpb.png")                
        pieces[1]["R"] = pygame.image.load("./img/wrb.png")                
        pieces[1]["N"] = pygame.image.load("./img/wnb.png")                
        pieces[1]["B"] = pygame.image.load("./img/wbb.png")                
        pieces[1]["K"] = pygame.image.load("./img/wkb.png")                
        pieces[1]["Q"] = pygame.image.load("./img/wqb.png")                
        pieces[1]["P"] = pygame.image.load("./img/wpb.png")                
        pieces[1]["."] = pygame.image.load("./img/b.png")                

        clock = pygame.time.Clock()

        posRect = pygame.Rect(0,0,60,60)

        mousePos = [-1,-1]
        markPos = [-1,-1]
        validMoves = []
        
        gameResults = ["","WHITE WINS!","BLACK WINS!","STALEMATE","DRAW BY THE FIFTHY MOVES RULE","DRAW BY THE THREE REPETITION RULE"]
        
        while 1:
            clock.tick(30)        
    
            for event in pygame.event.get():
                if event.type == QUIT:
                    return
                elif event.type == KEYDOWN:
                    if event.key == K_ESCAPE:
                        return
                    elif event.key == K_LEFT:
                        chess.undo()
                    elif event.key == K_RIGHT:
                        chess.redo()
                    elif event.unicode in ("f","F"):
                        print chess.getFEN()
                    elif event.unicode in ("a","A"):
                        an = chess.getAllTextMoves(chess.AN)
                        if an:
                            print "AN: " + ", ".join(an)
                    elif event.unicode in ("s","S"):
                        san = chess.getAllTextMoves(chess.SAN)
                        if san:
                            print "SAN: " + ", ".join(san)
                    elif event.unicode in ("l","L"):
                        lan = chess.getAllTextMoves(chess.LAN)
                        if lan:
                            print "LAN: " + ", ".join(lan)
                    board = chess.getBoard()
                    turn = chess.getTurn()
                    markPos[0] = -1
                    validMoves = [] 
                        
                if not chess.isGameOver():
		    if not predicted:
			chess.mainMove = chess.getTurn()
			score =  chess.predictMove(chess.depth,chess.alpha,chess.beta)
			print "score:",score
			chess.best_score = chess.NEGINFINITY
			chess.alpha = chess.NEGINFINITY
			chess.beta = chess.INFINITY
			chess.finished = False
			predicted = True
                    if event.type == MOUSEMOTION:
                        mx = event.pos[0]
                        my = event.pos[1]
                        mousePos[0] = mx/60
                        mousePos[1] = my/60
                    elif event.type == MOUSEBUTTONDOWN:
                        if mousePos[0] != -1:
                            if markPos[0] == mousePos[0] and markPos[1] == mousePos[1]:
                                markPos[0] = -1
                                validMoves = []
                            else: 
                                if (turn==ChessBoard.WHITE and board[mousePos[1]][mousePos[0]].isupper()) or \
                                   (turn==ChessBoard.BLACK and board[mousePos[1]][mousePos[0]].islower()):    
                                    markPos[0] = mousePos[0]
                                    markPos[1] = mousePos[1]
                                    validMoves = chess.getValidMoves(tuple(markPos))
				    #chess.predictMove(0)
				    #print chess.getBoardPiece(tuple(markPos))
				    #print validMoves
				    #print chess.getScore(validMoves, tuple(markPos))
				    #chess.printBoard()
                                    
                                else:
                                    if markPos[0] != -1:
                                        res = chess.addMove(markPos,mousePos)
                                        if not res and chess.getReason() == chess.MUST_SET_PROMOTION:
                                            chess.setPromotion(chess.QUEEN)                                                
                                            res = chess.addMove(markPos,mousePos)                                            
                                        if res:
                                            print chess.getLastMove()
                                            print chess.getLastTextMove(chess.SAN)
                                            board = chess.getBoard()
                                            turn = chess.getTurn()
                                            markPos[0] = -1
                                            validMoves = [] 
					    predicted = False

            if chess.isGameOver():
                pygame.display.set_caption("Game Over! (Reason:%s)" % gameResults[chess.getGameResult()])
                validMove = []
                markPos[0] = -1
                markPos[1] = -1
            else:
                pygame.display.set_caption('ChessBoard Client') 
                                            
            y = 0
            for rank in board:
                x = 0
                for p in rank:
                    screen.blit(pieces[(x+y)%2][p],(x*60,y*60))
                    x+=1
                y+=1             

            if markPos[0] != -1:
                posRect.left = markPos[0]*60
                posRect.top = markPos[1]*60
                pygame.draw.rect(screen, (255,255,0),posRect, 4)

            for v in validMoves:
                posRect.left = v[0]*60
                posRect.top = v[1]*60
                pygame.draw.rect(screen, (255,255,0),posRect, 4)
                                       
            pygame.display.flip()