2014-04-28 7 views
2

저는 프로그래밍 게임에 상당히 익숙합니다. 나는 Learn Python the Hard Way을 통해 3/4의 속도로 움직이며 나는 약간의 텍스트 기반 게임에 대한 질문을 던졌습니다 ... 그래서이 게임에서 내 guy은 사막의 섬에 좌초되어 있고 (원시 입력) 옵션이 있습니다. going leftright 또는 into the jungle. 방향을 선택하면 걷는 거리를 선택할 수있는 옵션이 제공됩니다. 각 방향은 다른 최종 결과 (및 마일 거리)를 갖기로되어 있습니다.파이썬 초보자, 텍스트 기반 게임

목적지까지의 마일 수보다 적은 숫자를 입력하면 "돌아서거나 계속 사용"할 것인지 묻는 메시지가 나타납니다. turn around을 입력하면 다시 돌아옵니다. 다시 방향을 선택합니다. 당신이 keep going 입력하면 프로그램) (마일에 반환하라는 메시지 시작은, 당신은 걷는 마일의 새로운 양을 선택할 수있는.

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() 

좋아, 그래서 여기에 두 가지의 질문 :

  1. 어떻게 만들 수 있습니까? 사용자가 원래 목적지 거리보다 적은 수의 마일을 입력하고 두 번째 마일 입력 + 첫 번째 마일 입력 == 목적지까지의 마일을 입력하면 입력을 추가하고 대상을 실행합니다. 마일()을 반복하십시오.

  2. 3 개의 최종 목적지 모두 다른 거리를 가지므로 3 가지 별도 마일 기능을 작성해야합니까? 선택한 원래 방향에 따라 miles()이 다른 끝점을 실행하게 만들 수있는 방법이 있습니까?

이것이 의미가 없으면 미안 해요 ... 나는 여전히 배우고 있고, 내가 뭘 하려는지 완전히 설명하는 방법을 모르겠다.

당신은 DICT의 각 방향으로 걷는 마일의 양을 저장 한 다음 사용자가 충분히 걸어 있는지 확인하기 위해 DICT를 확인할 수 있습니다

답변

0

:

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() 

가 제대로 검증해야하고 캐스팅 사용자 입력, 내가 언급하지 않은. 행운을 빈다!

0

필자는 요구 사항 (의도 된 동작 및 제약 조건)을 완전히 이해하지 못했습니다. 그러나, 매개 변수를 함수 (통과 및 인수)에 전달하여 해당 방향으로 갈 수있는 최대 마일 수를 전달하는 것을 고려해보십시오. 예를 들어

: 당신은 "max_miles"인수를 통해 함수에 마일의 최대 유효 수를 통과하고 다시 (1 max_miles 사이에) 유효한 정수를 반환이 경우

#!/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 

....

이 함수의 호출자는 right_dest() 또는 turn()을 적절하게 호출해야합니다.

miles()에 대한 재귀 호출을 제거하고 try: ... except ValueError: ... 유효 루프 주위에 while True: 루프로 바꾸십시오. 이 경우 재귀보다 더 적합합니다. how_much 값이 유효한 경우 코드에서 break을 루프 밖으로 벗어납니다.

(그런데 매개 변수없이 miles()을 호출하면 인수는 "기본 인수"기능에 따라 10으로 설정됩니다.) 파이썬 (및 루비)에서는 예외적이지만 기본적으로 인수를 선택적으로 만듭니다. 합리적인 기본값이있는 경우).

0

@Question # 1 : 클래스 인턴 변수를 사용했습니다. 추가 프로그래밍 부분에 필요할 수도 있으며 한 방향으로 완료되면 0으로 가져와 다음 단계/lvl에 대해 0으로 시작해야합니다.

@Question # 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') 
관련 문제