def test_ToLeft(self): self.assertEqual(cell[0], 2) self.assertEqual(cell[1], 2) result = Checkers.toLeft(cell, pieceType) self.assertEqual(result[0], 1) self.assertEqual(result[1], 2) result = Checkers.toLeft(cell, pieceType, 2) self.assertEqual(result[0], 0) self.assertEqual(result[1], 2)
def test_ToRight(self): self.assertEqual(cell[0], 2) self.assertEqual(cell[1], 2) result = Checkers.toRight(cell, pieceType) self.assertEqual(result[0], 3) self.assertEqual(result[1], 2) result = Checkers.toRight(cell, pieceType, 2) self.assertEqual(result[0], 4) self.assertEqual(result[1], 2) self.assertEqual(cell[0], 2) self.assertEqual(cell[1], 2)
def test_generatePossibleMoves_2blackpiecesOnFirstTurn(self): black = Pieces.Black() board = {1: black, 2: black} possibleBoard1 = {5: black, 2: black} possibleBoard2 = {6: black, 2: black} possibleBoard3 = {1: black, 6: black} possibleBoard4 = {1: black, 7: black} self.assertEqual(Checkers.generatePossibleMoves(board, 1), [possibleBoard1, possibleBoard2, possibleBoard3, possibleBoard4])
def test_generatePossibleMoves_rightJumpsFor1BlackPieceAnd1RedPieceOnFirstTurn(self): black = Pieces.Black() board = {1: black, 6: self.red} self.assertEqual(Checkers.generatePossibleMoves(board, 1), [{10: black}])
def test_generatePossibleMoves_rightMovesFor1BlackPieceAnd1RedPieceOnSecondTurn(self): black = Pieces.Black() board = {1: black, 29: self.red} self.assertEqual(Checkers.generatePossibleMoves(board, 2), [{1: black, 25: self.red}])
#!/usr/bin/python3.6 import Checkers import Players mcp_iterations = 100 minimax_depth = 4 wins = [0, 0] iterations = 50 for i in range(iterations): game = Checkers.Game() #visualizer = Checkers.TerminalGameVisualizer(game) player_one = Players.MinimaxPlayer(minimax_depth) player_two = Players.MonteCarloPlayer(mcp_iterations) runner = Checkers.GameRunner(game, player_one, player_two) result = runner.run() if result is not None: wins[result] += 1 print(i, result) draws = iterations - wins[0] - wins[1] print("1: %d, 2: %d, D: %d" % (wins[0], wins[1], draws))
def iniciar_partida(self): self.jogo_de_damas = Checkers( self.tela, claras) # o segundo parâmetro é quem começa
def scheduledTask(): AlbertHein.ScrapeFunction() Checkers.ScrapeFunction()
def test_generateMoves(self): black = Pieces.Black() board = {1: black} self.assertEqual(Checkers.possibleMoves(1, board), [{5: black}, {6: black}])
def test_possibleJumps(self): black = Pieces.Black() board = {1: black, 6: self.red} self.assertEqual(Checkers.possibleJumps(1, board), [{10: black}])
def test_possibleJumps_wrongDoubleJump(self): black = Pieces.Black() board = {1: black, 6: self.red, 9: self.red} expectedBoard = [{9: self.red, 10: black}] self.assertEqual(Checkers.possibleJumps(1, board), expectedBoard)
def test_generatePossibleMoves_twoPossibleJumps(self): black = Pieces.Black() board = {1: black, 6: self.red, 14: self.red, 15: self.red} expectedBoard = [{15: self.red, 17: black}, {14: self.red, 19: black}] self.assertEqual(Checkers.generatePossibleMoves(board, 1), expectedBoard)
def test_generatePossibleMoves_rightJumpsFor1BlackPieceAnd1RedPieceOnSecondTurn(self): black = Pieces.Black() board = {1: black, 6: self.red} expectedBoard = [{1: black, 2: Pieces.RedKing()}] self.assertEqual(Checkers.generatePossibleMoves(board, 2), expectedBoard)
from Checkers import * from random import randint a = Checkers() print(a.getMatrix()) print(a.move(a.validMoves()[0])) print(a.getMatrix()) #print(a.getDenseLabelMatrix()) #print(a.getSparseLabelMatrix()) #loc = 7 #print("Adjacent diagonals to {0}: {1}".format(loc,str(a.diagonalMoves(loc)))) #print(a.state) #print(a.getSparseLabelMatrix()) #print(a.getMatrix()) #print(a.validMoves())
def makeMove(board, weights, whoseTurn): moves = Checkers.generatePossibleMoves(board, whoseTurn) moveValues = {move: assignValue(move, weights) for move in moves} bestMoves = getKeysWithHighestValue(moveValues) bestMove = random.choice(bestMoves) return bestMove
def checkersTest(): game = Checkers() print(game.evaluate("Player")) print(game.evaluate("AI")) print(game.getTurn()) game.turnEnd() print(game.getTurn()) game.printGame() board = Board(8) board.addPiece("Player",0,1,1) game.loadBoard(board) game.printGame() print(game.checkWin(), game.isOver()) board = Board(8) board.addPiece("AI",0,1,1) game.loadBoard(board) game.printGame() print(game.checkWin(), game.isOver()) """ board = Board(8) board.addPiece("Player",0,1,0) board.addPiece("Player",0,4,4) board.addPiece("AI",0,5,3) board.addPiece("Player",0,2,2) board.addPiece("AI",0,0,7) board.addPiece("AI",0,3,3) board.addPiece("AI",0,1,6) game.loadBoard(board) print("validMove from 2,2 to 1,1",game.validMove(1,1)) print("Movable","2,2",game.pieceMovable(2, 2) ) print("Movable","0,7",game.pieceMovable(1, 6) ) print("King", game.isKing(3,3)) print("King", game.isKing(1,6)) print("King", game.isKing(1,0)) print("King", game.isKing(0,7)) print("CAN 4,4 Jump?", game.canJump(4, 4)) print("ForceJump Player", game.forceJump("Player")) print("CAN 5,3 Jump?", game.canJump(5, 3)) print("ForceJump AI", game.forceJump("AI")) board = Board(8) board.addPiece("Player",0,1,0) board.addPiece("Player",0,5,4) board.addPiece("AI",0,0,7) board.addPiece("AI",0,4,3) board.addPiece("AI",0,7,0) board.addPiece("Player",0,1,6) board.addPiece("Player",0,6,7) board.updatePiece(1, 0, 7) board.updatePiece(1, 1, 0) game.loadBoard(board) print(game.movePiece("Player",1, 0, 0, 1)) print(game.movePiece("AI",7, 0, 6, 1)) print(game.movePiece("AI",0, 7, 2, 5)) print(game.movePiece("Player",5, 4, 3, 2)) board2 = Board(8) board2.addPiece("Player",0,1,0) board2.addPiece("Player",0,5,4) board2.addPiece("AI",0,0,7) board2.addPiece("AI",0,4,3) board2.addPiece("AI",0,7,0) board2.addPiece("Player",0,1,6) board2.addPiece("Player",0,6,7) board2.updatePiece(1, 0, 7) board2.updatePiece(1, 1, 0) game2 = Checkers() game2.printGame() game2.loadBoard(board2) game2.printGame() print(game.movePiece("AI",0, 7, 2, 5)) print(game.movePiece("Player",5, 4, 3, 2)) print(game.movePiece("AI",7, 0, 6, 1)) print(game.movePiece("Player",1, 0, 0, 1)) """ """while not game.isOver():
def test_evaluateMove(self): black = Pieces.Black() board = {1: black} self.assertEqual(Checkers.evaluateMove(1, 5, board), [{5: black}])
def test_move(self): black = Pieces.Black() board = {1: black} self.assertEqual(Checkers.move(1, 5, board), {5: black})
#!/usr/bin/python3.6 import Checkers import Players import sys def get_player(player_type): players = { 'random': Players.RandomPlayer(), 'manual': Players.ManualPlayer(), 'monte_carlo': Players.MonteCarloPlayer(100), 'minimax': Players.MinimaxPlayer(4), 'en_masse': Players.EnMassePlayer(), 'flanking': Players.FlankingPlayer(), 'aggressive': Players.AggressivePlayer(), } return players[player_type] player_one = get_player(sys.argv[1]) player_two = get_player(sys.argv[2]) game = Checkers.Game() visualizer = Checkers.TerminalGameVisualizer(game) runner = Checkers.GameRunner(game, player_one, player_two) runner.run()
def test_generatePossibleMoves_rightMovesFor1BlackPieceOnFirstTurn(self): black = Pieces.Black() board = {1: black} self.assertEqual(Checkers.generatePossibleMoves(board, 1), [{5: black}, {6: black}])
class Game: def __init__(self): pygame.init() # execução def start(self): # self.musica() self.criar_tela() self.escolha = exibir_menu self.opcoes = {} self.exibir_menu() self.loop() # cria a janela de execução def criar_tela(self): pygame.display.set_caption("Jogo de Damas") largura = tamanho_casas * 14 altura = tamanho_casas * 10 self.tamanho_tela = largura, altura self.tela = pygame.display.set_mode(self.tamanho_tela) self.clock = pygame.time.Clock() # reprodução da música de fundo def musica(self): pygame.mixer.music.load("musica/amelie.mp3") pygame.mixer.music.play() # começo da 'partida' def iniciar_partida(self): self.jogo_de_damas = Checkers( self.tela, claras) # o segundo parâmetro é quem começa # textos def objetos_de_texto(self, texto, cor, fonte): aparencia = fonte.render(texto, True, cor) return aparencia, aparencia.get_rect() # mensagens def tela_de_mensagens(self, texto, posicao, nome_da_fonte, tamanho, cor, bold=False, center=True): fonte = pygame.font.SysFont(nome_da_fonte, tamanho, bold) aparencia_do_texto, area_do_texto = self.objetos_de_texto( texto, cor, fonte) if center: area_do_texto.center = posicao self.tela.blit(aparencia_do_texto, area_do_texto) return aparencia_do_texto, area_do_texto else: self.tela.blit(aparencia_do_texto, posicao) # tela menu / inical def exibir_menu(self): inicar = pygame.display.set_mode(self.tamanho_tela) tela = self.tela fundo = pygame.image.load("imagens/menu.png") tela.blit(fundo, (0, 0)) largura, altura = self.tamanho_tela x, x_s = largura / 2.01, largura / 2 fonte = "purisa" h1, h2 = 100, 30 cor_da_fonte, sombra = (255, 255, 255), (0, 0, 0) deslocamento_superior = 150 self.tela_de_mensagens("Damas", (x_s, deslocamento_superior), fonte, h1, sombra, True) self.tela_de_mensagens("Damas", (x, deslocamento_superior), fonte, h1, cor_da_fonte, True) deslocamento_superior += 110 msg = self.tela_de_mensagens(u"História", (x_s, deslocamento_superior), fonte, h2, sombra) msg = self.tela_de_mensagens(u"História", (x, deslocamento_superior), fonte, h2, cor_da_fonte) self.opcoes[historia] = msg deslocamento_superior += 35 msg = self.tela_de_mensagens("Iniciar", (x_s, deslocamento_superior), fonte, h2, sombra) msg = self.tela_de_mensagens("Iniciar", (x, deslocamento_superior), fonte, h2, cor_da_fonte) self.opcoes[comecar] = msg deslocamento_superior += 35 msg = self.tela_de_mensagens(u"Instruções", (x_s, deslocamento_superior), fonte, h2, sombra) msg = self.tela_de_mensagens(u"Instruções", (x, deslocamento_superior), fonte, h2, cor_da_fonte) self.opcoes[ajuda] = msg deslocamento_superior += 35 msg = self.tela_de_mensagens(u"Créditos", (x_s, deslocamento_superior), fonte, h2, sombra) msg = self.tela_de_mensagens(u"Créditos", (x, deslocamento_superior), fonte, h2, cor_da_fonte) self.opcoes[creditos] = msg deslocamento_superior += 35 msg = self.tela_de_mensagens("Sair", (x_s, deslocamento_superior), fonte, h2, sombra) msg = self.tela_de_mensagens("Sair", (x, deslocamento_superior), fonte, h2, cor_da_fonte) self.opcoes[sair] = msg # deslocamento_superior += 40 # msg = self.tela_de_mensagens("FIM", (x_s, deslocamento_superior), fonte, h2, sombra) # msg = self.tela_de_mensagens("FIM", (x, deslocamento_superior), fonte, h2, cor_da_fonte) # self.opcoes[FIM] = msg pygame.display.flip() # tela de historia def historia(self): inicar = pygame.display.set_mode(self.tamanho_tela) tela = self.tela fundo = pygame.image.load("imagens/historia.png") tela.blit(fundo, (0, 0)) largura, altura = self.tamanho_tela x, x_s, y = largura / 2.01, largura / 2, altura - 30 fonte = "purisa" cor_da_fonte, sombra = (255, 255, 255), (0, 0, 0) h1, h2, h3 = 40, 17, 12 deslocamento_superior, deslocamento_lateral = 10, 120 deslocamento_lateral_s = 118.81188118811882 self.tela_de_mensagens(u"História", (20, deslocamento_superior), fonte, h1, sombra, True, False) self.tela_de_mensagens(u"História", (20 / 1.01, deslocamento_superior), fonte, h1, cor_da_fonte, True, False) linha1 = u" Uma nave da TECG cai no misterioso planeta NoBr3ak-IN4" linha2 = u"com um único sobrevivente, o alien Atreyu." linha3 = u" No planeta, Atreyu encontra Neytiri, o Poderoso, e, ao" linha4 = u"passar pela Forb1dd3n-Z, descobre uma caverna com ruínas" linha5 = u"da cidade de BBS e alguns aliens da raça Boolean que reve-" linha6 = u"renciam um while True." linha7 = u" Atreyu tenta conquistar o planeta NoBr3ak-IN4 e mos-" linha8 = u"trar aos Booleans a beleza que existe em um break no for." linha9 = u"Para que isso aconteça, haverá uma partida de Damas entre" linha10 = u"Atreyu e Neytiri que decidirá quem será o futuro governan-" linha11 = u"te do planeta." linha12 = u"Assim, fica a dúvida:" linha13 = u"-*- Será que teremos break no for?! -*-" deslocamento_superior += 85 self.tela_de_mensagens(linha1, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(linha1, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 30 self.tela_de_mensagens(linha2, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(linha2, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 30 self.tela_de_mensagens(linha3, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(linha3, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 30 self.tela_de_mensagens(linha4, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(linha4, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 30 self.tela_de_mensagens(linha5, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(linha5, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 30 self.tela_de_mensagens(linha6, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(linha6, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 30 self.tela_de_mensagens(linha7, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(linha7, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 30 self.tela_de_mensagens(linha8, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(linha8, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 30 self.tela_de_mensagens(linha9, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(linha9, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 30 self.tela_de_mensagens(linha10, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(linha10, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 30 self.tela_de_mensagens(linha11, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(linha11, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 47 self.tela_de_mensagens(linha12, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(linha12, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 47 deslocamento_lateral += 70 deslocamento_lateral_s += 70 self.tela_de_mensagens(linha13, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, True, False) self.tela_de_mensagens(linha13, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, True, False) self.tela_de_mensagens(u"Pressione 'ESC' para retornar ao menu", (x, y), fonte, h3, sombra, False, True) self.tela_de_mensagens(u"Pressione 'ESC' para retornar ao menu", (x_s, y), fonte, h3, cor_da_fonte, False, True) pygame.display.flip() # tela ajuda def exibir_ajuda(self): inicar = pygame.display.set_mode(self.tamanho_tela) tela = self.tela fundo = pygame.image.load("imagens/regras.png") tela.blit(fundo, (0, 0)) largura, altura = self.tamanho_tela x_s, x, y = largura / 2.01, largura / 2, altura - 30 cor_da_fonte, sombra = (255, 255, 255), (0, 0, 0) h1, h2, h3 = 40, 17, 12 deslocamento_superior, deslocamento_lateral = 10, 35 deslocamento_lateral_s = 34.653465347 fonte = "purisa" # regras self.tela_de_mensagens("Regras", (20 / 1.01, deslocamento_superior), fonte, h1, sombra, True, False) self.tela_de_mensagens("Regras", (20, deslocamento_superior), fonte, h1, cor_da_fonte, True, False) regra1 = u"1. A pedra (peça comum) anda apenas para frente, uma casa por vez." regra2 = u"2. Quando a pedra atinge a oitava linha do tabuleiro, ela é promovida à dama." regra3 = u"3. A dama anda para frente e para trás, quantas casas quiser." regra4 = u"4. A dama não pode saltar uma peça da mesma cor." regra5 = u"5. Duas ou mais peças juntas, na mesma diagonal, não podem ser capturadas." regra6 = u"6. A pedra e a dama podem capturar tanto para frente como para trás, uma" regra61 = u" ou mais peças." regra7 = u"7. Uma pedra só será coroada se no fim do turno ocupar uma casa de coroação." regra8 = u"8. A captura é obrigatória." regra9 = u"9. A vitória é obtida se o adversário não possuir mais peças ou jogadas possíveis." deslocamento_superior += 55 self.tela_de_mensagens(regra1, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(regra1, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 30 self.tela_de_mensagens(regra2, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(regra2, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 30 self.tela_de_mensagens(regra3, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(regra3, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 30 self.tela_de_mensagens(regra4, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(regra4, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 30 self.tela_de_mensagens(regra5, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(regra5, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 30 self.tela_de_mensagens(regra6, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(regra6, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 30 self.tela_de_mensagens(regra61, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(regra61, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 30 self.tela_de_mensagens(regra7, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(regra7, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 30 self.tela_de_mensagens(regra8, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(regra8, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) # como jogar deslocamento_superior += 30 self.tela_de_mensagens("Como Jogar", (20 / 1.01, deslocamento_superior), fonte, h1, (0, 0, 0), True, False) self.tela_de_mensagens("Como Jogar", (20, deslocamento_superior), fonte, h1, cor_da_fonte, True, False) dica_a = u"Para movimentar uma peça, clique nela e em seguida em uma das casas sugeridas." dica_b = u"Caso a casa ficar vermelha, a peça não pode realizar nenhum movimento." dica_c = u"Uma peça não pode se mover quando:" dica_ca = u"Não há jogadas possíveis;" dica_cb = u"Existe alguma captura obrigatória." deslocamento_superior += 60 self.tela_de_mensagens(dica_a, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(dica_a, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 25 self.tela_de_mensagens(dica_b, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(dica_b, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 30 self.tela_de_mensagens(dica_c, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, True, False) self.tela_de_mensagens(dica_c, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, True, False) deslocamento_lateral += 30 deslocamento_lateral_s += 30 deslocamento_superior += 30 self.tela_de_mensagens(dica_ca, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(dica_ca, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) deslocamento_superior += 25 self.tela_de_mensagens(dica_cb, (deslocamento_lateral_s, deslocamento_superior), fonte, h2, sombra, False, False) self.tela_de_mensagens(dica_cb, (deslocamento_lateral, deslocamento_superior), fonte, h2, cor_da_fonte, False, False) self.tela_de_mensagens("Pressione 'ESC' para retornar ao menu", (x_s, y), fonte, h3, sombra, False, True) self.tela_de_mensagens("Pressione 'ESC' para retornar ao menu", (x, y), fonte, h3, cor_da_fonte, False, True) pygame.display.flip() # tela de créditos def creditos(self): inicar = pygame.display.set_mode(self.tamanho_tela) tela = self.tela fundo = pygame.image.load("imagens/creditos.png") tela.blit(fundo, (0, 0)) largura, altura = self.tamanho_tela x, x_s, y = largura / 2, largura / 2.001, altura - 30 sombra, cor_da_fonte = (0, 0, 0), (255, 255, 255) h1, h2, h3, h4, h5 = 50, 24, 20, 12, 10 deslocamento_superior, deslocamento_lateral = 90, 60 deslocamento_lateral_s = 59.3 fonte = "purisa" self.tela_de_mensagens(u"Créditos", (x_s, deslocamento_superior), fonte, h1, sombra) self.tela_de_mensagens(u"Créditos", (x, deslocamento_superior), fonte, h1, cor_da_fonte) deslocamento_superior += 100 self.tela_de_mensagens("Siuanny Barbosa", (x_s, deslocamento_superior), fonte, h2, sombra, True, True) self.tela_de_mensagens("Siuanny Barbosa", (x, deslocamento_superior), fonte, h2, cor_da_fonte, True, True) deslocamento_superior += 30 self.tela_de_mensagens( u"Miniprojeto de Programação I e Laboratório de Programação I", (x_s, deslocamento_superior), fonte, h3, sombra, False, True) self.tela_de_mensagens( u"Miniprojeto de Programação I e Laboratório de Programação I", (x, deslocamento_superior), fonte, h3, cor_da_fonte, False, True) deslocamento_superior += 30 self.tela_de_mensagens(u"2017.2, Ciência da Computação - UFCG", (x_s, deslocamento_superior), fonte, h3, sombra, False, True) self.tela_de_mensagens(u"2017.2, Ciência da Computação - UFCG", (x, deslocamento_superior), fonte, h3, cor_da_fonte, False, True) deslocamento_lateral -= 7 deslocamento_lateral_s -= 7 deslocamento_superior += 162 self.tela_de_mensagens("Ferramentas utilizadas", (deslocamento_lateral_s, deslocamento_superior), fonte, h5, sombra, True, False) self.tela_de_mensagens("Ferramentas utilizadas", (deslocamento_lateral, deslocamento_superior), fonte, h5, (0, 174, 136), True, False) deslocamento_lateral += 15 deslocamento_lateral_s += 15 deslocamento_superior += 20 self.tela_de_mensagens("Python 2.7.x (https://www.python.org/)", (deslocamento_lateral_s, deslocamento_superior), fonte, h5, sombra, False, False) self.tela_de_mensagens("Python 2.7.x (https://www.python.org/)", (deslocamento_lateral, deslocamento_superior), fonte, h5, cor_da_fonte, False, False) deslocamento_superior += 15 self.tela_de_mensagens("Pygame (http://www.pygame.org/)", (deslocamento_lateral_s, deslocamento_superior), fonte, h5, sombra, False, False) self.tela_de_mensagens("Pygame (http://www.pygame.org/)", (deslocamento_lateral, deslocamento_superior), fonte, h5, cor_da_fonte, False, False) self.tela_de_mensagens("Pressione 'ESC' para retornar ao menu", (x_s, y), fonte, h4, sombra, False) self.tela_de_mensagens("Pressione 'ESC' para retornar ao menu", (x, y), fonte, h4, (150, 150, 154), False) pygame.display.flip() # permanência def loop(self): while True: self.clock.tick(30) for evento in pygame.event.get(): if evento.type == pygame.QUIT: sys.exit(0) elif evento.type == KEYDOWN and ( self.escolha == exibir_historia or self.escolha == jogar or self.escolha == manual or self.escolha == FIM or self.escolha == exibir_creditos) and evento.key == K_ESCAPE: self.escolha = exibir_menu self.exibir_menu() if self.escolha == exibir_menu: left_click, middle_click, right_click = pygame.mouse.get_pressed( ) if left_click: for key in self.opcoes: opt = self.opcoes[key] aparencia, rect = opt if rect.collidepoint(pygame.mouse.get_pos()): if key == historia: self.historia() self.escolha = exibir_historia elif key == comecar: self.iniciar_partida() self.escolha = jogar elif key == ajuda: self.exibir_ajuda() self.escolha = manual if key == creditos: self.creditos() self.escolha = exibir_creditos elif key == sair: sys.exit(0) # elif key == FIM: # self.escolha = FIM # self.vencedor("escuras", u"peças") # continue elif self.escolha == jogar: jogador_atual = self.jogo_de_damas.jogador_atual jogo_de_damas = self.jogo_de_damas tabuleiro = jogo_de_damas.tabuleiro pecas_e = len(jogo_de_damas.obter_pecas(escuras)) pecas_c = len(jogo_de_damas.obter_pecas(claras)) movimento_disponivel_e = len( jogo_de_damas.obter_celulas_disponiveis(escuras)) movimento_disponivel_c = len( jogo_de_damas.obter_celulas_disponiveis(claras)) reta_final = False if pecas_c <= 2 and pecas_e <= 2 and jogo_de_damas.procura_damas( tabuleiro): if not reta_final: total_de_movimentos_no_momento = jogo_de_damas.movimentos_das_claras + jogo_de_damas.movimentos_das_escuras reta_final = True continue elif (jogo_de_damas.movimentos_das_claras + jogo_de_damas.movimentos_das_escuras ) - total_de_movimentos_no_momento == 5: self.escolha = FIM self.empate(pecas_c, pecas_e) continue elif pecas_c <= 0: self.escolha = FIM self.vencedor("escuras", u"peças") continue elif pecas_e <= 0: self.escolha = FIM self.vencedor("claras", u"peças") continue elif jogo_de_damas.jogador_atual == claras and movimento_disponivel_c <= 0: self.escolha = FIM self.vencedor("escuras", "jogadas") continue elif jogo_de_damas.jogador_atual == escuras and movimento_disponivel_e <= 0: self.escolha = FIM self.vencedor("claras", "jogadas") continue left_click = pygame.mouse.get_pressed() if left_click: pos = pygame.mouse.get_pos() jogo_de_damas = self.jogo_de_damas tabuleiro = self.jogo_de_damas.tabuleiro for l in range(len(tabuleiro)): for c in range(len(tabuleiro[l])): celula = tabuleiro[l][c] if celula.rect.collidepoint(pos): if celula.tem_peca(): movimento_disponivel_c = len( jogo_de_damas. obter_celulas_disponiveis()) jogo_de_damas.celula_selecionada(celula) elif not celula.tem_peca( ) and jogo_de_damas.selecionada: if jogo_de_damas.pode_mover( jogo_de_damas.selecionada, celula): jogo_de_damas.movimento(celula) break self.renderizar(self.tela) elif self.escolha == FIM: left_click, middle_click, right_click = pygame.mouse.get_pressed( ) if left_click: for key in self.opcoes: opt = self.opcoes[key] aparencia, rect = opt if rect.collidepoint(pygame.mouse.get_pos()): if key == jogar_novamente: self.iniciar_partida() self.escolha = jogar # renderização (renderiza o jogo a cada iteração do game.loop) def renderizar(self, tela): inicar = pygame.display.set_mode(self.tamanho_tela) tela = self.tela fundo = pygame.image.load("imagens/superior.png") tela.blit(fundo, (0, 0)) largura, altura = self.tamanho_tela jogador_atual = self.jogo_de_damas.jogador_atual jogo_de_damas = self.jogo_de_damas srt_jogador = '>' if jogador_atual == escuras else '<' color = (229, 247, 243) fonte = "purisa" lateral_esquerda = pygame.Surface([ deslocamento_coluna * tamanho_casas, altura - (2 * tamanho_casas * deslocamento_linha) ]) fundo = pygame.image.load("imagens/atreyu.png") lateral_esquerda.blit(fundo, (0, 0)) self.tela.blit(lateral_esquerda, (0, tamanho_casas * deslocamento_linha)) lateral_direita = pygame.Surface([ deslocamento_coluna * tamanho_casas, altura - (2 * tamanho_casas * deslocamento_linha) ]) fundo = pygame.image.load("imagens/neytiri.png") lateral_direita.blit(fundo, (0, 0)) self.tela.blit(lateral_direita, (largura - deslocamento_coluna * tamanho_casas, tamanho_casas * deslocamento_linha)) self.tela_de_mensagens("Atreyu %s Neytiri" % srt_jogador, (largura / 2.01, 30), fonte, 25, (0, 0, 0), True) self.tela_de_mensagens("Atreyu %s Neytiri" % srt_jogador, (largura / 2, 30), fonte, 25, color, True) self.tela_de_mensagens("Atreyu (claras)", (10, (altura / 2) - tamanho_casas / 2), fonte, 15, color, True, False) self.tela_de_mensagens( u"Peças em jogo: %d" % len(jogo_de_damas.obter_pecas(claras)), (25, altura / 2), fonte, 10, color, True, False) self.tela_de_mensagens( "Jogadas: %d" % jogo_de_damas.movimentos_das_claras, (25, (altura / 2) + 20), fonte, 10, color, True, False) self.tela_de_mensagens("Neytiri (escuras)", (tamanho_casas * 11 + 10, (altura / 2) - tamanho_casas / 2), fonte, 15, color, True, False) self.tela_de_mensagens( u"Peças em jogo: %d" % len(jogo_de_damas.obter_pecas(escuras)), (tamanho_casas * 11 + 25, altura / 2), fonte, 10, color, True, False) self.tela_de_mensagens( "Jogadas: %d" % jogo_de_damas.movimentos_das_escuras, (tamanho_casas * 11 + 25, (altura / 2) + 20), fonte, 10, color, True, False) self.jogo_de_damas.renderizar() pygame.display.flip() # apresenta a tela informando qual jogador foi o vencedor da partida def vencedor(self, vencedor, motivo): tela = self.tela inicar = pygame.display.set_mode(self.tamanho_tela) fundo = pygame.image.load("imagens/vencedor.png") tela.blit(fundo, (0, -50)) largura, altura = self.tamanho_tela x, x_s, y = largura / 2 + 5, largura / 2.001 + 5, altura - 30 h1, h2, h3, h4, h5 = 35, 30, 20, 12, 9 deslocamento_superior = 230 fonte = "purisa" sombra, cor_da_fonte = (0, 0, 0), (53, 145, 148) if vencedor == "claras" else (164, 10, 105) alien = "Atreyu" if vencedor == "claras" else "Neytiri" oponente = "Neytiri" if vencedor == "claras" else "Atreyu" self.tela_de_mensagens("Fim de jogo", (x_s, deslocamento_superior), fonte, h1, sombra, True) self.tela_de_mensagens("Fim de jogo", (x, deslocamento_superior), fonte, h1, cor_da_fonte, True) deslocamento_superior += 45 self.tela_de_mensagens("%s venceu!" % alien, (x_s, deslocamento_superior), fonte, h3, sombra, True) self.tela_de_mensagens("%s venceu!" % alien, (x, deslocamento_superior), fonte, h3, cor_da_fonte, True) deslocamento_superior += 30 self.tela_de_mensagens(u"%s não possui mais %s!" % (oponente, motivo), (x_s, deslocamento_superior), fonte, h3, sombra, True) self.tela_de_mensagens(u"%s não possui mais %s!" % (oponente, motivo), (x, deslocamento_superior), fonte, h3, cor_da_fonte, True) deslocamento_superior += 40 msg = self.tela_de_mensagens("Clique aqui para Jogar Novamente", (x_s, deslocamento_superior), fonte, h4, cor_da_fonte, True) self.opcoes[jogar_novamente] = msg self.tela_de_mensagens("Pressione 'ESC' para retornar ao menu", (x_s, y), fonte, h5, sombra, True) pygame.display.flip() # apresenta a tela informando qual jogador foi o vencedor da partida def empate(self, qnt_c, qnt_e): tela = self.tela inicar = pygame.display.set_mode(self.tamanho_tela) fundo = pygame.image.load("imagens/vencedor.png") tela.blit(fundo, (0, -50)) largura, altura = self.tamanho_tela x, x_s, y = largura / 2 + 5, largura / 2.001 + 5, altura - 30 h1, h2, h3, h4, h5 = 35, 30, 20, 12, 9 deslocamento_superior = 230 fonte = "purisa" sombra, cor_da_fonte = (0, 0, 0), (0, 44, 50) self.tela_de_mensagens("Empate!", (x_s, deslocamento_superior), fonte, h1, sombra, True) self.tela_de_mensagens("Empate!", (x, deslocamento_superior), fonte, h1, cor_da_fonte, True) deslocamento_superior += 45 self.tela_de_mensagens(u"Atreyu possui %i peças!" % qnt_c, (x_s, deslocamento_superior), fonte, h3, sombra, True) self.tela_de_mensagens(u"Atreyu possui %i peças!" % qnt_c, (x, deslocamento_superior), fonte, h3, cor_da_fonte, True) deslocamento_superior += 30 self.tela_de_mensagens(u"Neytiri possui %i peças!" % qnt_e, (x_s, deslocamento_superior), fonte, h3, sombra, True) self.tela_de_mensagens(u"Neytiri possui %i peças!" % qnt_e, (x, deslocamento_superior), fonte, h3, cor_da_fonte, True) deslocamento_superior += 40 msg = self.tela_de_mensagens("Clique aqui para Jogar Novamente", (x_s, deslocamento_superior), fonte, h4, cor_da_fonte, True) self.opcoes[jogar_novamente] = msg self.tela_de_mensagens("Pressione 'ESC' para retornar ao menu", (x_s, y), fonte, h5, sombra, True) pygame.display.flip()
def test_generatePossibleMoves_rightMovesFor1BlackPieceOnSecondTurn(self): black = Pieces.Black() board = {1: black} self.assertEqual(Checkers.generatePossibleMoves(board, 2), [])
test_model_name = "64c_32c_1000r" model = tf.keras.models.Sequential([ keras.layers.Conv2D(64, kernel_size=(2, 2), strides=(1, 1), activation='relu', input_shape=(8,4,1)), keras.layers.Conv2D(32, kernel_size=(2, 2), strides=(1, 1), activation='relu'), keras.layers.Flatten(), keras.layers.Dense(1024, activation='relu'), keras.layers.Dense(128, activation=tf.nn.softmax) ]) checkpoint_path = "policy_network_checkpoints/" + test_model_name + ".ckpt" checkpoint_dir = os.path.dirname(checkpoint_path) latest = tf.train.latest_checkpoint(checkpoint_dir) model.load_weights(latest) board = Checkers.Board() player_1 = board.get_black_piece() player_2 = board.get_white_piece() names = {player_1 : "black", player_2 : "white", 0 : "draw"} def play_nn_turn(board, player): move_guess = model.predict(np.array([board.get_cnn_input(player)]))[0] move_guess = board.clean_nn_guess(move_guess, player) move_guess = np.argmax(move_guess) move = board.parse_nn_output(move_guess, player, True) move_valid = move[0] == 1 move_coords = move[1] if not move_valid: print("Invalid move by player: ", player, ": ", move_coords)
# labratory import Checkers cell = (2, 2) pieceType = Checkers.PIECE_RED print(cell) # print(Checkers.possible_moves(Checkers.GlobalBoard,cell)) print("left:", Checkers.toLeft(cell)) print("right:", Checkers.toRight(cell)) print("front:", Checkers.toFront(cell)) print("back:", Checkers.toBack(cell)) print("leftback", Checkers.toLeft(Checkers.toBack(cell, pieceType), pieceType)) print("leftback x 2", Checkers.toLeft(Checkers.toBack(cell, pieceType, 2), pieceType, 2)) print("rightback", Checkers.toRight(Checkers.toBack(cell, pieceType), pieceType)) print("rightback x 2", Checkers.toRight(Checkers.toBack(cell, pieceType, 2), pieceType, 2)) print("rightfront", Checkers.toRight(Checkers.toFront(cell, pieceType), pieceType)) print("rightfront x 2", Checkers.toRight(Checkers.toFront(cell, pieceType, 2), pieceType, 2)) print("leftfront", Checkers.toLeft(Checkers.toFront(cell, pieceType), pieceType)) print("leftfront x 2", Checkers.toLeft(Checkers.toFront(cell, pieceType, 2), pieceType, 2))