这是我到目前为止所拥有的代码,我的老师希望游戏在您猜出一个数字并且当它们与数字匹配时“翻转X结束”,但是当数字不同时,数字“翻转过去”并且再次成为X。而且他希望游戏在所有数字都暴露出来后说“你赢了”。
import random
visual=[['X','X','X','X','X'],['X','X','X','X','X'],['X','X','X','X','X'],['X','X','X','X','X'],['X','X','X','X','X']]
data=[[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]
random.shuffle(data[0])
random.shuffle(data[1])
random.shuffle(data[2])
random.shuffle(data[3])
random.shuffle(data[4])
while True:
print(visual[0])
print(visual[1])
print(visual[2])
print(visual[3])
print(visual[4])
user_input_1 = int(input('enter a number 0 thru 4 to pick your first X position: '))
user_input_2 = int(input('enter a number 0 thru 4 to pick your first Y position: '))
user_input_3 = int(input('enter a number 0 thru 4 to pick your second X position: '))
user_input_4 = int(input('enter a number 0 thru 4 to pick your second Y position: '))
if data[user_input_1][user_input_2] == data[user_input_3][user_input_4]:
visual[user_input_1][user_input_2] = str(data[user_input_1][user_input_2])
visual[user_input_3][user_input_4] = str(data[user_input_3][user_input_4])
print(visual[0])
print(visual[1])
print(visual[2])
print(visual[3])
print(visual[4])
print('Congratulations you won the game!')
break
答案 0 :(得分:1)
据我了解,这是游戏中的离散步骤:
您的代码成功地初始化了面板(步骤1),对数据进行洗牌(2),进入循环(3),打印面板(4)并要求猜测(5)(6)。
以下是您丢失的物品的一些指导:
获得输入后,您始终希望将面板与面板(7)一起打印。为此,您需要先用所写的文章来更新视觉效果:
visual[user_input_1][user_input_2] = str(data[user_input_1][user_input_2])
visual[user_input_3][user_input_4] = str(data[user_input_3][user_input_4])
,然后打印您的视觉效果。如果使用if语句,则不需要这样做,因为您始终想打印显示的木板。
此后,如果用户未命中(8),则要交换回X。您已经基本编写了此条件。您需要检查数据板上是否有遗漏,如果是,则将这些可视内容交换回X:
if data[user_input_1][user_input_2] != data[user_input_3][user_input_4]:
visual[user_input_1][user_input_2] = 'X'
visual[user_input_3][user_input_4] = 'X'
侧面注:理想情况下,您希望清除显露的先前木板印刷以测试内存。这部分有些棘手。如果不使用操作系统命令,就没有简单的方法来清除显示内容,这几乎肯定超出了您的课程范围。我会与您的老师核对有关翻身的期望。
如果您对在Python here中使用操作系统命令如何实现这一目标感兴趣,请参阅StackOverflow。您将需要导入os和导入时间。打印显示内容后,使用time.sleep(number_of_seconds)为用户提供很多时间来尝试记住位置,然后将os.system('clear')用于linux / mac os或os.system('CLS')用于Windows清除屏幕。 同样,这不是您的老师想要的。
现在让我们来处理获胜条件(9)。当前,您正在使用带有“ break”的“ while True:”。尽管在这种情况下这可能起作用,但几乎应始终避免使用“ while True:”(有很多原因,here是解决一个原因的帖子)。诸如“ while”,“ do-while”和“ for”之类的循环结构具有内置的停止条件,将在每次循环时进行检查。在此程序中,您要停止的条件是将棋盘完全暴露出来(这就是您知道游戏结束并且用户不再需要猜测的方式)。因此,在这种情况发生之前,您希望while循环继续进行。看起来像这样:
while #win condition is not met#:
#stuff you want to loop#
#congrats, you have met your win condition#
有多种方法可以检查您的获胜条件是否尚未满足。一种选择是,如果可视面板与数据面板仍不相同,您就知道还没有赢:
while visuals != data:
#stuff you want to loop#
print(congrats....)
总之,TLDR:
import random
visuals = [...]
data = [...]
#shuffle
while visuals != data:
#print visuals
#get input
#update the inputted visuals with reveals
#print visuals with reveals
if #not a match:
#update the inputted visuals back to X's
print("Congratulations you won the game!")
如果您感兴趣的话,有一些较小的要点也可以改进您的代码:对缩进非常警惕,在这里do-while循环更合适(您能想到为什么吗?),您可以编写减少大量重复代码的函数和循环(例如,打印视觉效果时)。但这足以应付您的需求。
答案 1 :(得分:0)
您的代码的一些建议:
visual
作为输入并打印内容。然后,您可以调用该函数,而不用编写所有这些print
语句。visual
,然后对第二张卡进行相同操作。如果有匹配项,则将visual
保留原样。如果它们不匹配,则用“ X”替换两个点,然后返回循环的顶部。 visual
中的任何地方显示“ X”来跟进上一步。如果没有,那就意味着所有的卡都被发现了,因此玩家赢了。