2013-09-11 1 views
0

전투를 위해 while 루프를 사용하는 간단한 텍스트 기반 게임을 만들고 있습니다. 플레이어에게 무엇을하고 싶은지 물어보고 무기 나 인벤토리 (포션 등)를 사용할 수있는 옵션을 제공합니다. 인벤토리를 선택하여 보유하고있는 것을 보려면 어떻게해야 무기를 선택하고 대신 공격 할 수있는 옵션을 제공 할 수 있습니까? 나는 이라는 코드를 사용하여 pass이라는 코드를 작성하려고 시도했다. 사용자가 back을 입력하면 메뉴 시작 부분에 코드가 전송된다. 그러나 그것은 적의 공격을 끊임없이 반복 할 뿐이며 사용자가 아무 것도하지 못하도록합니다. 어떤 아이디어? 여기 내 전투 코드입니다 : 내가 다시 보낼 수 있도록하려면게임에서 플레이어의 상태 변화를 관리하는 방법은 무엇입니까?

바로 print "what will you do?" 줄 뒤에

def combat(): 

    hero_hp = 1000000 
    enemy_hp = randint(5, 10) 
    enemy_name_test = randint(1,5) 
    enemy_weapon_test = randint(1,5) 
    enemy_name = list_of_enemys[enemy_name_test] 
    enemy_weapon = list_of_weapons[enemy_weapon_test] 
    while hero_hp > 0 and enemy_hp > 0: 
     print "The %s swings at you with a %s" % (enemy_name, enemy_weapon) 
     damage = randint(0, 10) 
     if damage == 0 : 
      print "the %s misses" %enemy_name 
     else : 
      hero_hp -= damage 
      print "The %s hits you with a %s for %d hit points you have %d hit points left" % (enemy_name, enemy_weapon, damage, hero_hp) 
      hero_hp -= damage 
     if hero_hp <= 0 : 
      print "you have been slain!" 
      close() 
     else : 
      print "What will you do?" 


     print inventory 
     player_choice = raw_input("> ") 
     if player_choice == '1' : 
      print hero_weapons 
      player_choice2 = raw_input("> ") 
      weapon = hero_weapons[player_choice2] 


      damage = randint(0, 10) 
      enemy_hp -= damage 
      print "You attack with %s for %d hit points" % (weapon, damage) 
      print "%s has %d hit points left" % (enemy_name, enemy_hp) 
      if enemy_hp <= 0 : 
       print "You have slain the %s" % enemy_name 
      else : 
       pass 


     else : 
      print hero_equipment 
      player_choice2 = raw_input("> ") 
      heal = randint(1, 10) 
      hero_equipment.pop(player_choice2) 
      print "you drink a potion and heal %s hit points" % heal 
+0

그냥 내가 궁금한 것이 무엇인지 궁금해하던가요? 나는 실수를 다시 피하고 싶다. – Delur

+0

누군가는 "이 질문은 연구 노력을 보여주지 않으며 그것이 불분명하거나 유용하지 않다"고 느꼈습니다. '제어 명령문'에 대한 질문을 지정하기 위해 노력한다면 ... 검색 엔진으로 스스로 알아낼 수도 있고 다른 사람들이 쉽게 이해할 수도 있습니다. – clwhisk

답변

0

나는이 대답은 머리 위로 쏘지 않는 희망하지만 프로그램에 점점 곧 복잡해지기 때문에 곧 비 작동 혼란에 빠지게 될 것입니다.

나는 당신이 내 플레이어는 플레이어의 선택이

  • 새로운 기능 상태를 각각 선택 여기에서 무엇
  • 지금하고 무엇

    1. 를 수집하는 좋은 방법입니다 유한 상태 기계를 들여다 제안 플레이어를 데려 간다

    코드에서 이미 if 문과 선택 변수를 조합하여 FSM을 설명합니다. 다음은 코드

       |choice 
    state   |attack  potion  inventory  back 
    --------------+-------------------------------------------------------- 
    combat_begin |combat_begin combat_begin show_inventory 
    show_inventory|    combat_begin     combat_begin 
    

    플레이어가 전투를 시작하면, 그녀는 그녀가 전투의 시작 부분으로 이동 후 공격 할 수로 설명하려고하는 것과 가까이 상태 테이블입니다. 그녀는 또한 전투를 시작할 수있는 물약을 사용할 수 있습니다 (그리고 물약의 효과가 무엇이든간에). 그녀는 새로운 상태 (show_inventory)에 그녀의 박았 그녀의 인벤토리를 볼 것을 요청할 수 있습니다. 전투가 시작될 때 그녀가 할 수없는 한 가지는 셀이 비어 있기 때문에 "뒤로"이동하는 것입니다.

    플레이어가 show_inventory 상태에있는 경우, 플레이어는 "뒤로"또는 물약을 사용하여 다시 전투를 시작할 수 있습니다. 그녀가 할 수없는 일은 공격하거나 재고를 보여주는 것입니다.

    분명히 나는이 예를 거의 바보처럼 단순하게 만들어 이것이 어디를 갈 필요가 있는지를 알기를 바랍니다.

  • +0

    Ok, 유한 상태 기계를 살펴보고 알아낼 수 있는지 알아 보겠습니다. 올바른 방향으로 조금 움직여 주셔서 감사합니다. 나는 내가 원하는 것을하기 위해 무엇을 찾아야할지 정확히 모른다고 생각합니다. – Delur

    0

    원하는 루프로 speperate 함수를 만들고 루프 할 때마다 함수를 호출하십시오.

    예 : 물론

    def example(example_item): 
        if example_a == example_b: 
         example(example_item) #calling the function again 
        else: 
         return(false) 
    

    은 사용하는 것입니다 무엇을하지 이잖아,하지만 단지 예. 무언가가 바뀔 때마다 또는 무한 루프가되도록하십시오. 예를 들어, 을 에 추가하면 결과적으로 루프가 어느 시점에서 중지됩니다.

    관련 문제