Add android ui
This commit is contained in:
31
android_ui.py
Normal file
31
android_ui.py
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import androidhelper
|
||||||
|
|
||||||
|
|
||||||
|
droid = androidhelper.Android()
|
||||||
|
|
||||||
|
|
||||||
|
def query(text):
|
||||||
|
droid.ttsSpeak(text)
|
||||||
|
result = droid.dialogGetInput("", text).result
|
||||||
|
while result is None:
|
||||||
|
result = droid.dialogGetInput("", text).result
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
def query_int(text):
|
||||||
|
try:
|
||||||
|
ans = query(text)
|
||||||
|
return int(ans)
|
||||||
|
except ValueError:
|
||||||
|
droid.makeToast("Please enter a valid number!")
|
||||||
|
return query_int(text)
|
||||||
|
|
||||||
|
|
||||||
|
def query_yes_no(question):
|
||||||
|
droid.ttsSpeak(question)
|
||||||
|
droid.dialogCreateAlert("", question)
|
||||||
|
droid.dialogSetPositiveButtonText("Yes")
|
||||||
|
droid.dialogSetNegativeButtonText("No")
|
||||||
|
droid.dialogShow()
|
||||||
|
resp = droid.dialogGetResponse().result
|
||||||
|
return resp["which"] == "positive"
|
||||||
43
terminal_ui.py
Normal file
43
terminal_ui.py
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
def query(text):
|
||||||
|
return input(f"{text} \n> ")
|
||||||
|
|
||||||
|
|
||||||
|
def query_int(text):
|
||||||
|
try:
|
||||||
|
ans = query(text)
|
||||||
|
return int(ans)
|
||||||
|
except ValueError:
|
||||||
|
print("Please enter a valid number!")
|
||||||
|
return query_int(text)
|
||||||
|
|
||||||
|
|
||||||
|
def query_yes_no(question, default="no"):
|
||||||
|
"""Ask a yes/no question via raw_input() and return their answer.
|
||||||
|
|
||||||
|
https://stackoverflow.com/questions/3041986/apt-command-line-interface-like-yes-no-input
|
||||||
|
|
||||||
|
"question" is a string that is presented to the user.
|
||||||
|
"default" is the presumed answer if the user just hits <Enter>.
|
||||||
|
It must be "yes" (the default), "no" or None (meaning
|
||||||
|
an answer is required of the user).
|
||||||
|
|
||||||
|
The "answer" return value is True for "yes" or False for "no".
|
||||||
|
"""
|
||||||
|
valid = {"yes": True, "y": True, "ye": True, "no": False, "n": False}
|
||||||
|
if default is None:
|
||||||
|
prompt = " [y/n] "
|
||||||
|
elif default == "yes":
|
||||||
|
prompt = " [Y/n] "
|
||||||
|
elif default == "no":
|
||||||
|
prompt = " [y/N] "
|
||||||
|
else:
|
||||||
|
raise ValueError("invalid default answer: '%s'" % default)
|
||||||
|
|
||||||
|
while True:
|
||||||
|
choice = query(question + prompt).lower()
|
||||||
|
if default is not None and choice == "":
|
||||||
|
return valid[default]
|
||||||
|
elif choice in valid:
|
||||||
|
return valid[choice]
|
||||||
|
else:
|
||||||
|
print("Please respond with 'yes' or 'no' (or 'y' or 'n').")
|
||||||
62
wizard.py
62
wizard.py
@@ -1,57 +1,17 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
|
try:
|
||||||
|
import android_ui as ui
|
||||||
|
except ImportError:
|
||||||
|
import terminal_ui as ui
|
||||||
|
|
||||||
MIN_CELL_WIDTH = 15
|
MIN_CELL_WIDTH = 15
|
||||||
|
|
||||||
|
|
||||||
def query(text):
|
|
||||||
return input(f"{text} \n> ")
|
|
||||||
|
|
||||||
|
|
||||||
def query_int(text):
|
|
||||||
try:
|
|
||||||
ans = query(text)
|
|
||||||
return int(ans)
|
|
||||||
except ValueError:
|
|
||||||
print("Please enter a valid number!")
|
|
||||||
return query_int(text)
|
|
||||||
|
|
||||||
|
|
||||||
def clear():
|
def clear():
|
||||||
os.system("cls" if os.name in ("nt", "dos") else "clear")
|
os.system("cls" if os.name in ("nt", "dos") else "clear")
|
||||||
|
|
||||||
|
|
||||||
def query_yes_no(question, default="yes"):
|
|
||||||
"""Ask a yes/no question via raw_input() and return their answer.
|
|
||||||
|
|
||||||
https://stackoverflow.com/questions/3041986/apt-command-line-interface-like-yes-no-input
|
|
||||||
|
|
||||||
"question" is a string that is presented to the user.
|
|
||||||
"default" is the presumed answer if the user just hits <Enter>.
|
|
||||||
It must be "yes" (the default), "no" or None (meaning
|
|
||||||
an answer is required of the user).
|
|
||||||
|
|
||||||
The "answer" return value is True for "yes" or False for "no".
|
|
||||||
"""
|
|
||||||
valid = {"yes": True, "y": True, "ye": True, "no": False, "n": False}
|
|
||||||
if default is None:
|
|
||||||
prompt = " [y/n] "
|
|
||||||
elif default == "yes":
|
|
||||||
prompt = " [Y/n] "
|
|
||||||
elif default == "no":
|
|
||||||
prompt = " [y/N] "
|
|
||||||
else:
|
|
||||||
raise ValueError("invalid default answer: '%s'" % default)
|
|
||||||
|
|
||||||
while True:
|
|
||||||
choice = query(question + prompt).lower()
|
|
||||||
if default is not None and choice == "":
|
|
||||||
return valid[default]
|
|
||||||
elif choice in valid:
|
|
||||||
return valid[choice]
|
|
||||||
else:
|
|
||||||
print("Please respond with 'yes' or 'no' (or 'y' or 'n').")
|
|
||||||
|
|
||||||
|
|
||||||
def remove_line(d):
|
def remove_line(d):
|
||||||
for key in d.keys():
|
for key in d.keys():
|
||||||
del d[key][-1]
|
del d[key][-1]
|
||||||
@@ -98,7 +58,7 @@ def main():
|
|||||||
clear()
|
clear()
|
||||||
print("Welcome! This is WiZaRδ!\n")
|
print("Welcome! This is WiZaRδ!\n")
|
||||||
|
|
||||||
players = [name.strip() for name in query("Enter Player Names (separated by comma)").split(",")]
|
players = [name.strip() for name in ui.query("Enter Player Names (separated by comma)").split(",")]
|
||||||
guesses = {player: [] for player in players}
|
guesses = {player: [] for player in players}
|
||||||
results = {player: [] for player in players}
|
results = {player: [] for player in players}
|
||||||
|
|
||||||
@@ -118,10 +78,10 @@ def main():
|
|||||||
guess_sum = 0
|
guess_sum = 0
|
||||||
for j in range(i, i + len(players)):
|
for j in range(i, i + len(players)):
|
||||||
player = players[j % len(players)]
|
player = players[j % len(players)]
|
||||||
guess = query_int(f"{player}, enter your guess{f' (not {i - guess_sum})' if j == i + len(players) - 1 and i > 3 else ''}!")
|
guess = ui.query_int(f"{player}, enter your guess{f' (not {i - guess_sum})' if j == i + len(players) - 1 and i > 3 else ''}!")
|
||||||
guesses[player] += [guess]
|
guesses[player] += [guess]
|
||||||
guess_sum += guess
|
guess_sum += guess
|
||||||
if not query_yes_no("Reenter guesses?", default="no"):
|
if not ui.query_yes_no("Reenter guesses?"):
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
remove_line(guesses)
|
remove_line(guesses)
|
||||||
@@ -129,15 +89,16 @@ def main():
|
|||||||
# PRINT STANDINGS
|
# PRINT STANDINGS
|
||||||
print()
|
print()
|
||||||
print_standings(players, guesses, results)
|
print_standings(players, guesses, results)
|
||||||
|
input("\nPress enter to continue...")
|
||||||
|
|
||||||
# INPUT RESULTS
|
# INPUT RESULTS
|
||||||
print()
|
print()
|
||||||
while True:
|
while True:
|
||||||
for j in range(i, i + len(players)):
|
for j in range(i, i + len(players)):
|
||||||
player = players[j % len(players)]
|
player = players[j % len(players)]
|
||||||
result = query_int(f"{player}, how many tricks did you take?")
|
result = ui.query_int(f"{player}, how many tricks did you take?")
|
||||||
results[player] += [result]
|
results[player] += [result]
|
||||||
if not query_yes_no("Reenter results?", default="no"):
|
if not ui.query_yes_no("Reenter results?"):
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
remove_line(results)
|
remove_line(results)
|
||||||
@@ -145,6 +106,7 @@ def main():
|
|||||||
# PRINT STANDINGS
|
# PRINT STANDINGS
|
||||||
print()
|
print()
|
||||||
print_standings(players, guesses, results)
|
print_standings(players, guesses, results)
|
||||||
|
input("\nPress enter to continue...")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
Reference in New Issue
Block a user