Python 尝试使用文本库创建connect 4游戏,然后稍后实现GUI 课程板: 定义初始化(self,N): “对于Connect-N游戏,棋盘将有N+2列和N+3行” self.num_行=N+3 self.num\u col=N+2 self.cols=[范围内i的列(self.num\u行)(self.num\u col)] self.row=[范围内i的列(self.num\u列)] 通过 #返回 def显示(自): ''显示板'' 打印('\u26AA'\u26AB') #对于范围(3)内的rown: #对于范围(2)中的列: #btn=tk.按钮(宽度为'5',高度为'2',文本为'') #btn.bind(“,单击时) #网格(行=行,列=列) def放置盘(自身,c): ''在c列放置磁盘'' 通过 def检查情况(自身): ''检查是否有赢家'' 返回真值 类别栏: 定义初始化(self,r): ''每列有r行'' self.rows=[0]*r N=4#标准连接-4 线路板=线路板(N) board.display()

Python 尝试使用文本库创建connect 4游戏,然后稍后实现GUI 课程板: 定义初始化(self,N): “对于Connect-N游戏,棋盘将有N+2列和N+3行” self.num_行=N+3 self.num\u col=N+2 self.cols=[范围内i的列(self.num\u行)(self.num\u col)] self.row=[范围内i的列(self.num\u列)] 通过 #返回 def显示(自): ''显示板'' 打印('\u26AA'\u26AB') #对于范围(3)内的rown: #对于范围(2)中的列: #btn=tk.按钮(宽度为'5',高度为'2',文本为'') #btn.bind(“,单击时) #网格(行=行,列=列) def放置盘(自身,c): ''在c列放置磁盘'' 通过 def检查情况(自身): ''检查是否有赢家'' 返回真值 类别栏: 定义初始化(self,r): ''每列有r行'' self.rows=[0]*r N=4#标准连接-4 线路板=线路板(N) board.display(),python,list,class,tkinter,Python,List,Class,Tkinter,我正在尝试创建一个connect-4游戏,但不确定如何实现。我有一些大纲,但不知道如何创建它。我正在尝试创建一个包含2列和3行的板。 图像是我想要的样子,但它没有工作 您可以使用\uuuu str\uuuu方法打印电路板: 一旦游戏按您需要的方式运行,您就可以轻松地在一组单独的文件中构建一个GUI,其中包含tkinter 在下面的示例中,我使用列表的列表来表示电路板。我更改了设置以表示connect-4的传统6行7列 class Board: def __init__(self,

我正在尝试创建一个connect-4游戏,但不确定如何实现。我有一些大纲,但不知道如何创建它。我正在尝试创建一个包含2列和3行的板。 图像是我想要的样子,但它没有工作


您可以使用
\uuuu str\uuuu
方法打印电路板:
一旦游戏按您需要的方式运行,您就可以轻松地在一组单独的文件中构建一个GUI,其中包含
tkinter

在下面的示例中,我使用列表的
列表来表示电路板。我更改了设置以表示connect-4的传统6行7列

class Board:    
    def __init__(self, N):
        '''Board for a Connect-N game, the board will have N+2 Col and N+3 Rows'''
        self.num_row = N + 3
        self.num_col = N + 2        
        self.cols = [Column(self.num_row) for i in range(self.num_col)]
        self.row = [Column(self.num_col) for i in range(self.num_row)]
        pass
        #return
    
    def display(self):
        '''display the board'''
        
        
        
        print ('\u26AA' '\u26AB')         
        #for rown in range(3):
        #    for col in range(2):
        #        btn = tk.Button(width = '5',height = '2', text = '')
        #        btn.bind("<Button-1>", on_btn_click)
        #        btn.grid(row = rown, column = col )
    
    def drop_disk(self, c):
        '''drop a disk at column c'''
        pass

    def check_winning_condition(self):
        '''check if there is a winner'''
        return True
    
class Column:
    def __init__(self, r):
        '''each column has r rows'''
        self.rows = [0]*r
    
N = 4 #standard Connect-4
board = Board(N)
board.display()
输出:

class Board:    
    def __init__(self, N):
        '''Board for a Connect-N game, the board will have N+2 Col and N+3 Rows'''
        self.num_row = N + 2
        self.num_col = N + 3        
        self.cells = [[None for _ in range(self.num_col)] for _ in range(self.num_row)]
    
    def __str__(self):
        res = []
        for row in self.cells:
            for cell in row:
                c = cell
                if cell is None:
                    c = '.'
                res.append(f'{c} ')
            res.append('\n')
        return ''.join(res)

    
    def drop_disk(self, c, player='X'):
        '''drop a disk at column c
        return True if successful
        '''
        for r, row in enumerate(self.cells):
            if row[c] is None:
                continue
            elif r == 0:
                break
            self.cells[r-1][c] = player
            return True
        else:   # this executes when there is `no break`
            self.cells[r][c] = player
            return True
        return False
        

    def check_winning_condition(self):
        '''check if there is a winner'''
        return True

N = 4 #standard Connect-4
board = Board(N)
print(board)
print(board.drop_disk(3, 'X'))
print(board)
print(board.drop_disk(3, 'O'))
print(board)
print(board.drop_disk(4, 'X'))
print(board)
print(board.drop_disk(5, 'O'))
print(board)
print(board.drop_disk(3, 'X'))
print(board)
print(board.drop_disk(3, 'O'))
print(board)
print(board.drop_disk(3, 'X'))
print(board)
print(board.drop_disk(3, 'O'))
print(board)
print(board.drop_disk(3, 'X'))
print(board)
print(board.drop_disk(3, 'O'))
print(board)
我还添加了
drop\u disk
方法来测试输出;如果成功播放光盘,该方法返回
True
,否则返回
False

. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
输出:

class Board:    
    def __init__(self, N):
        '''Board for a Connect-N game, the board will have N+2 Col and N+3 Rows'''
        self.num_row = N + 2
        self.num_col = N + 3        
        self.cells = [[None for _ in range(self.num_col)] for _ in range(self.num_row)]
    
    def __str__(self):
        res = []
        for row in self.cells:
            for cell in row:
                c = cell
                if cell is None:
                    c = '.'
                res.append(f'{c} ')
            res.append('\n')
        return ''.join(res)

    
    def drop_disk(self, c, player='X'):
        '''drop a disk at column c
        return True if successful
        '''
        for r, row in enumerate(self.cells):
            if row[c] is None:
                continue
            elif r == 0:
                break
            self.cells[r-1][c] = player
            return True
        else:   # this executes when there is `no break`
            self.cells[r][c] = player
            return True
        return False
        

    def check_winning_condition(self):
        '''check if there is a winner'''
        return True

N = 4 #standard Connect-4
board = Board(N)
print(board)
print(board.drop_disk(3, 'X'))
print(board)
print(board.drop_disk(3, 'O'))
print(board)
print(board.drop_disk(4, 'X'))
print(board)
print(board.drop_disk(5, 'O'))
print(board)
print(board.drop_disk(3, 'X'))
print(board)
print(board.drop_disk(3, 'O'))
print(board)
print(board.drop_disk(3, 'X'))
print(board)
print(board.drop_disk(3, 'O'))
print(board)
print(board.drop_disk(3, 'X'))
print(board)
print(board.drop_disk(3, 'O'))
print(board)

请提供预期的价格。显示中间结果与预期结果的偏差。我们应该能够将单个代码块粘贴到文件中,运行它,并重现您的问题。这也让我们可以在您的上下文中测试任何建议。“它不起作用”不是一个问题规范。您实际提出的问题“我不确定如何做”,超出了堆栈溢出的范围。您必须诚实地尝试解决方案,然后就您的实现提出具体问题。非常感谢您的时间和努力。我可以根据自己的喜好使用和更改代码吗?对于初学者来说,第一步应该是什么?我不知道如何将代码放入Tkinter。当绑定按钮时,它不工作。谢谢,非常欢迎@Sizzy。我的建议是首先在控制台中构建一个工作游戏(
print
语句和
input
);一旦游戏开始运行,就可以尝试构建gui。如果您的代码是模块化的,并且清楚地将输入/输出与游戏逻辑分开,那么就更容易了。当你陷入困境时,你可以问新问题,我或stack社区的人会很乐意帮助你。太好了,祝贺你。谢谢你,我确实创建了GUI,但它没有按照我想要的方式工作。我试图将文本库和Tkinter组合在一起,但它只是有一个问题。所以我创建了一个新的GUI。(下面是connect 4游戏)。非常感谢。