Python:Connect 4

Python:Connect 4,python,Python,我需要询问用户想要多少行和多少列,这样我的游戏就可以处理任何大小的棋盘,但我不知道如何更改代码。这是我的connect 4代码,适用于6x7板 import random def winner(board): """This function accepts the Connect 4 board as a parameter. If there is no winner, the function will return the empty string "". If

我需要询问用户想要多少行和多少列,这样我的游戏就可以处理任何大小的棋盘,但我不知道如何更改代码。这是我的connect 4代码,适用于6x7板

import random

def winner(board):
    """This function accepts the Connect 4 board as a parameter.
    If there is no winner, the function will return the empty string "".
    If the user has won, it will return 'X', and if the computer has
    won it will return 'O'."""

    # Check rows for winner
    for row in range(6):
        for col in range(3):
            if (board[row][col] == board[row][col + 1] == board[row][col + 2] ==\
                board[row][col + 3]) and (board[row][col] != " "):
                return board[row][col]

    # Check columns for winner
    for col in range(6):
        for row in range(3):
            if (board[row][col] == board[row + 1][col] == board[row + 2][col] ==\
                board[row + 3][col]) and (board[row][col] != " "):
                return board[row][col]

    # Check diagonal (top-left to bottom-right) for winner

    for row in range(3):
        for col in range(4):
            if (board[row][col] == board[row + 1][col + 1] == board[row + 2][col + 2] ==\
                board[row + 3][col + 3]) and (board[row][col] != " "):
                return board[row][col]


    # Check diagonal (bottom-left to top-right) for winner

    for row in range(5, 2, -1):
        for col in range(3):
            if (board[row][col] == board[row - 1][col + 1] == board[row - 2][col + 2] ==\
                board[row - 3][col + 3]) and (board[row][col] != " "):
                return board[row][col]

    # No winner: return the empty string
    return ""

def display_board(board):

    print "   1   2   3   4    5   6   7"
    print "1: " + board[0][0] + " | " + board[0][1] + " | " + board[0][2] + " | " + board[0][3] + " | " + board[0][4] + " | " + board[0][5] + " | " + board[0][6] + " | " + board[0][7]
    print "  ---+---+---+---+---+---+---"
    print "2: " + board[1][0] + " | " + board[1][1] + " | " + board[1][2] + " | " + board[1][3] + " | " + board[1][4] + " | " + board[1][5] + " | " + board [1][6] + " | " + board [1][7]
    print "  ---+---+---+---+---+---+---+"
    print "3: " + board[2][0] + " | " + board[2][1] + " | " + board[2][2] + " | " + board[2][3] + " | " + board [2][4] + " | " + board [2][5] + " | " + board [2][6] + " | " + board [2][7]
    print "  ---+---+---+---+---+---+---+"
    print "4: " + board[3][0] + " | " + board[3][1] + " | " + board[3][2] + " | " + board[3][3] + " | " + board [3][4] + " | " + board [3][5] + " | " + board [3][6] + " | " + board [3][7]
    print "  ---+---+---+---+---+---+---+"
    print "5: " + board[4][0] + " | " + board[4][1] + " | " + board[4][2] + " | " + board[4][3] + " | " + board [4][4] + " | " + board [4][5] + " | " + board [4][6] + " | " + board [4][7]
    print "  ---+---+---+---+---+---+---+"
    print "6: " + board[5][0] + " | " + board[5][1] + " | " + board[5][2] + " | " + board[5][3] + " | " + board [5][4] + " | " + board [5][5] + " | " + board [5][6] + " | " + board [5][7]
    print

def make_user_move(board):

    try:
        valid_move = False
        while not valid_move:
            col = input("What col would you like to move to (1-7):")
            for row in range (6,0,-1):
                if (1 <= row <= 6) and (1 <= col <= 7) and (board[row-1][col-1] == " "):
                    board[row-1][col-1] = 'X'
                    valid_move = True
                    break
            else:
                print "Sorry, invalid square. Please try again!\n"

    except NameError:
        print "Only numbers are allowed."

    except IndexError:
        print "You can only select columns from (1-7), and rows from (1-6)."

def make_computer_move(board):
    # Code needed here...
    valid_move = False
    while not valid_move:
        row = random.randint(0,5)
        col = random.randint(0, 6)
        for row in range (5,0,-1):
            if board[row][col] == " ":
                board[row][col] = "O"
                valid_move = True
                break

def main():
    free_cells = 42
    users_turn = True
    count = 1
    ttt_board = [ [ " ", " ", " ", " ", " ", " "," ", " "], [ " ", " ", " ", " ", " "," ", " ", " "], [ " ", " ", " ", " ", " ", " ", " ", " "], [ " ", " ", " ", " ", " ", " ", " ", " "], [ " ", " ", " ", " ", " ", " ", " ", " "], [ " ", " ", " ", " ", " ", " ", " ", " "] ]

    print "\nHALL OF FAME \n"

    try:
        hall_of_fame = open("HallOfFame.txt", 'r')

        for name in hall_of_fame:
            print str(count) + ".", name
            print
            count += 1

        hall_of_fame.close()

    except IOError:
        print "No Human Has Ever Beat Me.. mwah-ha-ha-ha!\n"

    choice = raw_input("Would you like to go first? (y or n): ")

    if (choice == 'y' or choice=='Y'):
        users_turn = True


    elif (choice == 'n' or choice =='N') :
        users_turn = False

    else:
        print 'invalid input'

    while not winner(ttt_board) and (free_cells > 0):
        display_board(ttt_board)
        if users_turn:
            make_user_move(ttt_board)
            users_turn = not users_turn
        else:
            make_computer_move(ttt_board)
            users_turn = not users_turn
        free_cells -= 1

    display_board(ttt_board)
    if (winner(ttt_board) == 'X'):
        print "You Won!"
        print "Your name will now be added to the Hall of Fame!"

        hall_of_fame = open("HallOfFame.txt", 'a')
        name = raw_input("Enter your name: ")
        hall_of_fame.write(name+ '\n')
        print "Your name has been added to the Hall of Fame!"

        hall_of_fame.close()

        print "\nGAME OVER"
    elif (winner(ttt_board) == 'O'):
        print "The Computer Won!"
        print "\nGAME OVER"
    else:
        print "Stalemate!"
        print "\nGAME OVER \n"

#start the game

main()
随机导入
def优胜者(董事会):
“”“此函数接受Connect 4板作为参数。
如果没有赢家,函数将返回空字符串“”。
如果用户赢了,它将返回“X”,如果计算机赢了
赢得它将返回“O”
#检查行中是否有赢家
对于范围(6)中的行:
对于范围(3)中的列:
如果(板[行][col]==板[行][col+1]==板[行][col+2]==\
板[行][col+3])和(板[行][col]!=“”):
返回板[行][列]
#检查各栏是否有赢家
对于范围(6)中的列:
对于范围(3)中的行:
如果(线路板[行][col]==线路板[行+1][col]==线路板[行+2][col]==\
板[row+3][col])和(板[row][col]!=“”):
返回板[行][列]
#检查对角线(从左上到右下)是否为赢家
对于范围(3)中的行:
对于范围(4)中的列:
如果(线路板[行][col]==线路板[行+1][col+1]==线路板[行+2][col+2]==\
板[row+3][col+3])和(板[row][col]!=“”):
返回板[行][列]
#检查对角线(从左下到右上)是否为赢家
对于范围(5,2,-1)中的行:
对于范围(3)中的列:
如果(板[行][col]==板[行-1][col+1]==板[行-2][col+2]==\
董事会[第3行][col+3])和(董事会[第3行][col]!=“”):
返回板[行][列]
#无赢家:返回空字符串
返回“”
def显示板(板):
打印“1234567”
打印“1:“+board[0][0]+“|”+board[0][1]+“|”+board[0][2]+“|”+board[0][3]+“|”+board[0][4]+“|”+board[0][5]+“|”+board[0][6]+“|”+board[0][7]
打印“--+--+--+--+--+--+--+--+--+--”
打印“2:“+board[1][0]+“|”+board[1][1]+“|”+board[1][2]+“|”+board[1][3]+“|”+board[1][4]+“|”+board[1][5]+“|”+board[1][6]+“|”+board[1][7]
打印“--+--+--+--+--+--+--+--+--+--+--+”
打印“3:“+board[2][0]+“|”+board[2][1]+“|”+board[2][2]+“|”+board[2][3]+“|”+board[2][4]+“|”+board[2][5]+“|”+board[2][6]+“|”+board[2][7]
打印“--+--+--+--+--+--+--+--+--+--+--+”
打印“4:“+board[3][0]+“|”+board[3][1]+“|”+board[3][2]+“|”+board[3][3]+“|”+board[3][4]+“|”+board[3][5]+“|”+board[3][6]+“|”+board[3][7]
打印“--+--+--+--+--+--+--+--+--+--+--+”
打印“5:“+board[4][0]+“|”+board[4][1]+“|”+board[4][2]+“|”+board[4][3]+“|”+board[4][4]+“|”+board[4][5]+“|”+board[4][6]+“|”+board[4][7]
打印“--+--+--+--+--+--+--+--+--+--+--+”
打印“6:“+board[5][0]+“|”+board[5][1]+“|”+board[5][2]+“|”+board[5][3]+“|”+board[5][5]+“|”+board[5][6]+“|”+board[5][7]
打印
def使用户移动(板):
尝试:
有效移动=错误
如果移动无效,请执行以下操作:
col=输入(“您希望移动到哪个col(1-7):”)
对于范围(6,0,-1)中的行:
如果(1)导入系统
如果sys.hexversion<0x3000000:
inp=原始输入
其他:
inp=输入
def get_int(提示):
尽管如此:
尝试:
返回整数(输入(提示))
除值错误外:
通过
高度=获取整数('有多少行?'))
宽度=get_int('有多少列?'))

现在,您可以在棋盘范围内替换这些常量来调整棋盘大小。

对于那些仍然在这个问题上结结巴巴并寻求解决方案的人,这里有一个我几年前写的Connect Four游戏:–它的工作方式与OP的工作方式不同(这就是为什么这是一个评论,而不是答案),但可以正确处理任意大小的电路板。
import sys

if sys.hexversion < 0x3000000:
    inp = raw_input
else:
    inp = input

def get_int(prompt):
    while True:
        try:
            return int(inp(prompt))
        except ValueError:
            pass

HEIGHT = get_int('How many rows? ')
WIDTH  = get_int('How many columns? ')