2015-12-03 78 views
0
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()) 

我必须创建一个具有给定列和行尺寸(现在)的连接4板。我目前已经创建了该董事会,但我无法弄清楚如何让XO进入正确的位置。例如,现在当我运行该程序时,X将在整列中出现。如果你能提供任何帮助,我将不胜感激!Python连接4游戏

回答

0

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

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 
=> _____ 
    _____ 
    _____ 
    _____ 
    _____ 

这种方式,一个空白板被表示为双列表理解,你的行参数是垂直长度,和您的列参数是水平长度。

有了这个代码,尝试写的方法在一块添加到板上,通过找到在列不属于对手件的最低点。

+0

谢谢。这肯定会是非常有益的,但我从来没有学过这些功能之前,所以我觉得不舒服使用它们 – carroll

+0

现在是你的时间来学习他们。 – erip

1
board_rows =["| \t\t |"] * ROWS 
board_columns = [" ___ "] * COLUMNS 

点的每个条目/项目列表中的同一个内存地址,所以改变一列全部更改它们,因为它们都指向同一个地方。

for row in board_rows: 
    print id(row) 

使用list comprehension或for循环来取代列表中的不同项目(内存位置)。

board_rows =["| \t\t |" for row in ROWS] 
for row in board_rows: 
    print id(row) 
+0

谢谢,但那只是给了我一个无限循环。也许还没有做正确的事情 – carroll

+0

没有什么在我的代码或你将创造一个无限循环。你确定该程序不只是等待一些输入。此外new_board()和empty_board()都包含相同的代码,所以你各自是时间的这些功能一个被称为创造一个新的空板。而column_choice()在每次调用时都将玩家设置为1,所以玩家永远不会改变。 –