Skip to content
Snippets Groups Projects
Commit 6250fa87 authored by Henrik Koskinen's avatar Henrik Koskinen
Browse files

Upload New File

parent 222a2a2d
No related branches found
No related tags found
No related merge requests found
"""
Henrik Koskinen
GUI- program
This program is a game where the goal is to get Strenght stat to 9000.
Game rules are implemented in the program, so in order to read them, run the
program and click on Game rules button to open a message where the mechanics
of the game are explained.
"""
from tkinter import *
top = None
class Player:
def __init__(self):
self.__mainwindow = Tk()
self.__mainwindow.title("Get bigger! Stay healthy!")
self.__mainwindow.configure(bg="black")
self.__power = 1000
self.__health = 100
self.__sleep = []
self.__badly_slept = 0
self.__no_sleep = 0
self.__rested_days = 0
self.__pain = 0
self.__hydration = 100
self.__losses = 0
self.__wins = 0
self.__new_power = Entry(self.__mainwindow,fg="white",bg="grey")
self.__food = Entry(self.__mainwindow,fg="white",bg="grey")
self.__amount_of_sleep = Entry(self.__mainwindow,fg="white",bg="grey")
self.__amount_of_pain = Entry(self.__mainwindow,fg="white",bg="grey")
self.__amount_of_water = Entry(self.__mainwindow,fg="white",bg="grey")
self.__label_stat_power = Label(self.__mainwindow,text="Strenght",
fg="green",bg="black")
self.__label_stat_health = Label(self.__mainwindow,text="Health",fg="green",bg="black")
self.__label_stat_sleep = Label(self.__mainwindow,text="Rested",
fg="green",bg="black")
self.__label_stat_pain = Label(self.__mainwindow,text="PAIN!",
fg="green",bg="black")
self.__label_stat_hydr = Label(self.__mainwindow,text="Hydration",
fg="green",bg="black")
self.__label_power = Label(self.__mainwindow,text=self.__power,
fg="white",bg="black")
self.__label_health = Label(self.__mainwindow,text=self.__health,
fg="white",bg="black")
self.__label_sleep = Label(self.__mainwindow,text=self.__sleep,
fg="white",bg="black")
self.__label_pain = Label(self.__mainwindow,text=self.__pain,
fg="white",bg="black")
self.__label_hydration = Label(self.__mainwindow,text=self.__hydration,
fg="white",bg="black")
self.__explanation_status = Label(self.__mainwindow,text="Status:",
fg="White",bg="black")
self.__explanation_stats = Label(self.__mainwindow,
text="Stats:",
fg="White", bg="black")
self.__explanation_entry = Label(self.__mainwindow,
text="Entry:",
fg="White", bg="black")
self.__explanation_status.grid(row=0,column=0)
self.__explanation_stats.grid(row=0, column=1)
self.__explanation_entry.grid(row=0, column=2)
self.__label_stat_power.grid(row=1, column=0)
self.__label_power.grid(row=1,column=1)
self.__new_power.grid(row=1,column=2)
self.__power_values = Label(text="1-1000",fg="white",bg="black")
self.__power_values.grid(row=1,column=3)
self.__label_stat_health.grid(row=2, column=0)
self.__label_health.grid(row=2,column=1)
self.__food.grid(row=2,column=2)
self.__health_values = Label(text="1-15", fg="white", bg="black")
self.__health_values.grid(row=2, column=3)
self.__label_stat_sleep.grid(row=3, column=0)
self.__label_sleep.grid(row=3,column=1)
self.__amount_of_sleep.grid(row=3,column=2)
self.__sleep_values = Label(text="1-9", fg="white", bg="black")
self.__sleep_values.grid(row=3, column=3)
self.__label_stat_pain.grid(row=4, column=0)
self.__label_pain.grid(row=4,column=1)
self.__amount_of_pain.grid(row=4,column=2)
self.__pain_values = Label(text="1-7", fg="white", bg="black")
self.__pain_values.grid(row=4, column=3)
self.__label_stat_hydr.grid(row=5, column=0)
self.__label_hydration.grid(row=5,column=1)
self.__amount_of_water.grid(row=5,column=2)
self.__water_values = Label(text="1-15", fg="white", bg="black")
self.__water_values.grid(row=5, column=3)
self.button_stop = Button(self.__mainwindow,text="Exit",command=self.stop
,fg="black",bg="red")
self.button_stop.grid(row=6,column=0)
self.__new_day_button = Button(self.__mainwindow,text="New day",
command=self.new_day,fg="black",
bg="green")
self.__new_day_button.grid(row=6,column=2)
self.__result = Label(text="",fg="black",bg="black")
self.__result.grid(row=7,column=0,columnspan=4)
self.__reset_button = Button(self.__mainwindow,text="Reset",command=self.reset,fg="yellow",bg="black")
self.__reset_button.grid(row=6,column=1)
self.__rules_button = Button(self.__mainwindow, text="Game rules",
command=self.game_rules, fg="black",
bg="grey")
self.__rules_button.grid(row=6, column=3)
self.__usable = Label(self.__mainwindow,text="Useable values:",fg="white",bg="black")
self.__usable.grid(row=0, column=3)
self.__label_losses = Label(self.__mainwindow, text="Losses: ",fg="red",bg="black")
self.__amount_of_losses = Label(self.__mainwindow,text=self.__losses,fg="red",bg="black")
self.__label_losses.grid(row=9,column=3,sticky=E)
self.__amount_of_losses.grid(row=9,column=4,sticky=W)
self.__label_wins = Label(self.__mainwindow, text="Wins: ",
fg="blue", bg="black")
self.__amount_of_wins = Label(self.__mainwindow, text=self.__wins,
fg="blue", bg="black")
self.__label_wins.grid(row=8, column=3, sticky=E)
self.__amount_of_wins.grid(row=8, column=4, sticky=W)
def new_day(self):
self.power()
self.rested()
self.health()
self.configure_stats()
self.__new_power.delete(0,END)
self.__food.delete(0,END)
self.__amount_of_sleep.delete(0,END)
self.__amount_of_pain.delete(0,END)
self.__amount_of_water.delete(0,END)
def power(self):
pain = self.check_values(self.__amount_of_pain.get())
new_power = self.check_values(self.__new_power.get())
starting_str = 1000
if new_power == "" or pain == "":
self.__power -= 200
self.check_die("Strenght")
else:
if int(new_power) >= starting_str:
new_power = starting_str
self.__pain += int(pain)
self.check_die("PAIN!")
if self.__health <= 50:
new_power = int(new_power)/2
self.__power += new_power
self.victory()
else:
self.__pain += int(pain)
self.check_die("PAIN!")
if self.__health <= 50:
new_power = int(new_power)/2
self.__power += int(new_power)
self.victory()
def rested(self):
rested_time = self.check_values(self.__amount_of_sleep.get())
pain = self.check_values(self.__amount_of_pain.get())
new_power = self.check_values(self.__new_power.get())
if new_power != "" and pain != "":
self.__rested_days = 0
if new_power == "" and pain == "" and rested_time != "":
self.__rested_days += 1
if rested_time == "":
rested_time = 0
self.__no_sleep += 1
self.__badly_slept += 1
if int(rested_time) > 0:
if int(rested_time) < 6:
self.__badly_slept += 1
self.__no_sleep = 0
if int(rested_time) >= 6:
self.__badly_slept -= 2
self.__no_sleep = 0
if int(rested_time) >= 9:
rested_time = 9
if self.__rested_days >= 2:
self.__pain -= 2
self.__sleep.append(rested_time)
if len(self.__sleep) == 4:
self.__sleep.remove(self.__sleep[0])
self.check_die("Sleep")
def health(self):
max_recover_per_day = 15
water = self.check_values(self.__amount_of_water.get())
food = self.check_values(self.__food.get())
if water == "":
self.__hydration -= 5
self.check_die("Hydration")
else:
if int(water) >= max_recover_per_day:
water = max_recover_per_day
self.__hydration += int(water)
if food == "":
self.__health -= 10
self.check_die("Health")
else:
if int(food) >= max_recover_per_day:
food = max_recover_per_day
self.__health += int(food)
def configure_stats(self):
if self.__health <= 0:
self.__health = 0
self.__label_health.configure(text=self.__health)
self.__label_stat_health.configure(text="Dead", fg="red",
bg="black")
else:
if self.__health >= 100:
self.__health = 100
self.__label_health.configure(text=self.__health)
self.__label_stat_health.configure(text="Health", fg="green",
bg="black")
if self.__badly_slept >= 3:
if self.__no_sleep == 3:
self.__label_stat_sleep.configure(text="Exhausted", fg="red",
bg="black")
self.__label_sleep.configure(text=self.__sleep, fg="white",
bg="black")
else:
self.__label_stat_sleep.configure(text="Tired", fg="yellow",
bg="black")
self.__power = self.__power / 2
self.__label_sleep.configure(text=self.__sleep, fg="white",
bg="black")
else:
self.__label_stat_sleep.configure(text="Rested", fg="green",
bg="black")
self.__label_sleep.configure(text=self.__sleep, fg="white",
bg="black")
if self.__hydration <= 50:
if self.__hydration <= 0:
self.__hydration = 0
self.__label_hydration.configure(
text="{:0.0f}".format(self.__hydration))
self.__label_stat_hydr.configure(text="Dehydrated",
fg="red",
bg="black")
else:
self.__label_hydration.configure(
text="{:0.0f}".format(self.__hydration))
self.__label_stat_hydr.configure(text="Dehydrated", fg="yellow",
bg="black")
else:
if self.__hydration >= 100:
self.__hydration = 100
self.__label_hydration.configure(
text="{:0.0f}".format(self.__hydration))
self.__label_stat_hydr.configure(text="Hydrated", fg="green",
bg="black")
if self.__pain <= 7:
if self.__pain <= 0:
self.__pain = 0
self.__label_pain.configure(
text="{:0.0f}".format(self.__pain))
self.__label_stat_pain.configure(text="PAIN!", fg="green",
bg="black")
if self.__power <= 0:
self.__power = 0
self.__label_stat_power.configure(text="Strenght",
fg="red", bg="black")
self.__label_power.configure(text="{:0.0f}".format(self.__power))
else:
self.__label_stat_power.configure(text="Strenght",
fg="green", bg="black")
self.__label_power.configure(text="{:0.0f}".format(self.__power))
def check_die(self,prompt):
if prompt == "PAIN!":
if self.__pain > 7:
self.__label_stat_pain.configure(text="PAIN!", fg="red",
bg="black")
self.__result.configure(
text="Your body didn't handle the PAIN! You died."
, fg="red", bg="black")
self.add_loss()
self.__new_day_button.grid_forget()
elif prompt == "Hydration":
if self.__hydration <= 0:
self.__result.configure(
text="You dried up like a raisin."
, fg="red", bg="black")
self.add_loss()
self.__new_day_button.grid_forget()
elif prompt == "Sleep":
if self.__no_sleep == 3:
self.__result.configure(
text="You started seeing hallucinations and died from lack of sleep."
, fg="red", bg="black")
self.add_loss()
self.__new_day_button.grid_forget()
elif prompt == "Strenght":
if self.__power <= 0:
self.__result.configure(text="You died because your {} reached 0".format(prompt)
,fg="red",bg="black")
self.add_loss()
self.__new_day_button.grid_forget()
elif prompt == "Health":
if self.__health <= 0:
self.__result.configure(text="You died because your {} reached 0".format(prompt)
,fg="red",bg="black")
self.add_loss()
self.__new_day_button.grid_forget()
else:
pass
def add_loss(self):
self.__losses += 1
self.__amount_of_losses.configure(text=self.__losses)
def check_values(self, value):
try:
new_value = int(value)
if new_value <= 0:
new_value = ""
return new_value
except ValueError:
new_value = ""
return new_value
def victory(self):
if self.__power >= 9000:
self.__label_stat_power.configure(text="Strenght",
fg="blue", bg="black")
self.__label_power.configure(text="{:0.0f}".format(self.__power))
self.__result.configure(
text="IT'S OVER 9000! You have won!"
, fg="blue", bg="black")
self.__wins += 1
self.__amount_of_wins.configure(text=self.__wins)
self.__new_day_button.grid_forget()
else:
pass
def reset(self):
self.__power = 1000
self.__health = 100
self.__sleep = []
self.__badly_slept = 0
self.__no_sleep = 0
self.__rested_days = 0
self.__pain = 0
self.__hydration = 100
self.__label_power.configure(text="{:0.0f}".format(self.__power))
self.__label_health.configure(text="{:0.0f}".format(self.__health))
self.__label_sleep.configure(text="")
self.__label_pain.configure(text="{}".format(self.__pain))
self.__label_hydration.configure(text="{:0.0f}".format(self.__hydration))
self.__new_power.delete(0, END)
self.__food.delete(0, END)
self.__amount_of_sleep.delete(0, END)
self.__amount_of_pain.delete(0, END)
self.__amount_of_water.delete(0, END)
self.__label_stat_sleep.configure(text="Rested",fg="green",bg="black")
self.__label_stat_hydr.configure(text="Hydrated",fg="green",bg="black")
self.__label_stat_health.configure(text="Health",fg="green",bg="black")
self.__label_stat_power.configure(text="Strenght",fg="green",bg="black")
self.__label_stat_pain.configure(text="PAIN!",fg="green",bg="black")
self.__new_day_button.grid(row=6,column=2)
self.__result.configure(text="")
def stop(self):
self.__mainwindow.destroy()
def start(self):
self.__mainwindow.mainloop()
def rules_reset(self):
global top
top.destroy()
top = None
def game_rules(self):
global top
if top is None:
top = Toplevel()
top.title("Game rules: ")
top.configure(bg="black")
msg = Message(top,text= " Your goal in this game is to get Strength to 9000 or over. \n"
"Rules are simple: If you enter value that is lower than 1 it will be classified as an empty entry.\n"
"Entering anything else than an interger it will be classified as an empty entry. \n"
"Entering a value bigger than given range, it will be lowered to the max value of given range.\n"
"\n"
" You can't get more strenght if you don't give PAIN! value bigger than 0. No pain no gain. \n"
"And you can't have pain if you don't give strenght value bigger than 0. \n"
"When any stat other than PAIN! or rested reaches 0 you die. \n"
"If your PAIN! gets bigger than 7 you die. You can lower pain by resting 2 days or more in a row without training. \n"
"Not sleeping at all for 3 days in a row (you give rested 3 values that are 0 or empty) you die. \n"
"If you sleep badly for 3 days in a row (you give rested 3 values that are 6 or lower but bigger or equal to 1)"
" your Strenght will be halved.\n"
"\n"
" Having health lower than 50 halves your strenght gains. \n"
"By clicking New day button given entries are calculated to your stats. \n"
"Stats are lowered each New day, if you don't give them any value, by a certain amount. \n"
"Exit button closes the game. Reset resets everything so you can start again. \n"
"Except Wins and Losses are not reseted, you can't escape the shame unless you close the game.",fg="white",bg="black")
msg.grid(row=0,column=0,columnspan=7)
self.button_stop = Button(top, text="Close", command=self.rules_reset,
fg="black", bg="grey")
self.button_stop.grid(row=16, column=1)
top.protocol("WM_DELETE_WINDOW", self.rules_reset)
else:
pass
def main():
playing = Player()
playing.start()
main()
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment