Python:连接 4

标签 python

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

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()

最佳答案

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? ')

您现在可以在板范围范围内替换这些常量来调整板尺寸。

关于Python:连接 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21641807/

相关文章:

python - numpy中结构化数组的元素明智总和

python - 计算列表从0到n-1的元素之和并与最大的比较

python - 列值数据帧之间的 Pandas 差异

python - 在 python 中使用 2 个参数下标

python - Q设置(): How to save to current working directory

python - 如何使用python中的fitz模块更改pdf中的突出显示颜色

python - 是否可以在 python 中迭代字典以在 html 电子邮件中使用

python - settingWithCopyWarning pandas 通过索引设置

python - 当只有一组时,Groupby apply 会进行不需要的转置

python - 如果值存在,如何让 jmespath 过滤器返回 true,如果不存在,则返回 false(python)