我一直在尝试为我的编程课编写连接四的变体。该板尺寸为6x8。在我尝试编程的变体中,获胜条件实质上是构建L。

这意味着表格的任何构造
X
X
X X
是获胜的条件。
我一直在尝试创建一个函数,该函数可以连续检查同一符号的每一列以建立一个对。还有一个对每一行都执行相同操作的函数。然后,使用这两个函数,我将检查2对是否连续,因为无论如何组合垂直对和水平对,它始终会构成一个“ L”。

为了使我使用的板清晰

def ClearBoardSingle():
    global Board
    Board = [['0' for i in range(8)] for i in range(6)]
    BoardPrint()
    PlayerMoveSingle()


对于我的界面,我正在使用

def BoardPrint():
    global Board
    global GameMoves
    global PlayerTurn
    global Player1Symbol
    global Player2Symbol
    print('\n\nMoves done: ' + str(GameMoves))
    print('To Restart: R | To Quit: Q')
    print('Valid choices: 1, 2, 3, 4, 5, 6, 7, 8')
    if PlayerTurn == 0:
        print('It\'s ' +str(Player1Symbol) + '\'s Turn')
    if PlayerTurn == 1:
        print('It\'s ' +str(Player2Symbol) + '\'s Turn')
    print(Board[0])
    print(Board[1])
    print(Board[2])
    print(Board[3])
    print(Board[4])
    print(Board[5])


我已经想出了如何在开发板内部更改变量,并且我已经完成了很多工作。我唯一不知道如何实施的是获胜条件。我为行尝试了此功能:

def VerticalList(Column):
    global Board
    global Choice
    global Row0
    Column = int(Column)
    Choice = int(Choice)
    print(Column,' C')
    while Column > 0:
        for Board[Column][Choice] in range(Column):
            Row0.append(Board[Column][Choice])
            if Column ==6 or Column == -1:
                break
            else:
                VerticalList(Column-1)
        if Column ==0:
            break
        else:
            continue
    if Column == 0:
        Column += 1
        while Column < 5:
            Column +=1
            if Row0[Column] == Row0[Column-1]:
                print('Pair')
            else:
                print('No Pair')
                pass
    else:
        pass


但是它进入了一个无尽的循环。
我对如何实施获胜条件一无所知。我将不胜感激任何帮助或想法。如果要我发布整个代码或其他类型的代码段,请索取它们。

谢谢您的期待!

最佳答案

很酷的问题,下面看起来像很多代码,但实际上不是。我尚未对此进行全面检查,因此我不确定它没有找到误报,但似乎发现应该找到L。我做的主要事情是使用itertools.combinations来获取X的所有4个大小的位置组,然后检查它们是否看起来像我期望的L的模式。在check_four_group中,我查看行和列之间的差异。

from itertools import combinations
def disp_board(board):
    for row in board:
        print(row)

def check_winning(board):
    winning = False

    #Find all row,col positions of the X's
    x_poses = [(i,j) for i in range(6) for j in range(8) if board[i][j] == 'X']

    #Loop through every combination of four X's since it takes four to make the 'L'
    for group in combinations(x_poses,4):
        if(check_four_group(group)):
            winning = True
            break
    return winning

def check_four_group(group):
    rows,cols = zip(*[(r,c) for r,c in group])
    row_diffs = [rows[i+1]-rows[i] for i in range(len(rows)-1)]
    col_diffs = [cols[i+1]-cols[i] for i in range(len(cols)-1)]

    #Uncomment this to print the row and col diffs
    #print(row_diffs)
    #print(col_diffs)

    # Finds:
    #  X
    #  X
    #  X X
    if row_diffs == [1,1,0] and col_diffs == [0,0,1]:
        return True

    # Finds:
    #    X
    #    X
    #  X X
    elif row_diffs == [1,1,0] and col_diffs == [0,-1,1]:
        return True

    # Finds:
    #  X X
    #    X
    #    X
    elif row_diffs == [0,1,1] and col_diffs == [1,0,0]:
        return True

    # Finds:
    #  X X
    #  X
    #  X
    elif row_diffs == [0,1,1] and col_diffs == [1,-1,0]:
        return True

    # Otherwise it's not there at all (not thinking about horizontal L's but could add that)
    else:
        return False

#Test case 1
def test_case_1():
    board = [['0' for i in range(8)] for i in range(6)]
    board[2][1] = 'X'
    board[2][2] = 'X'
    board[3][1] = 'X'
    board[4][1] = 'X'
    return board

#Test case 2
def test_case_2():
    board = [['0' for i in range(8)] for i in range(6)]
    board[2][1] = 'X'
    board[2][0] = 'X'
    board[3][1] = 'X'
    board[4][1] = 'X'
    return board

#Test case 3
def test_case_3():
    board = [['0' for i in range(8)] for i in range(6)]
    board[1][0] = 'X'
    board[2][0] = 'X'
    board[3][0] = 'X'
    board[3][1] = 'X'
    return board

#Test case 4
def test_case_4():
    board = [['0' for i in range(8)] for i in range(6)]
    board[1][2] = 'X'
    board[2][2] = 'X'
    board[3][2] = 'X'
    board[3][1] = 'X'
    return board

##################
#Start of program#
##################
board = test_case_1()
#board = test_case_2()
#board = test_case_3()
#board = test_case_4()

disp_board(board)
if check_winning(board):
    print('Victory')
else:
    print('Keep playing')

关于python - Python:尝试编写连接四的变体:获胜条件不会停止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40665337/

10-09 22:24