簡體   English   中英

連接四場比賽(Python)的獲勝條件?

[英]Winning condition in Connect four game (Python)?

幾個星期以來,我一直在開發連接四人游戲(初級程序員),我幾乎完成了。 但我唯一的問題是我似乎無法讓獲勝條件發揮作用。 老實說,我不知道如何解決它,所以我希望這里的人能看到什么是錯的。 上半部分直到最后一條評論 (#) 工作正常,它打印板,在錯誤的輸入處給出錯誤消息,並將碎片放到你想要的地方。 唯一仍然不起作用的是獲勝條件。 我不能完成一場比賽,它會讓我連續達到 7 場,而不給出勝利條件。 我的代碼可以在下面找到!

ROW_COUNT = 6                               #CREEEREN VAN HET BORD
COLUMN_COUNT = 7

Board = []
for x in range(ROW_COUNT): Board.append(list([0] * COLUMN_COUNT))

def drop_piece(Board, row, Column, piece):  #PLAATSEN VAN EEN RONDJE
    Board[row][Column] = piece

def is_valid_location(Board, Column):       #CHECKEN OF DE PLEK OP HET BORD LEEG IS
    return Board[-1][Column] == 0

def get_next_open_row(Board, Column):       #CHECKEN OF DE ROW LEEG IS
    for r in range(ROW_COUNT):
        if Board[r][Column]==0:
            return r

gameOver = False
turn = True

while not gameOver:
    if turn: player = 1
    else: player = 2
    UserInput = input("Player " + str(player) + ", Make your turn(0-6):")
    if UserInput.isdigit():
        Column = int(UserInput)
    else:
        print("Your input has to be between 0 and 6!")
        UserInput = input("Player " + str(player) + ", Make your turn(0-6):")

    if Column != 0 and Column != 1 and Column != 2 and Column != 3 and Column != 4 and Column != 5 and Column != 6:
       print("Your input has to be between 0 and 6!")
       UserInput = input("Player " + str(player) + ", Make your turn(0-6):")
    else:
        if is_valid_location(Board, Column):
            row = get_next_open_row(Board, Column)
            drop_piece(Board, row, Column, player)
            turn = not turn
        else: print("Invalid selection")

        for row in reversed(Board):
            print(row)                  # EVERYTHING UNTIL HERE WORKS FINE!

#HORIZONTAAL
for C in range(COLUMN_COUNT - 3):
    for R in range(ROW_COUNT):
        if Board[R][C] == 1 and Board[R][C + 1] == 1 and Board[R][C + 2] == 1 and Board[R][C + 3] == 1:
            print("You've won")
#VERTICAAL
for C in range(COLUMN_COUNT):
    for R in range(ROW_COUNT - 3):
        if Board[R][C] == 1 and Board[R + 1][C] == 1 and Board[R + 2][C] == 1 and Board[R + 3][C] == 1:
            print("You've won")
#DIAGONAAL
for C in range(COLUMN_COUNT - 3):
    for R in range(ROW_COUNT - 3):
        if Board[R][C] == 1 and Board[R + 1][C + 1] == 1 and Board[R + 2][C + 2] == 1 and Board[R + 3][C + 3] == 1:
            print ("You've won")

根據您的縮進,在 while 循環結束之前甚至不會查看這些檢查。 縮進所有三個檢查,使它們在 while 循環中。 此外,您的檢查需要將gameOver設置為True以便游戲在您獲勝時真正結束。

只是提醒您:對於后對角線,您還需要一個獲勝條件。

這是我很久以前的解決方案,看看你能做出什么。

 for x in range(len(Board)):
        for y in range(len(Board[x])):
            for turn in ['r', 'b']:
                try:
                    # Sideways line checking
                    if Board[x][y] == turn and Board[x][y+1] == turn and Board[x][y+2] == turn and Board[x][y+3]: pass
                except:# In case of a RangeError, meaning it checks for Board off the edge of the board
                    pass
                else:
                    if Board[x][y] == turn and Board[x][y+1] == turn and Board[x][y+2] == turn and Board[x][y+3] == turn:
                        winner = turn
                        gamestate = "Win"
                try: # Diagonal-right check
                    if Board[x][y] == turn and Board[x+1][y+1] == turn and Board[x+2][y+2] == turn and Board[x+3][y+3]: pass
                except:
                    pass
                else:
                    if Board[x][y] == turn and Board[x+1][y+1] == turn and Board[x+2][y+2] == turn and Board[x+3][y+3] == turn:
                        winner = turn
                        gamestate = "Win"
                try: #Vertical Check
                    if Board[x][y] == turn and Board[x+1][y] == turn and Board[x+2][y] == turn and Board[x+3][y]: pass
                except:
                    pass
                else:
                    if Board[x][y] == turn and Board[x+1][y] == turn and Board[x+2][y] == turn and Board[x+3][y] == turn:
                        winner = turn
                        gamestate = "Win"
                try: # Diagonal-left check
                    if Board[x][y] == turn and Board[x-1][y+1] == turn and Board[x-2][y+2] == turn and Board[x-3][y+3]: pass
                except:
                    pass
                else:
                    if Board[x][y] == turn and Board[x-1][y+1] == turn and Board[x-2][y+2] == turn and Board[x-3][y+3] == turn:
                        winner = turn
                        gamestate = "Win"
    if 'e' not in Board[0] and gamestate != "Win": # Checks for Tie (if there is any emty spaces in the top row after checking for a win)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM