我正在用Python编写Connect4。我的问题是player_-one和player_-two的功能似乎不起作用,所以在要求player提供输入后,no-part会掉到板上。我还想知道,我的代码是否返回后,球员已下降董事会是正确的;我怀疑我现在的代码没有返回用玩家的棋子更新过的棋盘,但由于是新的,我不知道该怎么办
请看一看
def field(field):
for w in range(14):
if w % 2 == 0:
usable_w = int(w/2)
for h in range(15):
if h % 2 == 0:
usable_h = int(h/2)
if h != 14:
print(field[usable_h][usable_w], end="")
else:
print(" ")
else:
print("|", end="")
else:
print("_"*13)
PlayField = [[" ", " ", " ", " ", " ", " ", " "],
[" ", " ", " ", " ", " ", " ", " "],
[" ", " ", " ", " ", " ", " ", " "],
[" ", " ", " ", " ", " ", " ", " "],
[" ", " ", " ", " ", " ", " ", " "],
[" ", " ", " ", " ", " ", " ", " "],
[" ", " ", " ", " ", " ", " ", " "]]
field(PlayField)
def player_one(field):
MoveColumn = int(input("Enter the column 1 - 7\n"))
MoveRow = 6
for row in PlayField:
if MoveColumn >= 1 and MoveColumn <= 7:
if PlayField[MoveColumn-1][MoveRow] == " ":
PlayField[MoveColumn-1][MoveRow] = "X"
break
MoveRow -= 1
return field(PlayField)
else:
print("Column outside range, please enter valid move")
def player_two(field):
MoveColumn = int(input("Enter the column 1 - 7\n"))
MoveRow = 6
for row in PlayField:
if MoveColumn >= 1 and MoveColumn <= 7:
if PlayField[MoveColumn-1][MoveRow] == " ":
PlayField[MoveColumn-1][MoveRow] = "O"
break
MoveRow -= 1
return field(PlayField)
else:
print("Column outside range, please enter valid move")
def launch_play():
while True:
Player = 1
print("Player's turn", Player)
player_one(field)
player_two(field)
launch_play()
嗯,您的
player_...
函数包含合适的语句,但顺序不合适;由于它们在全局PlayField
上运行,因此返回它是毫无意义的。除此之外,它还有两个几乎相同的函数。重新排列的变体,其中播放器1和播放器2之间的唯一差异作为参数传递(而不是无用的field
),正如您所期望的那样工作:在
launch_play
循环中,现在可以调用现在,您可以通过检查游戏何时结束来完成程序
我提出了两个解决方案(在你修改代码之前)来防止玩家的回合发生变化,但这两个方案都不起作用:
另一种解决方案是在播放器函数中引入播放器变量(也不起作用):
相关问题 更多 >
编程相关推荐