簡體   English   中英

Python連接四,不能使用庫

[英]Python connect four, cannot use libraries

我想在 python 3.7 中連接四個,但我們很快就卡住了,我們真的很新,所以這就是原因。 我們基本上希望將玩家 1 和 2 的 1 和 2 放在下面的網格中,但是當我們在同一列中輸入玩家 1 和 2 時,它不起作用。 我很想有人幫助我們,因為我們已經堅持了很長時間,在此先感謝! 附: 我們不想使用任何插件或添加到 python 中,只是常規的 if、def、while 等語句。

ROW_COUNT = 6
COLUMN_COUNT = 7

row6 = [0, 0, 0, 0, 0, 0, 0]
row5 = [0, 0, 0, 0, 0, 0, 0]
row4 = [0, 0, 0, 0, 0, 0, 0]
row3 = [0, 0, 0, 0, 0, 0, 0]
row2 = [0, 0, 0, 0, 0, 0, 0]
row1 = [0, 0, 0, 0, 0, 0, 0]
Board=[row6, row5, row4, row3, row2, row1]

def drop_piece(Board, row, Column, piece):
    Board[row][Column] = piece

def is_valid_location(Board, Column):
    return Board[0][Column] ==0

def get_next_open_row(Board, Column):
    for r in range(ROW_COUNT):
        if Board[r][Column]==0:
            return r

gameOver = False
turn = 0
while not gameOver:
    if turn == 0:
        Column = int(input("Player 1, Make your turn(0-6):"))
        if is_valid_location(Board ,Column):
            row = get_next_open_row(Board, Column)
            drop_piece(Board, row, Column, 1)
            turn = turn + 1
    else:
        Column = int(input("Player 2, Make your turn(0-6):"))
        if is_valid_location(Board, Column):
            row = get_next_open_row(Board, Column)
            drop_piece(Board, row, Column, 2)
        turn = turn - 1

    print(row1)
    print(row2)
    print(row3)
    print(row4)
    print(row5)
    print(row6)

這應該會讓你重新開始,仍然需要編寫gameOver部分。

一個問題是您將顯示定義為:

row6 = [0, 0, 0, 0, 0, 0, 0]
row5 = [0, 0, 0, 0, 0, 0, 0]
row4 = [0, 0, 0, 0, 0, 0, 0]
row3 = [0, 0, 0, 0, 0, 0, 0]
row2 = [0, 0, 0, 0, 0, 0, 0]
row1 = [0, 0, 0, 0, 0, 0, 0]
Board=[row6, row5, row4, row3, row2, row1]

但是,打印輸出

print(row1) #Prints First
print(row2)
print(row3)
print(row4)
print(row5)
print(row6) #Prints Last

使其在屏幕上顯示為:

row1 = [0, 0, 0, 0, 0, 0, 0]
row2 = [0, 0, 0, 0, 0, 0, 0]
row3 = [0, 0, 0, 0, 0, 0, 0]
row4 = [0, 0, 0, 0, 0, 0, 0]
row5 = [0, 0, 0, 0, 0, 0, 0]
row6 = [0, 0, 0, 0, 0, 0, 0]

另一個是你的切換很容易壞:

if turn == 0:
    if is_valid_location(Board ,Column):
        turn = turn + 1
else:
    turn = turn - 1

這意味着 turn 可以增加的唯一方法是如果turn為 0 並且Column是有效位置,否則它將繼續是玩家 2 的回合並繼續遞減。

這是我的代碼,現在顯示是基於計數變量中設置的行和列動態進行的,切換是基於布爾值的,並且只切換播放器,為用戶選擇添加驗證,並且打印是在一個環形:

ROW_COUNT = 6
COLUMN_COUNT = 7

Board = [] # Define the Board list
# Appends a list of 0s COLUMN_COUNT long, to the Board list, ROW_COUNT amount of times.
for x in range(ROW_COUNT): Board.append(list([0] * COLUMN_COUNT))

def drop_piece(Board, row, Column, piece):
    Board[row][Column] = piece

def is_valid_location(Board, Column):
    # Checks that the top row for the selected column is 0
    return Board[-1][Column] == 0

def get_next_open_row(Board, Column):
    for r in range(ROW_COUNT):
        if Board[r][Column]==0:
            return r

gameOver = False

turn = True

while not gameOver:
    # Boolean toggle True = player 1, False = player 2
    if turn: player = 1
    else: player = 2
    Column = int(input("Player " + str(player) +", Make your turn(0-6):"))
    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")

    # prints the reversed Board, since printing needs to be last printed first
    for row in reversed(Board):
        print(row)

暫無
暫無

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

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