2010-01-19 2 views
0

Я довольно новый для программирования в целом, и я создаю небольшую игру для моей младшей сестры ...Проблем, позволяющих бросить курить функцию в Python

У меня есть время цикла, в котором я хочу иметь возможность выйти из игры, но ни один из прекративших методов я знаю, кажется, работает:

#main game: 
while 1: 
    input_event_1 = gui.buttonbox(
     msg = 'Hello, what would you like to do with your Potato Head?', 
     title = 'Main Screen', 
     choices = ('Check Stats', 'Feed', 'Exercise', 'Teach', 'Play', 'Go to Doctor', 'Change Favourite Thing', 'Get New Toy', 'Quit')) 
    if input_event_1 == 'Check Stats': 
     myPotatoHead.check_p_h_stats() 
    if input_event_1 == 'Change Favourite Thing': 
     myPotatoHead.change_favourite_thing() 
    if input_quit == 'Quit': 
     input_quit = gui.ynbox(
     msg = 'Are you sure you want to quit?', 
     title = 'Confirm quit', 
     choices = ('Quit', 'Cancel')) 
     if input_event_quit == 'Quit': 
      sys.exit(1) 

благодарен за любую помощь.

Благодаря


----- UPDATE -----

Спасибо за совет, но он по-прежнему не работает:

вот обновленный код:

#import the required modules: 
import easygui as gui 
import os 


#-----CLASS----------------------------------- 
#Class: 
class PotatoHead: 

#Atributes: 
    def __init__(self): 
     self.data = game_data 
     self.first_name = self.data[0] 
     self.last_name = self.data[1] 
     self.gender = self.data[2] 
     self.colour = self.data[3] 
     self.fav_thing = self.data[4] 
     self.toys = [] 
     self.toys.append(self.data[5]) 
     self.age = '0.0' 
     self.hunger = '0.0' 
     self.health = '0.0' 
     self.fitness = '0.0' 
     self.education = '0.0' 
     self.happiness = '0.0' 
     self.tiredness = '0.0' 

    def check_p_h_stats(self): 
     self.toys_string = str(self.toys) 
     gui.msgbox(
      msg = ''' 
Name: ''' + self.first_name + ' ' + self.last_name + ''' 
Gender: ''' + self.gender + ''' 
Colour: ''' + self.colour + ''' 
Favourite Thing: ''' + self.colour + ''' 
Toys:''' + self.toys_string + ''' 
Age: ''' + self.age + ''' 
Hunger: ''' + self.hunger + ''' 
Health: ''' + self.health + ''' 
Fitness: ''' + self.fitness + ''' 
Education: ''' + self.education + ''' 
Happiness: ''' + self.happiness + ''' 
Tiredness: ''' + self.tiredness + ''' 
''', 
      title = 'Potato Head Stats', 
      ok_button = 'Continue') 

    def change_favourite_thing(self): 
     new_fav_thing = gui.enterbox(
      msg = 'Enter the new favourite thing:', 
      title = 'Change Favourite Thing', 
      default = 'Type Here') 
     self.fav_thing = new_fav_thing 

#Methods: 
#-----MAIN PROGRAM---------------------------- 
#set up game: 
image = 'nest.gif' 
game_choice = gui.ynbox(
    msg = """Would you like to start a new game, 
or load a previously saved one?""", 
    title = 'Start/Load Game', 
    choices = ('New Game', 'Load Game'), 
    image = image) 
if game_choice == 1: 
    fieldNames = ['First Name', 'Last Name', 'Gender', 'Colour', 'Favourite Thing',  'First Toy'] 
    new_p_head_data = [] 
    new_p_head_data = gui.multenterbox(
     msg = 'Fill in the starting information about your Potato Head:', 
     title = 'New Game', 
     fields = fieldNames, 
     values = ('', '', 'Male/Female', 'Red, Green, Blue, Yellow, White, Black', '',  'Choose either Rattle, Pacifier, Teddy, Doll, or Soft Ball')) 
    game_data = new_p_head_data 
else: 
    gui.msgbox('This function is not yet supported, please start again...') 

myPotatoHead = PotatoHead() 

#main game: 
while 1: 
    input_event_1 = gui.buttonbox(
     msg = 'Hello, what would you like to do with your Potato Head?', 
     title = 'Main Screen', 
     choices = ('Check Stats', 'Feed', 'Exercise', 'Teach', 'Play', 'Go to Doctor', 'Change Favourite Thing', 'Get New Toy', 'Quit')) 
    if input_event_1 == 'Check Stats': 
     myPotatoHead.check_p_h_stats() 
    elif input_event_1 == 'Change Favourite Thing': 
     myPotatoHead.change_favourite_thing() 
    elif input_event_1 == 'Quit': 
     input_quit = gui.ynbox(
      msg = 'Are you sure you want to quit?', 
      title = 'Confirm quit', 
      choices = ('Quit', 'Cancel')) 
     if input_quit == 'Quit': 
      sys.exit(1) 

Использование PYthon 2.5.4 для Mac и использование Easygui 0.83

Опять же, спасибо за любые советы

ответ

2

Я думаю, что это ваша проблема:

if input_quit == 'Quit': 
     input_quit = gui.ynbox(
     msg = 'Are you sure you want to quit?', 

должен быть

if input_event_1 == 'Quit': 
     input_quit = gui.ynbox(
     msg = 'Are you sure you want to quit?', 

Редактировать: причина она по-прежнему не работает, в соответствии с учебник EasyGui, заключается в том, что ynbox возвращает 0 или 1, а не строковые значения вариантов. Так изменится

elif input_event_1 == 'Quit': 
     input_quit = gui.ynbox(
      msg = 'Are you sure you want to quit?', 
      title = 'Confirm quit', 
      choices = ('Quit', 'Cancel')) 
     if input_quit == 1: 
      sys.exit(1) 
+0

thankyou, он отлично работает сейчас –

0

Это более элегантное этот путь:

she_wants_to_play = true 
while she_wants_to_play: 
    ask input 
    if input == quit: 
     she_wants_to_play = false 

Таким образом, вы хорошо выйти из времени цикла, вместо того, чтобы поразить систему с весом 10000 тонн.

+0

В то время как структура петли, которую вы предлагаете, элегантна, нет ничего плохого в 'sys.exit()'. Это вряд ли вес N-тонны ... он просто вызывает красивое исключение SystemExit, которое чисто выходит из приложения. Возможно, вы думаете о 'os._exit()', что является неприятным способом? Проверьте 'help (sys.exit)' для получения дополнительной информации. –

0

Несколько контрольно-пропускных пунктов

  • ли вы импортировать SYS?
  • if input_event_quit == 'Quit': должно быть, если input_quit == 'Quit':
2

Я думаю, может быть, ваш код

if input_quit == 'Quit': 

должен быть

if input_event_1 == 'Quit': 

так же, как другие ваши чеки? Я не знаком с этим buttonbox штуковиной, но расхождением между этим одним чеком и другими сразу же сотрясения и прыгает в глаза ...

Edit: ах, нашел его, это от easygui (упоминая какие рамки вы используете, будет полезно! -) - yep, он возвращает строку, связанную с кнопкой, поэтому изменение, которое я предложил выше, определенно является ключевым моментом.

Кроме того, изменение всех if input_event_1 после того, как первый один к elif input_event_1 (так как она не может быть равно более чем одной строки, поэтому продолжайте проверять, как только вы обнаружили, что одна строка это делает равна -?), хотя и не является строго необходимым, будет улучшением.

 Смежные вопросы

  • Нет связанных вопросов^_^