Próbuję zakodować atak na tekstową grę przygodową, w której gracz może zadawać obrażenia mieczem. W konsoli wyświetlana jest losowa liczba, a gracz musi wpisać tę liczbę tak szybko, jak to możliwe. Im szybciej to robią, tym więcej zadają obrażeń. Jak dotąd mam to:
import random
import time
from threading import Timer
def damage(timeAmount, baseDamage):
damageTotal = baseDamage - timeAmount
def sword():
t = 0
timerAmount = 0
randomNumber = random.randint(0, 1000000)
print('Type the following as fast as you can: \n' + str(randomNumber))
swordAttack = input('> ')
while t == 0:
timerAmount = timerAmount + 1
time.sleep(1)
if swordAttack == randomNumber:
t = 1
damage(timerAmount, 10)
print(timerAmount)
sword()
Pierwszą kwestią jest to, że nie mogę wymyślić, jak ustawić licznik czasu, aby zliczał, a następnie uzyskać ten ostatni czas do użycia w formułach obrażeń. Funkcja timera z wątków tylko odlicza w dół i nie mogłem wymyślić, jak dokładnie to przepracować, chociaż gdybyś mógł mi to wyjaśnić w prostych słowach, może to zadziałać.
Drugą kwestią jest to, że muszę to również zrobić, aby licznik czasu aktywował się, gdy tylko dane wejściowe zostaną wyświetlone na ekranie, ale po uruchomieniu instrukcji wejściowej zatrzymuje kod do momentu podania danych wejściowych.
1 odpowiedź
Ok, więc spróbuję w sposób, który wykorzystuje licznik czasu. Jeśli i tak masz obrażenia miecza równe 10, nie ma potrzeby przechodzenia przez 10 do „negatywów”, po prostu wyniesie 0, więc po prostu odlicz od tego, jakie są obrażenia mieczy. Więc jeśli wpiszą to w 2 sekundy, w tym przypadku będzie to 8 obrażeń. Oto kod, który mam do pracy przy użyciu odliczania. Wszystko, co musisz zrobić, to ustawić licznik czasu na jakiekolwiek obrażenia mieczy.
import random
import time
from threading import Timer
def damage(timeAmount, baseDamage):
damageTotal = baseDamage - timeAmount
print(format(damageTotal, '.0f'))
def sword():
user_sword_max_damage = 10
randomNumber = random.randint(0, 10)
timeout = user_sword_max_damage
t = Timer(timeout, print, ['Damage dealt = 0'])
start_time = time.time()
t.start()
while True:
try:
prompt = int(input('Enter ' + str(randomNumber) + ' as fast as you can: '))
if prompt == randomNumber:
t.cancel()
final_time = time.time()-start_time
print(format(final_time, '.0f'))
damage(final_time, user_sword_max_damage)
break
elif prompt != randomNumber:
continue
except:
continue
sword()
Może to również potencjalnie wskazać ci właściwy kierunek, jeśli później dodasz więcej przedmiotów obrażeń. Jedyną częścią, której nie dodałem, jest logika ustawiania wartości szkody ogółem na 0, jeśli skończy się czas, który powinieneś być w stanie umieścić w instrukcji if w pętli while (bądź uprzejmy, to moja pierwsza próba odpowiedzi ha, ale Mam nadzieję, że to pomoże)
Podobne pytania
Nowe pytania
python
Python to wielozadaniowy, wielozadaniowy język programowania dynamicznie typowany. Został zaprojektowany tak, aby był szybki do nauczenia się, zrozumienia i użycia oraz wymuszania czystej i jednolitej składni. Należy pamiętać, że Python 2 oficjalnie nie jest obsługiwany od 01-01-2020. Mimo to, w przypadku pytań Pythona specyficznych dla wersji, dodaj znacznik [python-2.7] lub [python-3.x]. Korzystając z wariantu Pythona (np. Jython, PyPy) lub biblioteki (np. Pandas i NumPy), należy umieścić go w tagach.
start = time.time()
- i na końcu -end = time.time()
- i obliczend - start
, aby uzyskać, ile czasu to zajmie.input()
z inną rzeczą, musisz uruchomićinput()
lub inną rzecz w oddzielnym wątku.