144 lines
3.5 KiB
Python
144 lines
3.5 KiB
Python
"""This module handles most user inputs."""
|
|
|
|
__author__ = ""
|
|
__credits__ = ""
|
|
__email__ = ""
|
|
|
|
import sys
|
|
import quartett
|
|
|
|
|
|
def io_str(message: str, options: list) -> str:
|
|
"""
|
|
This method checks if a user input fits the options.
|
|
It also handles 'r' for restarting and 'q' for quitting.
|
|
|
|
:param message: message needs to be a string that is printed for user instruction.
|
|
:param options: options is a list of viable inputs.
|
|
:return: Cleaned user input
|
|
"""
|
|
|
|
while True:
|
|
try:
|
|
i = str(input(message))
|
|
|
|
except (ValueError, NameError):
|
|
i = 0
|
|
print("Eingabe nicht gültig, bitte wiederhole deine Eingabe.")
|
|
|
|
if i in options:
|
|
return i
|
|
|
|
else:
|
|
if i == "q":
|
|
end()
|
|
elif i == "r":
|
|
restart()
|
|
else:
|
|
print('Noch nicht ganz richtig. Hast du deine Auswahl auch richtig geschrieben?')
|
|
|
|
|
|
def io_int(message: str) -> int:
|
|
"""
|
|
This method checks if a user input is an integer >1.
|
|
It also handles 'r' for restarting and 'q' for quitting.
|
|
|
|
:param message: message needs to be a string that is printed for user instruction
|
|
:return: Integer >1
|
|
"""
|
|
while True:
|
|
|
|
unfiltered_input = input(message)
|
|
|
|
if unfiltered_input == "q":
|
|
end()
|
|
elif unfiltered_input == "r":
|
|
restart()
|
|
|
|
try:
|
|
i = int(unfiltered_input)
|
|
|
|
if i >= 1:
|
|
return i
|
|
else:
|
|
print('Bitte gib eine ganze Zahl größer als 0 ein. ')
|
|
|
|
except (ValueError, NameError):
|
|
print("Eingabe nicht gültig, bitte wiederhole deine Eingabe.")
|
|
|
|
|
|
def io_card_selection(message: str):
|
|
"""
|
|
Takes an input message to be printed.
|
|
Checks if user input fits the form 0a - 3h.
|
|
Construct a card dict to be returned.
|
|
|
|
:param message: message needs to be a string that is printed for user instruction
|
|
:return: card dict
|
|
"""
|
|
card_stack = define_card_stack()
|
|
|
|
while True:
|
|
user_input = input(message)
|
|
|
|
if user_input == "":
|
|
print("Eingabe nicht gültig, bitte wiederhole deine Eingabe.")
|
|
|
|
elif len(user_input) > 2:
|
|
print("Eingabe nicht gültig, bitte wiederhole deine Eingabe.")
|
|
|
|
elif user_input[0] in "0123" and user_input[1] in "abcdefgh":
|
|
for c in card_stack:
|
|
if c["number"] == user_input[0] and c["letter"] == user_input[1]:
|
|
return c
|
|
|
|
elif user_input == "q":
|
|
end()
|
|
|
|
elif user_input == "r":
|
|
restart()
|
|
|
|
else:
|
|
print("Eingabe nicht gültig, bitte wiederhole deine Eingabe.")
|
|
|
|
|
|
def define_card_stack():
|
|
"""
|
|
Defines a card stack for comparing values.
|
|
The card stack has the same structure as in
|
|
quartett.initialize()
|
|
|
|
:return: list of dicts
|
|
"""
|
|
card_stack = []
|
|
x = 0
|
|
for i in range(4):
|
|
for l in "abcdefgh":
|
|
d = {"id": str(x), "number": str(i), "letter": l}
|
|
card_stack.append(d)
|
|
x += 1
|
|
|
|
return card_stack
|
|
|
|
|
|
def end():
|
|
"""
|
|
Prints exit screen and quits.
|
|
|
|
:return: None
|
|
"""
|
|
print(
|
|
"---------------------\nSpiel wird beendet...\n---------------------")
|
|
sys.exit()
|
|
|
|
|
|
def restart():
|
|
"""
|
|
Prints restart screen and restarts the game.
|
|
|
|
:return: None
|
|
"""
|
|
print(
|
|
"---------------------\nSpiel wird neu gestartet...\n---------------------")
|
|
quartett.central_function()
|