Изменения объектов в бесконечном цикле по ходу цикла: обновление величины по времени в игре

195 просмотра
0
0 Комментариев

Недавно начал изучать питон, есть задумка сделать крайне примитивную игру.
Для накопления ресурса — золото с последующим постепенным увеличением, использую функцию с бесконечным циклом.

import time
 
current_gold = 100
def gold(current_gold):
    while True:
        print(current_gold)
        time.sleep(1)
        current_gold += 10
 
gold(current_gold)
current_gold -= 50  # test
current_gold -= 50  # test

Как мне в реальном времени менять current_gold? Тут нужно все загонять в класс или нужна еще одна функция, которая будет ссылаться на существующую gold(current_gold) только с аргументом gold(current_gold - 100) или как лучше реализовать?


Добавить комментарий

1 Ответы

Python Опубликовано 18.12.2018
0

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

import time
 
user_start = time.time()  # Время unixtime когда пользователь начал накапливать ресурс

Теперь при обращении к объекту пользователя Вы считаете в реальном времени:

new_balance = (time.time() - user_start) * 10

И возвращаете кол-во ресурса за пройденное время, вот класс, который это реализует:

import time
 
class GoldInGame(object):
    def __init__(self):
        self.start_time = int(time.time())
        self.my_gold = 0
        self.gold_in_sec = 1  # количество золота в секунду
 
    def now_my_gold(self):
        now = int(time.time())
        self.my_gold += (now - self.start_time) * self.gold_in_sec
        self.start_time = now
        return self.my_gold
 
    def upgrade_user(self, point):
        self.gold_in_sec += point
        print('now my gold in sec', self.gold_in_sec)
        self.start_time = int(time.time())
        return True
 
user_gold = GoldInGame()
time.sleep(2)
now = user_gold.now_my_gold()
print(now)
user_gold.upgrade_user(1)
time.sleep(2)
now = user_gold.now_my_gold()
print(now)
user_gold.upgrade_user(1)
time.sleep(2)
now = user_gold.now_my_gold()
print(now)
time.sleep(10)
now = user_gold.now_my_gold()
print(now)
time.sleep(2)
now = user_gold.now_my_gold()
print(now)

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up