2013-11-26 36 views
1

我尝试创建一个井字棋游戏;但即时通讯有点麻烦。 我已经建立在它编号的列表,因此,当选择该号码它改变到的x或o。然而,当我的板子把它打印在其中的数字0,1,2,3,4,5,6,7,8,我不希望他们是这样的。 我的问题是我如何可以改变字符的空单?我会使用索引还是有另一种方法呢如何实现列表

board = [0,1,2, 
     3,4,5, 
     6,7,8] 

def gameBoard(): 
    print(" " "a" " " "b" " " "c") 
    print(" ""-------------") 
    print(("1"),("|"),board[0],"|",board[1], "|" ,board[2], "|") 
    print(" ""-------------") 
    print(("2"),("|"),board[3],"|",board[4], "|" ,board[5], "|") 
    print(" ""-------------") 
    print(("3"),("|"),board[6],"|",board[7], "|" ,board[8], "|") 
    print(" ""-------------")  


while True: 
    user_input = input("Enter your move: ") 
    if user_input == "a1": 
     user_input = "0" 
    elif user_input == "a2": 
     user_input = "3" 
    elif user_input == "a3": 
     user_input="6" 
    elif user_input == "b1": 
     user_input = "1" 
    elif user_input == "b2": 
     user_input = "4" 
    elif user_input== "b3": 
     user_input = "7" 
    elif user_input == "c1": 
     user_input = "2" 
    elif user_input == "c2": 
     user_input = "5" 
    elif user_input == "c3": 
     user_input = "8" 
    else: 
     print("invalid coordinates") 
    user_input= int(user_input) 

回答

0

从你的代码,你用整数填充板0 - 8.如果勾选板[7]它将返回7.

我想你想并初始化用空格板,使board [7]将返回''(空格)。

你可以做板= [ ' ' '', '', '', '', '', '', '','']

或者更干净,

板= [”“] * 9

希望这有助于:) 使用矩阵中也并非是实施坏主意,但比这个问题不同,你正在试图解决

0

使用二维列表!

board = [[0,0,0], 
     [0,0,0], 
     [0,0,0]] 

,然后只用你要等的值则引用是刚:

board[row][column] 

编辑:我有种误解,而不是通过9是0的问题,你可以让他们所有空字符串即

board[i] = '' 

或使用字典映射号码为字符串

board[5] = '' 
0

您可以使用字典:

board = {0:'X', 1:'O', 2:' ', 
     3:'X', 4:'O', 5:' ', 
     6:'X', 7:'O', 8:' ', 
     } 

print board[1] # will print O 
board[1] = 'X' 
print board[1] # will print X 
0

你的问题还没有完全完成,因为你没有更新在每次迭代的游戏键盘。然而,这里有一些建议:

  1. 设置你的初始板是全是零(或“O”)
  2. 如果您正在使用一个列表,所有的语句像user_input = '1'等可以直接设置为use_input = 1避免int显式调用。
  3. 您可以通过简单地说board[user_input] = 'X'board[user_input] = 'O',根据玩家更改列表的值。
1

我猜是什么你想要的是一个带有字符串的板,而不是数字,最初填充单个空间的字符串。可以使用一个单一的列表此板或二维阵列

单个列表实现

board = [" "," "," "," "," "," "," "," "," "] 

从控制台例如:

>>> board = [" "," "," "," "," "," "," "," "," "] 
>>> board[2] = "X" 
>>> board 
[' ', ' ', 'X', ' ', ' ', ' ', ' ', ' ', ' '] 
>>> board[0] 
' ' 
>>> board[2] 
'X' 
>>> 

2-d数组实现

board = [[" "," "," "],[" "," "," "],[" "," "," "]] 

控制台示例:

>>> board = [[" "," "," "],[" "," "," "],[" "," "," "]] 
>>> board[1][2] = "O" 
>>> board 
[[' ', ' ', ' '], [' ', ' ', 'O'], [' ', ' ', ' ']] 
>>> board[0][1] 
' ' 
>>> board[1][2] 
'O' 

例如打印2D名单:

>>> board = [["X"," ","X"],[" ","X"," "],["X"," ","X"]] 
>>> for row in board: 
    string = "" 
    for element in row: 
     string = string + element 
    print(string) 


X X 
X 
X X 
+0

这就是我想要的方式。但它也假设打印出一个实际的井字棋板。我怎么做 ?因为他们的方式是这样的,它打印出一条直线 – user2864064

+0

您需要使用循环,我会更新我的答案以显示您。 –