首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Connect 4游戏

Python Connect 4游戏
EN

Stack Overflow用户
提问于 2015-12-03 09:01:14
回答 2查看 1.8K关注 0票数 0
代码语言:javascript
复制
COLUMNS = 5
ROWS = 4

def empty_board():
    board_rows =["|   \t\t  |"] * ROWS
    board_columns = [" ___ "] * COLUMNS
    for i in range (ROWS):
        print(board_rows[i])
    print("+", end= " " )   
    for i in range(COLUMNS):
        print(board_columns[i], end="")
        print 
    print("+")
    for i in range(COLUMNS):
        column_number = i+1
        print("   " + str(column_number), end = " ")

def column_choice():
    player = 1
    if player % 2 != 0 :
        column = input("Player 1, please choose a column to make your next move ")
    else:
        column = input("Player 2, please choose a column to make your next move ")
    player += 1
    return column 


def new_board(column):
    moves = 0
    column = int(column) - 1
    if moves % 2 == 0:
        key = "X"
    else:
        key = "O"
    board_rows = ["|   \t\t  |"] * ROWS
    board_columns = [" ___ "] * COLUMNS
    for i in range (ROWS):
        print(board_rows[i])
        board_rows.pop(column)
        board_rows = board_rows.insert(column, key)
        print(board_rows)
    print("+", end= " " )   
    for i in range(COLUMNS):
        print(board_columns[i], end="")
    print("+")
    for i in range(COLUMNS):
        column_number = i+1
        print("   " + str(column_number), end = " ")    

if __name__ == "__main__":
    print()
    print("Welcome to Connect 4")
    print()
    new_board(column_choice())

我必须创建一个具有给定的列和行尺寸的connect 4板(目前)。我目前已经创建了电路板,但我不太清楚如何让XO放在正确的位置。例如,现在当我运行程序时,X将出现在整个列中。如果你能提供任何帮助,我将不胜感激!

EN

回答 2

Stack Overflow用户

发布于 2015-12-03 09:23:48

代码语言:javascript
复制
board_rows =["|   \t\t  |"] * ROWS
board_columns = [" ___ "] * COLUMNS

将列表中的每个条目/项目指向相同的内存地址,因此更改一列会更改所有条目/项目,因为它们都指向相同的位置。

代码语言:javascript
复制
for row in board_rows:
    print id(row)

使用列表理解或for循环来获取列表中的不同项(内存位置)。

代码语言:javascript
复制
board_rows =["|   \t\t  |" for row in ROWS]
for row in board_rows:
    print id(row)
票数 1
EN

Stack Overflow用户

发布于 2015-12-03 09:23:00

老实说,这是一种非常复杂的表示文本板的方式。如果可能的话,我建议使用面向对象的方法,比如将板子做成一个列表,其中列表中的每个条目都是代表一行的字符串列表,并使用__repr__方法来帮助更容易地将其可视化。这是我写的一个例子。

代码语言:javascript
复制
class Board(object):

def __init__(self, rows, columns):
    self.rows = rows
    self.columns = columns
    self.board = [['_' for i in range(self.columns)] for i in range(self.rows)]
def __repr__(self):
    board = ''
    for row in self.board:
        board += ''.join(row) + '\n'
    return board

       f = Board(5, 5)
=> None
   f
=> _____
   _____
   _____
   _____
   _____

这样,一个空白板被表示为一个双重列表理解,其中你的rows参数是垂直长度,而你的columns参数是水平长度。

使用这段代码,尝试编写一个方法,通过在不是对手棋子的列中找到最低点,将棋子添加到棋盘上。

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

https://stackoverflow.com/questions/34056049

复制
相关文章

相似问题

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