Python初学者,基于文本的游戏

Python初学者,基于文本的游戏,python,text,text-based,Python,Text,Text Based,我对编程游戏相当陌生;我已经3/4完成了艰苦地学习Python,我有一个关于我制作的一个基于文本的小游戏的问题。。。所以在这个游戏中,我的家伙被困在一个荒岛上,你可以选择(原始输入)向左向右或进入丛林。选择方向后,您可以选择步行多少英里。每个方向都应该有不同的最终结果(和英里距离) 如果您输入的数字小于到达目的地的英里数,系统会提示您选择“掉头”或“继续”。如果您输入掉头,系统会将您带回起点,再次要求您选择方向。如果您输入继续,程序将返回到英里(),您可以选择新的步行里程数 def miles(

我对编程游戏相当陌生;我已经3/4完成了
艰苦地学习Python
,我有一个关于我制作的一个基于文本的小游戏的问题。。。所以在这个游戏中,我的
家伙被困在一个荒岛上,你可以选择(原始输入)向左
向右
进入丛林
。选择方向后,您可以选择步行多少英里。每个方向都应该有不同的最终结果(和英里距离)

如果您输入的数字小于到达目的地的英里数,系统会提示您选择“掉头”或“继续”。如果您输入
掉头
,系统会将您带回起点,再次要求您选择方向。如果您输入
继续
,程序将返回到英里(),您可以选择新的步行里程数

def miles():
        print "How many miles do you walk?"     
    miles_choice = raw_input("> ")
    how_much = int(miles_choice)    
    if how_much >= 10:
        right_dest()    
    elif  how_much < 10:
        turn()  
    else: 
        print "You can't just stand here..."
        miles() 
def miles():
打印“你走了多少英里?”
里程选择=原始输入(“>”)
多少=整数(英里数选择)
如果多少>=10:
右图()
elif多少<10:
转()
其他:
打印“你不能站在这里…”
迈尔斯()
好的,这里有两个问题:

  • 如果用户最初输入的英里数小于目的地距离,并且第二英里输入+第一英里输入==到目的地的英里数,那么如何使其添加输入并运行我的目的地函数,而不仅仅是重复英里()

  • 由于所有三个最终目的地都有不同的距离,我是否应该编写三个独立的英里函数?是否有一种方法可以使英里()根据选择的原始方向运行不同的端点


  • 如果这没有任何意义,我很抱歉……我仍在学习,我不确定如何充分解释我要表达的意思。

    您可以在dict中存储每个方向的行走里程数,然后检查dict,查看用户是否走得足够远:

    distances = {
        'right': 7,
        'left': 17,
        'forward': 4
    }
    
    direction_choice = raw_input("> ")
    miles_choice = raw_input("> ")
    
    if how_much >= distances['direction_choice']:
        right_dest()    
    elif  how_much < distances['direction_choice']:
        turn()  
    else: 
        print "You can't just stand here..."
        miles()
    
    距离={
    "对":7,,
    "左":17,,
    “前进”:4
    }
    方向选择=原始输入(“>”)
    里程选择=原始输入(“>”)
    如果多少>=距离[“方向选择]:
    右图()
    elif多少距离[方向选择]:
    转()
    其他:
    打印“你不能站在这里…”
    迈尔斯()
    

    确保正确地验证和转换用户输入,我没有解决。<强>好运!< /强>

    < p>我不完全理解需求(预期行为和约束)。但是,您可以考虑将参数传递给函数(通过和参数)传达该剧在该方向能走的最大英里数)

    例如:

    #!/usr/bin/env python
    # ...
    def miles(max_miles=10):
        print "How many miles do you walk?"
        while True:     
            miles_choice = raw_input("> ")
            try:
                how_much = int(miles_choice)
            except ValueError, e:
                print >> sys.stderr, "That wasn't a valid entry: %s" % e
                continue
    
            if max_miles > how_much > 0:
                break
            else:
                print "That's either too far or makes no sense"
        return how_much
    
    …在这种情况下,通过“max_miles”参数将最大有效英里数传递给函数,然后返回一个有效整数(介于1和max_miles之间)

    该函数的调用者有责任根据需要调用
    right\u dest()
    turn()

    请注意,我已删除了对
    miles()
    的递归调用,并将其替换为
    ,而True:
    循环,围绕
    try:…除了ValueError:…
    验证循环。在这种情况下,这比递归更合适。当值多少有效时,代码将
    从循环中中断

    (顺便说一句,如果调用
    miles()
    ,而不使用任何参数,那么参数将根据“defaulted argument”特性设置为10。这对于Python(和Ruby)来说是不寻常的……但基本上,对于有合理默认值的情况,参数是可选的).

    @Question#1:我使用了类intern变量。您可能需要它们来进行进一步的编程部分,当您在一个方向上完成时,应该将其设置为零,以零开始下一步/lvl

    @问题#2:字典是最好的方法,
    self.dest
    。参数
    pos
    用作从字典中获取值的键

    class MyGame:
        def __init__(self):
            self.current_miles = 0
            self.dest = {'Left' : 10, 'Into the jungle' : 7, 'Right' : 22}
    
        def miles(self,pos):
    
            print "How many miles do you walk?"     
            miles_choice = raw_input("> ") 
            self.current_miles += int(miles_choice) 
    
        if self.current_miles >= self.dest.get(pos):
                self.miles("Right")    
        elif  self.current_miles < self.dest.get(pos):
            print "you went "+ str(self.current_miles) + " miles"
        else: 
            print "You can't just stand here..."
            self.miles(pos) 
    
    mg = MyGame()
    mg.miles('Into the jungle')
    
    classmygame:
    定义初始化(自):
    自身当前里程=0
    self.dest={‘左’:10,‘进入丛林’:7,‘右’:22}
    def里程(自我,位置):
    打印“你走了多少英里?”
    里程选择=原始输入(“>”)
    self.current_miles+=int(miles_选项)
    如果self.current\u miles>=self.dest.get(位置):
    self.miles(“右”)
    elif self.current\u miles