所以现在我写了一个简单的井字游戏。我甚至没有使用我所做的所有功能,但我的问题是: 我如何判断玩家是否在已经有1或2的地方放置1或2,我想我知道怎么做,但是如果他们输入非法字符或试图覆盖已经放置的1或2,我如何才能将它们放回“输入你的号码”提示符。在
还有没有更紧凑的方法来实现这一点?在
游戏代码如下:
nr = [0,0,0,0,0,0,0,0,0]
keepGoing = True
def checkP1():
if nr[0] and nr[1] and nr[2] or nr[3] and nr[4] and nr[5] or nr[6] and nr[7] and nr[8] or nr[0] and nr[3] and \
nr[6] or nr[1] and nr[4] and nr[7] or nr[2] and nr[5] and nr[8] or nr[0] and nr[4] and nr[8] or nr[2] and nr[4] and nr[6] == 1:
print("P1 Wins")
keepGoing = False
return keepGoing
def checkP2():
if nr[0] and nr[1] and nr[2] or nr[3] and nr[4] and nr[5] or nr[6] and nr[7] and nr[8] or nr[0] and nr[3] and \
nr[6] or nr[1] and nr[4] and nr[7] or nr[2] and nr[5] and nr[8] or nr[0] and nr[4] and nr[8] or nr[2] and nr[4] and nr[6] == 2:
print("P2 Wins")
keepGoing = False
return keepGoing
def Game():
while keepGoing:
PrintBoard()
in1 = 0
in2 = 0
in1 = input("Please enter the number of the position you want to put your symbol P1.")
nr[int(in1)-1] = 1
check = checkP1()
if check == 0:
PrintBoard()
break
in2 = input("Please enter the number of the position you want to put your symbol P2.")
check = checkP2()
if check == 0:
PrintBoard()
break
nr[int(in2)-1] = 2
def PrintBoard():
print("",nr[0],nr[1],nr[2],"\n",nr[3],nr[4],nr[5],"\n",nr[6],nr[7],nr[8])
def Reset():
nr = [0,0,0,0,0,0,0,0,0]
keepGoing = True
回答你的具体问题
我会用一个函数来做这个:
这将持续到当前任何玩家给出有效的
^{pr2}$move
:一些更一般的建议:
if a or b == c
没有像你想的那样做(参见例如this question)。例如,nr[0] and nr[1] and nr[2] == 2
实际上测试bool(nr[0]) and bool(nr[1]) and (nr[2] == 2)
;只要最后一个值是2,另外两个不为零,那么它就是True
。CoDEmanX在评论中的建议在这里很有用。在keepgoing
不是很像python;我会创建一个函数game_over(board)
,如果游戏结束(无论是赢还是平局),则返回True
,否则False
,则整个循环变成while True: ... if game_over(board): break
。在board
参数传递给get_valid_input
和{keepgoing
会删除其中一个全局变量,但您可以将board
作为其他函数的参数,并根据需要使用return
。或者,考虑使用class
来保存board
和所有函数。在如何使用切片来确定赢家的示例:
same()
是一个helper函数,它检查iterable的所有元素是否都具有相同的值,如果是,则返回该值,除非它是0
(因此我们只捕获{您可以看到切片符号中的模式,使用for循环可以轻松地缩放它们。在
相关问题 更多 >
编程相关推荐