2013-12-09 1 views
1

Основная проблема, с которой я столкнулся, - это то, что происходит, когда я выбираю stay на hand_one, а затем hit на hand_two.Ошибка в игре на блэкджек-стиле python (компьютер)

Вместо того, чтобы просить меня hit or stay на hand_two снова, он возвращает меня к hit or stay на hand_one, когда я уже выбрал остаться на hand_one, так hand_one не должны иметь больше возможностей. Это вызывает проблемы с несколькими заявлениями о печати и неправильной игрой.

Что не так с моим кодом, что он походит на то, что он обращается к hand_one.
Полный код здесь: http://labs.codecademy.com/Bjaf/2#:workspace

Вот часть, которая может причиной проблемы.

def hit_or_stay(person): 
    hit_or_stay = raw_input("Do you want to hit or stay? You can type h or s.") 
    if hit_or_stay == 'h' or hit_or_stay == 'hit': 
     deal_one_card(person) 
     value_of_current_cards(person) 
     number_value_of_hand() 
    elif hit_or_stay == 's'or hit_or_stay == 'stay': 
     print "You stayed" 
     return 
    else: 
     hit_or_stay(person) 

def number_value_of_hand(): 
    if number_of_hands > 0: 
     value_of_hand_one = value_of_current_cards(hand_one) 
     if value_of_hand_one < 18: 
      print "\n" "You have %i" % (value_of_hand_one) 
      hit_or_stay(hand_one) 
     elif value_of_hand_one > 18: 
      print "You Lose" 
      return 
     elif value_of_hand_one == 18: 
      print "You hit HOT 18!!!" 
      return 
     if number_of_hands > 1: 
      value_of_hand_two = value_of_current_cards(hand_two) 
      if value_of_hand_two < 18: 
       print "\n" "Your second hand has %i" % (value_of_hand_two) 
       hit_or_stay(hand_two) 
      elif value_of_hand_two > 18: 
       print "You Lose" 
       return 
      elif value_of_hand_two == 18: 
       print "You hit HOT 18!!!" 
       return 

number_value_of_hand() 

Может ли кто-нибудь понять, почему он возвращается назад, чтобы дать другой вариант ручной работы? И, возможно, как я могу это исправить? Спасибо!

+1

hit_or_stay вызывает number_value_of_hand, который возвращает строку выполнения в начале number_value_of_hand. – M4rtini

+2

Это похоже на классический пример кода, который будет намного проще реализовать в классе – asdf

+1

В функции hit_or_call. добавьте параметр для hand1 \ hand2. Отправьте это обратно на number_value_of_hand и используйте его, чтобы проверить, какая рука для продолжения. – M4rtini

ответ

2

Ваша проблема возникает на этом шаге:

hit_or_stay(hand_two) 

Когда вы нажмете на hand_two, ваш код делает это:

deal_one_card(person) 
value_of_current_cards(person) 
number_value_of_hand() 

Проблема прямо здесь, потому что number_value_of_hand() возвращает вас к началу этой функции, и снова проходит параметры hand_one.

Вы, вероятно, придется переписать number_value_of_hand() функцию, чтобы включить аргумент, который говорит, что, с чего начать (hand_one, hand_two и т.д.)

Я бы, наверное, сделать list рук, итерацию по списку. Затем вы можете позвонить number_of_hands(hands[i]), чтобы быть на i-й руке.

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