2016-11-13 4 views
-1

Вот код для игры I a making, на строках 9-13 Я пытаюсь уменьшить скорость голода каждые 180 секунд на 10, но он не работает.Как уменьшить значение переменной со временем

import threading 
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~") 
print("   Welcome to my game") 
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~") 

health = 100 
stamina = 100 
hunger = 100 
def hungerdecrease(h): 
    global hunger 
    threading.Timer(180,hungerdecrease).start() 
    h -= 10 

hungerdecrease(hunger) 

while health > 0 and stamina >0 and hunger >0: 
    if hunger <50: 
     print("You are hungry.") 
    if stamina <10: 
     print("You are feeling exhausted.") 
    if health <50: 
     print("You are unhealthy.") 
print("You are dead") 
+2

'hunger' становится копироваться, поэтому функция изменения только-х копии. – ForceBru

+0

попробуйте добавить return to hungerdecase и сделать 'hunger = hungerdecrease (hunger)'. После редактирования вы не должны изменять голод вместо h? – themistoklik

+0

Я довольно новичок в python, так что простите меня, если мои вопросы звучат глупо, но я не понимаю, что вы имеете в виду, добавив return to hungerdecrease – Wilziam

ответ

0
  • Во-первых, вам не нужно передать значение, так как вы просто передать копию. Просто сделайте переменную глобальной.
  • Затем ваша петля while нуждается в некоторой пассивной задержке, или вы зацикливаете со 100% активным ЦП.
  • вы должны защитить от одновременного доступа вашей health переменного, используя thread.Lock
  • Еще одна проблемы: нить должна прекратить перевооружение или процесс не завершается. Я останавливаюсь перевооружением нити когда health < 0

Минимального полной & проверяемого & рабочего пример, с набором таймера до 1:

import threading,time,sys 

hunger = 100 
stamina = 100 
health = 100 

lock = threading.Lock() 

def hungerdecrease(): 
    global hunger 
    if hunger > 0: 
     # no rearm when dead 
     threading.Timer(1,hungerdecrease).start() # rearm timer 
     lock.acquire() 
     hunger -= 10 
     lock.release() 

threading.Timer(1,hungerdecrease).start() 

lock.acquire() 

while health > 0 and stamina >0 and hunger >0: 
    lock.release() 
    time.sleep(0.5) # so CPU isn't 100% 
    if hunger <50: 
     print("You are hungry.") 
    if stamina <10: 
     print("You are feeling exhausted.") 
    if health <50: 
     print("You are unhealthy.") 
    lock.acquire() 
print("You are dead") 
+1

ok, теперь см. Здесь: http://stackoverflow.com/help/someone-answers –

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