Вызывается функция воспроизведения перед моим основным кодом - PullRequest
0 голосов
/ 04 июля 2018

У меня есть два файла. Один с игрой со злым игроком, а другой с функцией загрузки, чтобы играть между строками текста. Моя цель - заменить функции time.sleep () моей функцией загрузки. Первый файл выглядит так:

import random
import time
import test

def game():
    string_o = "Opponent "
    string_u = "User "
    input_n = ""

    input_n = input('Care to try your luck?\n')

    while input_n == 'yes' or input_n == 'y':
        cpu = random.randint(1,6)
        user = random.randint(1,6)
        time.sleep(0.5) 
        print('\nGreat!')
        time.sleep(0.2)
        input_n=input("\nAre you ready?\n")
        time.sleep(0.4)
        print(string_o , cpu)

        #If the gambler's die roll is above three he gets very happy
        if cpu > 3:
            print('Heh, this looks good') 
            time.sleep(0.2)

        #...but if it's lower he gets very anxious
        else:
            ('Oh, no!')     

        test.animate()

        print(string_u , user)

        if cpu < user:
            print('Teach me, master')
        else:
            print('Heh, better luck next time, kid')
            time.sleep()

        input_n = input('\nDo you want to try again?\n')

    print("Heh, didn't think so.\nPlease leave some room for thr big boys")

game()

Другой файл выглядит так:

import itertools
import threading
import time
import sys

done = False
#here is the animation
def animate():
    for c in itertools.cycle(['|', '/', '-', '\\']):
        if done:
            break
        sys.stdout.write('\rloading ' + c)
        sys.stdout.flush()
        time.sleep(0.1)
    sys.stdout.write('\rDone!     ')

t = threading.Thread(target=animate)
t.start()

#would like an x here instead that is defined in the other file
time.sleep(1)
done = True

Проблема в том, что функция animate () отключается до того, как игра начнется.

Я также хотел бы установить время для функции загрузки в моем основном файле игры. Это возможно?

1 Ответ

0 голосов
/ 04 июля 2018

Помещая t.start() вне какой-либо функции в test.py, вы запускаете animate сразу после импорта test.py. Вместо этого вы должны поместить t.start() в функцию. Кроме того, ваш флаг done также установлен на True, когда импортируется test.py, и он всегда сразу прерывает ваш цикл for внутри animate. Я не думаю, что вам действительно нужен этот флаг вообще. Измените test.py на:

import itertools
import threading
import time
import sys

#here is the animation
def animate():
    for c in itertools.cycle(['|', '/', '-', '\\']):
        sys.stdout.write('\rloading ' + c)
        sys.stdout.flush()
        time.sleep(0.1)
    sys.stdout.write('\rDone!     ')

    def start():
        t = threading.Thread(target=animate)
        t.start()

И затем в вашем первом файле вместо прямого вызова test.animate() вместо этого вызовите test.start().

...