我是编码和Python的新手。我正在用Python制作一个简单的“选择冒险”类型的游戏。游戏的整个目标是进入所有4个房间/门并获取密码的所有4位数字以进入锁定的门,这导致宝藏。这就是我用来在代码中添加数字的方法:
from random import choice
code = range(10)
my_code = []
def add_code():
if len(my_code) < 4:
code_digit = choice(code)
my_code.append(code_digit)
所以对于每个房间,我都有困惑和挑战征服。如果你完成了挑战,我让它运行add_code()函数。我想要避免的是让用户反复进入同一扇门,完成相同的挑战,并在列表中添加一个数字,甚至不必打开任何其他门或完成任何其他挑战。有没有办法让某段代码在运行一次后才运行?就像,如果门1的挑战已经完成并且代码中添加了一个数字,是否有办法不让用户从门1的add_code()函数中添加另一个数字?
答案 0 :(得分:1)
将每个挑战与布尔标志相关联。当玩家完成挑战时将旗帜设置为True,并在给予玩家再次进行挑战的选项之前检查旗帜。
例如,如果你有一个“打孔猴子”任务,你可能会有以下标志:
monkeys_punched_yet = False
当玩家击打猴子时,你会设置
monkeys_punched_yet = True
在猴子打孔区域,您需要检查以下内容:
if monkeys_punched_yet:
description_text = ("You see a pile of bruised and battered monkeys "
"in a corner of the room.")
else:
description_text = "You see a group of unsuspecting, punchable monkeys."
options.append("punch monkeys")
答案 1 :(得分:0)
您可以检查新代码是否已经在已完成代码列表中。
def add_code():
if len(my_code) < 4:
code_digit = choice(code)
if ( code_digit in my_code):
print("Already visited that room")
else:
my_code.append(code_digit)
答案 2 :(得分:0)
使用布尔值:
door1 = False
door2 = False
door3 = False
door4 = False
在一扇门完成挑战后,将相关门设置为True
。然后,你会想要有一个中心来显示每扇门。在游戏中思考你是如何进入中心房间的,你被四扇门包围着。你的代码是这样的:
which_door = raw_input('Which door do you want to enter? ')
if which_door == "1":
if door1: # This is short for "if door1 is True"
print "You have already completed this challenge."
else: # Otherwise, it is set to False. The challenge has not been started
do_stuff()
door1 = True
etc for each door...
顺便说一下,制作随机代码的方法比较简单:
>>> random.sample(range(10), 4)
[3, 4, 0, 1]
答案 3 :(得分:0)
您可以做的是将完成的挑战添加到已完成的挑战列表中。每个挑战都必须有唯一的标识符。
user.completed_challenges = set()
开启挑战时,请检查挑战是否在已完成挑战列表中
if not challenge.uuid in user.completed_challenges:
# do code
# When everything is done add the uuid to challenges
user.completed_challenges.add(challenge.uuid)
如果你选择其中一个,你可以做的一件事就是让两个房间相同,例如同样的挑战。两者都应标记为“完成”。然后给两个房间提供相同的唯一标识符
这很简单,但我认为应该按照你的情况完成工作。
我宁愿使用uuids
而不是使用布尔值。它可以是字符串或其他什么。它必须是能够识别单个挑战的标识符。例如['room1', 'room2', 'room3', 'room4']
set
阻止您添加多个元素。布尔值的问题在于它使用起来不太灵活。您必须为n
质询创建n
个变量。添加更多挑战并不是很干净。当你遇到的挑战少于5个时,它应该可以正常工作,但是如果你想增加更多,那么拥有能够跟踪你所做挑战的集合会更好。
该套装的另一个好处是,您可以很好地了解用户已经完成的挑战。
print "You completed challenges %s" % ', '.join(user.completed_challenges)
无论是布尔,你都必须遍历所有硬编码的布尔值,随着时间的推移,这将会变得更加困难。