def num_lines_cleared(placement, board): tempBoard = copy.deepcopy(board) tetris.addToBoard(tempBoard, placement) comp_lines = 0 for y in range(tetris.BOARDHEIGHT): if tetris.isCompleteLine(tempBoard, y): comp_lines += 1 return comp_lines
def jogar(individuos, numeroDaGeracao, multVel, scoreMax=20000, jogoRapido=True): numInd = len(individuos) t.FPS = int(multVel) t.main(telaX=120 * ((numInd - 1) % 5) + 220, telaY=260 * ((numInd - 1) // 5 + 1), boxSize=10) board = [t.getBlankBoard() for i in range(len(individuos))] score = [0 for i in range(numInd)] # ??? deveria estar dentro de individuo ??? pecasJogadas = [0 for i in range(numInd)] linhasDestruidas = [[0, 0, 0, 0] for i in range(numInd)] #combos vivo = [True for i in range(numInd)] ganhou = [False for i in range(numInd)] nextPiece = t.getNewPiece() while vivo != [False] * numInd: #game loop ''' #process for event in pygame.event.get(): if event.type == pygame.QUIT: print ("Game exited by user") exit() ''' fallingPiece = nextPiece nextPiece = t.getNewPiece() #decide a melhor jogada baseado no que acha (pesos) for i in range(len(individuos)): if vivo[i]: individuos[i].calcularMelhorJogada(board[i], fallingPiece, True) if not t.isValidPosition(board[i], fallingPiece): #nao existe possiçao que caiba na tela vivo[i] = False else: pecasJogadas[i] += 1 score[i] += 1 t.addToBoard(board[i], fallingPiece) numLines = t.removeCompleteLines(board[i]) if (numLines == 1): score[i] += 40 linhasDestruidas[i][0] += 1 elif (numLines == 2): score[i] += 120 linhasDestruidas[i][1] += 1 elif (numLines == 3): score[i] += 300 linhasDestruidas[i][2] += 1 elif (numLines == 4): score[i] += 1200 linhasDestruidas[i][3] += 1 #condiçao de parada if score[i] > scoreMax: vivo[i] = False ganhou[i] = True #if not jogoRapido: desenharNaTela(board, score, 1, nextPiece, fallingPiece, numeroDaGeracao) # retorna [numero de pecas, linhas destruidas(combos de 1,2,3,4), score normal de tetris, ganhou] gameState = [[pecasJogadas[i], linhasDestruidas[i], score[i], ganhou[i]] for i in range(numInd)] return (gameState)
def jogar(individuo, multVel, scoreMax = 20000, jogoRapido = False): t.FPS = int(multVel) t.main() board = t.getBlankBoard() lastFallTime = time.time() score = 0 level, fallFreq = t.calculateLevelAndFallFreq(score) fallingPiece = t.getNewPiece() nextPiece = t.getNewPiece() individuo.calcularMelhorJogada(board, fallingPiece) pecasJogadas = 0 linhasDestruidas = [0,0,0,0] #combos vivo = True ganhou = False while vivo: #game loop #process for event in pygame.event.get(): if event.type == pygame.QUIT: print ("Game exited by user") exit() if fallingPiece == None: # nenhuma peca caindo, gera uma nova peca fallingPiece = nextPiece nextPiece = t.getNewPiece() #decide a melhor jogada baseado no que acha (pesos) individuo.calcularMelhorJogada(board, fallingPiece, jogoRapido) pecasJogadas +=1 score += 1 lastFallTime = time.time() # reseta lastFallTime if not t.isValidPosition(board, fallingPiece): #nao existe possiçao que caiba na tela vivo = False if jogoRapido or time.time() - lastFallTime > fallFreq: if not t.isValidPosition(board, fallingPiece, adjY=1): # A peca caiu, adiciona ela para o tabuleiro t.addToBoard(board, fallingPiece) numLines = t.removeCompleteLines(board) if(numLines == 1): score += 40 linhasDestruidas[0] += 1 elif (numLines == 2): score += 120 linhasDestruidas[1] += 1 elif (numLines == 3): score += 300 linhasDestruidas[2] += 1 elif (numLines == 4): score += 1200 linhasDestruidas[3] += 1 fallingPiece = None else: # A peca ainda esta caindo, move ela para baixo fallingPiece['y'] += 1 lastFallTime = time.time() if not jogoRapido: desenharNaTela(board,score,level,nextPiece, fallingPiece) #condiçao de parada if score > scoreMax: vivo = False ganhou = True # retorna [numero de pecas, linhas destruidas(combos de 1,2,3,4), score normal de tetris, ganhou] gameState = [pecasJogadas, linhasDestruidas ,score, ganhou] return(gameState)
def get_change_roughness(placement, board): tempBoard = copy.deepcopy(board) tetris.addToBoard(tempBoard, placement) return get_roughness(tempBoard) - get_roughness(board)
def change_num_overhangs(placement, board): tempBoard = copy.deepcopy(board) tetris.addToBoard(tempBoard, placement) return getNumOverhangs(tempBoard) - getNumOverhangs(board)
def change_num_enclosedSpaces(placement, board): tempBoard = copy.deepcopy(board) tetris.addToBoard(tempBoard, placement) return len(getEnclosedSpaces(tempBoard)) - len(getEnclosedSpaces(board))