Exemplo n.º 1
0
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
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
def get_change_roughness(placement, board):
    tempBoard = copy.deepcopy(board)
    tetris.addToBoard(tempBoard, placement)
    return get_roughness(tempBoard) - get_roughness(board)
Exemplo n.º 5
0
def change_num_overhangs(placement, board):
    tempBoard = copy.deepcopy(board)
    tetris.addToBoard(tempBoard, placement)
    return getNumOverhangs(tempBoard) - getNumOverhangs(board)
Exemplo n.º 6
0
def change_num_enclosedSpaces(placement, board):
    tempBoard = copy.deepcopy(board)
    tetris.addToBoard(tempBoard, placement)
    return len(getEnclosedSpaces(tempBoard)) - len(getEnclosedSpaces(board))