From 2f8376a33f10f8a29a762e1b8f539a223ee14054 Mon Sep 17 00:00:00 2001 From: perfectly-panda Date: Sat, 11 Jun 2022 10:58:56 -0400 Subject: [PATCH 1/6] fix type --- 0.5 Controlling Program Flow.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/0.5 Controlling Program Flow.ipynb b/0.5 Controlling Program Flow.ipynb index cc7c91f..812706d 100644 --- a/0.5 Controlling Program Flow.ipynb +++ b/0.5 Controlling Program Flow.ipynb @@ -14,7 +14,7 @@ "\n", "## Sequential\n", "\n", - "This is the most basic way of controlling the order of statements, and the one we've already been moving. It just means that normally statements will be run from top to bottom unless something changes the flow." + "This is the most basic way of controlling the order of statements, and the one we've already been using. It just means that normally statements will be run from top to bottom unless something changes the flow." ] }, { From f53820861a436fb40f43beead502d6faf482feea Mon Sep 17 00:00:00 2001 From: perfectly-panda Date: Sat, 18 Jun 2022 10:59:00 -0400 Subject: [PATCH 2/6] fix unused library --- 1.2 Project Setup.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1.2 Project Setup.ipynb b/1.2 Project Setup.ipynb index 894ef36..44a8770 100644 --- a/1.2 Project Setup.ipynb +++ b/1.2 Project Setup.ipynb @@ -65,7 +65,7 @@ "Now that we have a seperate environment there are a couple of packages that we'll need for this project. `pip install {package name}` is the command we need to run. We can add multiple packages by listing them with spaces in between.\n", "\n", "```\n", - "pip install python-dotenv discord.py discord-py-interactions\n", + "pip install python-dotenv discord-py-interactions\n", "```\n", "\n", "If you get the error 'Fatal error in launcher: Unable to create process using.....' try running `python -m pip install --upgrade pip`\n", From 16c2c8541f661076ddd04c1ab86d419a6411b673 Mon Sep 17 00:00:00 2001 From: perfectly-panda Date: Sat, 2 Jul 2022 12:25:57 -0400 Subject: [PATCH 3/6] broken version --- Bot/game.py | 1 - broken version/bot.py | 60 +++++++++++++++++++++++++++++++++++++ broken version/encounter.py | 39 ++++++++++++++++++++++++ broken version/game.py | 56 ++++++++++++++++++++++++++++++++++ broken version/mob.py | 14 +++++++++ broken version/player.py | 17 +++++++++++ 6 files changed, 186 insertions(+), 1 deletion(-) create mode 100644 broken version/bot.py create mode 100644 broken version/encounter.py create mode 100644 broken version/game.py create mode 100644 broken version/mob.py create mode 100644 broken version/player.py diff --git a/Bot/game.py b/Bot/game.py index 038f9f7..4800339 100644 --- a/Bot/game.py +++ b/Bot/game.py @@ -18,7 +18,6 @@ def get_player(self, player_id): def create_encounter(self, player_id): encounter = self.encounters.get(player_id) - print(encounter) if encounter: return f"""Current Status: Player HP: {self.players[player_id].current_hp} diff --git a/broken version/bot.py b/broken version/bot.py new file mode 100644 index 0000000..9b78438 --- /dev/null +++ b/broken version/bot.py @@ -0,0 +1,60 @@ +import os + +import interactions +from dotenv import load_dotenv + +from game import Game + +load_dotenv() +TOKEN = os.getenv("DISCORD_TOKEN") +GUILD = int(os.getenv("GUILD_ID")) + +client = interactions.Client(token=TOKEN) +game = Game() + +@client.event +async def on_ready(): + print("Client is connected to Discord") + +@client.command( + name="getstats", + description="Get your player stats", + scope=GUILD +) +async def get_stats(ctx: interactions.CommandContext): + player = game.get_player(str(ctx.member.id)) + await ctx.send(f"""{ctx.member.user.username}, here are your stats: + + Attack: {player.attack} + HP: {player.hp} + XP: {player.xp} + """) + +@client.command( + name="encounter", + description="Create a new encounter", + scope=GUILD +) +async def create_encounter(ctx: interactions.CommandContext): + encounter = game.create_encounter(str(ctx.member.id)) + await ctx.send(encounter) + +@client.command( + name="run", + description="Run away!!!!!", + scope=GUILD +) +async def run_away(ctx: interactions.CommandContext): + result = game.complete_encounter(str(ctx.member.id)) + await ctx.send(result) + +@client.command( + name="attack", + description="Attack!!!!!", + scope=GUILD +) +async def run_away(ctx: interactions.CommandContext): + result = game.attack(str(ctx.member.id)) + await ctx.send(result) + +client.start() \ No newline at end of file diff --git a/broken version/encounter.py b/broken version/encounter.py new file mode 100644 index 0000000..5e12d52 --- /dev/null +++ b/broken version/encounter.py @@ -0,0 +1,39 @@ +from player import Player +from mob import Mob +from enum import Enum + +class Result(Enum): + CONTINUE = 1 + WIN = 2 + LOSE = 3 + + +class ActionResult: + def __init__(self, result, text): + self.result = result + self.text = text + +class Encounter: + def __init__(self, player: Player): + self.mob = Mob() + self.player = player + + def attack(self): + # player to calc attack damage + damage = self.player.do_attack() + # mob takes damage + mob_result = self.mob.take_damage(damage) # mob will take damage and return whether it is alive + # if mob is still alive + if mob_result: + # calcatulate mob damage + mob_damage = self.mob.do_attack() + # player takes damage + player_result = self.player.take_damage(mob_damage) + # if player health == 0, player losses + if player_result: + return ActionResult(Result.CONTINUE, f"Player attacked for {damage}. Mob attacked with {mob_damage}.") + else: + return ActionResult(Result.LOSE, f"Player attacked for {damage}. Mob attacked with {mob_damage}. Player fainted.") + # if mob dies - player wins + else: + return ActionResult(Result.WIN, f"Player attacked for {damage}. Mob fainted.") \ No newline at end of file diff --git a/broken version/game.py b/broken version/game.py new file mode 100644 index 0000000..4a39760 --- /dev/null +++ b/broken version/game.py @@ -0,0 +1,56 @@ +from player import Player +from encounter import Encounter, Result + +class Game: + + def __init__(self): + self.players = {} + self.encounters = {} + + def get_player(self, player_id): + player = self.players.get(player_id) #self.players[player_id] throws an error if it's not there + if player: + return player + else: + self.players[player_id] = Player(player_id, 0, 1, 10) + return self.players[player_id] + +#if we have one for a player, let them know what current status + def create_encounter(self, player_id): + encounter = self.encounters.get(player_id) + if encounter: + return f"""Current encounter: + Player HP: {self.players[player_id].hp} + Mob HP: {encounter.mob.hp} + """ + else: + player = self.get_player(player_id) + self.encounters[player_id] = Encounter(player) + return "Encounter created." + + def attack(self, player_id): + player = self.get_player(player_id) + encounter = self.encounters.get(player_id) + if encounter is None: + self.encounters[player_id] = Encounter(player) + encounter = self.encounters[player_id] + + result = encounter.attack() + + if result == Result.CONTINUE: #encounter continues + #save the data to the "database" + self.encounters[player_id] = encounter + self.players[player_id] = encounter.player + else: + self.players[player_id] = encounter.player + self.complete_encounter(player_id) + + return result.text + + def complete_encounter(self, player_id): + encounter = self.encounters.get(player_id) + if encounter: + del self.encounters[player_id] + return "Player ran away." + else: + return "Encounter not found." \ No newline at end of file diff --git a/broken version/mob.py b/broken version/mob.py new file mode 100644 index 0000000..4b3f1f1 --- /dev/null +++ b/broken version/mob.py @@ -0,0 +1,14 @@ +from random import randrange + +class Mob: + def __init__(self): + self.hp = 5 + self.attack = 1 + self.xp = 2 + + def do_attack(self): + return self.attack + randrange(2) + + def take_damage(self, damage): + self.hp -= damage # self.hp - damage + return self.hp > 0 \ No newline at end of file diff --git a/broken version/player.py b/broken version/player.py new file mode 100644 index 0000000..f991d5d --- /dev/null +++ b/broken version/player.py @@ -0,0 +1,17 @@ +from random import randrange + +class Player: + def __init__(self, id, xp=0, attack=0, hp=0): + self.id = id + self.attack = attack + self.hp = hp + self.xp = xp + + def do_attack(self): + return self.attack + randrange(4) + + def take_damage(self, damage): + self.hp -= damage + if self.hp < 0: + self.hp = 0 + return self.hp > 0 \ No newline at end of file From 450905e6af5efe95c3235a39a7515cd27ab2687e Mon Sep 17 00:00:00 2001 From: PerfectlyPanda Date: Sat, 26 Nov 2022 10:47:21 -0500 Subject: [PATCH 4/6] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fb215d5..5dca7f4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Into to Python -## Healthy Gamer Discord 2022 +## Healthy Gamer Discord ## Project Structure From 40552c80a90c1bdad956ff1250c2940fb26f6595 Mon Sep 17 00:00:00 2001 From: PerfectlyPanda Date: Sat, 26 Nov 2022 10:47:34 -0500 Subject: [PATCH 5/6] Delete broken version directory --- broken version/bot.py | 60 ------------------------------------- broken version/encounter.py | 39 ------------------------ broken version/game.py | 56 ---------------------------------- broken version/mob.py | 14 --------- broken version/player.py | 17 ----------- 5 files changed, 186 deletions(-) delete mode 100644 broken version/bot.py delete mode 100644 broken version/encounter.py delete mode 100644 broken version/game.py delete mode 100644 broken version/mob.py delete mode 100644 broken version/player.py diff --git a/broken version/bot.py b/broken version/bot.py deleted file mode 100644 index 9b78438..0000000 --- a/broken version/bot.py +++ /dev/null @@ -1,60 +0,0 @@ -import os - -import interactions -from dotenv import load_dotenv - -from game import Game - -load_dotenv() -TOKEN = os.getenv("DISCORD_TOKEN") -GUILD = int(os.getenv("GUILD_ID")) - -client = interactions.Client(token=TOKEN) -game = Game() - -@client.event -async def on_ready(): - print("Client is connected to Discord") - -@client.command( - name="getstats", - description="Get your player stats", - scope=GUILD -) -async def get_stats(ctx: interactions.CommandContext): - player = game.get_player(str(ctx.member.id)) - await ctx.send(f"""{ctx.member.user.username}, here are your stats: - - Attack: {player.attack} - HP: {player.hp} - XP: {player.xp} - """) - -@client.command( - name="encounter", - description="Create a new encounter", - scope=GUILD -) -async def create_encounter(ctx: interactions.CommandContext): - encounter = game.create_encounter(str(ctx.member.id)) - await ctx.send(encounter) - -@client.command( - name="run", - description="Run away!!!!!", - scope=GUILD -) -async def run_away(ctx: interactions.CommandContext): - result = game.complete_encounter(str(ctx.member.id)) - await ctx.send(result) - -@client.command( - name="attack", - description="Attack!!!!!", - scope=GUILD -) -async def run_away(ctx: interactions.CommandContext): - result = game.attack(str(ctx.member.id)) - await ctx.send(result) - -client.start() \ No newline at end of file diff --git a/broken version/encounter.py b/broken version/encounter.py deleted file mode 100644 index 5e12d52..0000000 --- a/broken version/encounter.py +++ /dev/null @@ -1,39 +0,0 @@ -from player import Player -from mob import Mob -from enum import Enum - -class Result(Enum): - CONTINUE = 1 - WIN = 2 - LOSE = 3 - - -class ActionResult: - def __init__(self, result, text): - self.result = result - self.text = text - -class Encounter: - def __init__(self, player: Player): - self.mob = Mob() - self.player = player - - def attack(self): - # player to calc attack damage - damage = self.player.do_attack() - # mob takes damage - mob_result = self.mob.take_damage(damage) # mob will take damage and return whether it is alive - # if mob is still alive - if mob_result: - # calcatulate mob damage - mob_damage = self.mob.do_attack() - # player takes damage - player_result = self.player.take_damage(mob_damage) - # if player health == 0, player losses - if player_result: - return ActionResult(Result.CONTINUE, f"Player attacked for {damage}. Mob attacked with {mob_damage}.") - else: - return ActionResult(Result.LOSE, f"Player attacked for {damage}. Mob attacked with {mob_damage}. Player fainted.") - # if mob dies - player wins - else: - return ActionResult(Result.WIN, f"Player attacked for {damage}. Mob fainted.") \ No newline at end of file diff --git a/broken version/game.py b/broken version/game.py deleted file mode 100644 index 4a39760..0000000 --- a/broken version/game.py +++ /dev/null @@ -1,56 +0,0 @@ -from player import Player -from encounter import Encounter, Result - -class Game: - - def __init__(self): - self.players = {} - self.encounters = {} - - def get_player(self, player_id): - player = self.players.get(player_id) #self.players[player_id] throws an error if it's not there - if player: - return player - else: - self.players[player_id] = Player(player_id, 0, 1, 10) - return self.players[player_id] - -#if we have one for a player, let them know what current status - def create_encounter(self, player_id): - encounter = self.encounters.get(player_id) - if encounter: - return f"""Current encounter: - Player HP: {self.players[player_id].hp} - Mob HP: {encounter.mob.hp} - """ - else: - player = self.get_player(player_id) - self.encounters[player_id] = Encounter(player) - return "Encounter created." - - def attack(self, player_id): - player = self.get_player(player_id) - encounter = self.encounters.get(player_id) - if encounter is None: - self.encounters[player_id] = Encounter(player) - encounter = self.encounters[player_id] - - result = encounter.attack() - - if result == Result.CONTINUE: #encounter continues - #save the data to the "database" - self.encounters[player_id] = encounter - self.players[player_id] = encounter.player - else: - self.players[player_id] = encounter.player - self.complete_encounter(player_id) - - return result.text - - def complete_encounter(self, player_id): - encounter = self.encounters.get(player_id) - if encounter: - del self.encounters[player_id] - return "Player ran away." - else: - return "Encounter not found." \ No newline at end of file diff --git a/broken version/mob.py b/broken version/mob.py deleted file mode 100644 index 4b3f1f1..0000000 --- a/broken version/mob.py +++ /dev/null @@ -1,14 +0,0 @@ -from random import randrange - -class Mob: - def __init__(self): - self.hp = 5 - self.attack = 1 - self.xp = 2 - - def do_attack(self): - return self.attack + randrange(2) - - def take_damage(self, damage): - self.hp -= damage # self.hp - damage - return self.hp > 0 \ No newline at end of file diff --git a/broken version/player.py b/broken version/player.py deleted file mode 100644 index f991d5d..0000000 --- a/broken version/player.py +++ /dev/null @@ -1,17 +0,0 @@ -from random import randrange - -class Player: - def __init__(self, id, xp=0, attack=0, hp=0): - self.id = id - self.attack = attack - self.hp = hp - self.xp = xp - - def do_attack(self): - return self.attack + randrange(4) - - def take_damage(self, damage): - self.hp -= damage - if self.hp < 0: - self.hp = 0 - return self.hp > 0 \ No newline at end of file From 1b5f43e8883454dbb187d10cb83a445f0da3c68b Mon Sep 17 00:00:00 2001 From: PerfectlyPanda Date: Sat, 10 Dec 2022 10:46:50 -0500 Subject: [PATCH 6/6] Update 1.2 Project Setup.ipynb --- 1.2 Project Setup.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/1.2 Project Setup.ipynb b/1.2 Project Setup.ipynb index 44a8770..f130630 100644 --- a/1.2 Project Setup.ipynb +++ b/1.2 Project Setup.ipynb @@ -54,9 +54,9 @@ "\n", "```\n", "#Windows\n", - "./Scripts/activate.ps1\n", + "./bin/activate.ps1\n", "#Mac or Linux\n", - "source /Scripts/activate\n", + "source /bin/activate\n", "```\n", "\n", "If you get `Scripts\\Activate.ps1 cannot be loaded because running scripts is disabled on this system.` error you can run `Set-ExecutionPolicy RemoteSigned`. Keep in mind this makes your system slightly less secure- make sure not to run random PowerShell scripts you've downloaded. ;)\n",