首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试创建一个带有文本库的连接4游戏,然后在以后实现GUI。

尝试创建一个带有文本库的连接4游戏,然后在以后实现GUI。
EN

Stack Overflow用户
提问于 2020-11-07 08:52:43
回答 1查看 157关注 0票数 0
代码语言:javascript
复制
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()

我正在尝试创建一个连接-4游戏,但不确定如何做。我得到了一些大纲,但不知道如何创建它。我正在尝试创建一个2列3行的板。这张照片是我想要的样子,但没有用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-07 09:30:01

您可以使用__str__方法打印您的板:

一旦游戏按照您需要的方式工作,您可以轻松地在一个单独的文件集中构建一个带有tkinter的图形用户界面。

在下面的示例中,我使用list of lists来表示董事会。我更改了设置,以表示传统的连接-4的6行和7列。

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 

为了测试输出,我还添加了drop_disk方法;如果成功播放了磁盘,则返回True,否则返回False

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
True
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . X . . . 

True
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . O . . . 
. . . X . . . 

True
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . O . . . 
. . . X X . . 

True
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . O . . . 
. . . X X O . 

True
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . X . . . 
. . . O . . . 
. . . X X O . 

True
. . . . . . . 
. . . . . . . 
. . . O . . . 
. . . X . . . 
. . . O . . . 
. . . X X O . 

True
. . . . . . . 
. . . X . . . 
. . . O . . . 
. . . X . . . 
. . . O . . . 
. . . X X O . 

True
. . . O . . . 
. . . X . . . 
. . . O . . . 
. . . X . . . 
. . . O . . . 
. . . X X O . 

False
. . . O . . . 
. . . X . . . 
. . . O . . . 
. . . X . . . 
. . . O . . . 
. . . X X O . 

False
. . . O . . . 
. . . X . . . 
. . . O . . . 
. . . X . . . 
. . . O . . . 
. . . X X O .
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64725965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档