Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
88 commits
Select commit Hold shift + click to select a range
2ed2f31
Update README.md
sarahyx11 Jul 26, 2024
c2912cd
Update README.md
sarahyx11 Jul 26, 2024
f9898f6
Added my name
sarahyx11 Jul 26, 2024
c801cb2
Added game description
lyangelaa Jul 26, 2024
2bb8f2f
Added a comment
kaien07 Jul 26, 2024
efbda28
Update README.md
sarahyx11 Jul 26, 2024
9f284ec
Added description header
kaien07 Jul 26, 2024
e15ba50
Merge branch 'main' of https://github.com/sarahyx11/KFC-project
kaien07 Jul 26, 2024
72b3522
name
Sakthi12345678900 Jul 26, 2024
700a24b
main layout
sarahyx11 Jul 26, 2024
35ef70d
Testing branches
kaien07 Aug 1, 2024
feee4a6
Merge pull request #1 from sarahyx11/hehe
lyangelaa Aug 1, 2024
d771152
game loop
sarahyx11 Aug 1, 2024
4c24b35
Change method names
kaien07 Aug 2, 2024
a20e82c
Remove unnecessary things
kaien07 Aug 2, 2024
af8b7a7
created the classes
sarahyx11 Aug 2, 2024
0203b3c
updated chicken class methods
sarahyx11 Aug 2, 2024
fa82eaa
update game class
sarahyx11 Aug 2, 2024
fb097b5
Create NPC class
lyangelaa Aug 2, 2024
527cf03
update game class
sarahyx11 Aug 2, 2024
7e9fde0
Merge branch 'main' into NPC
kaien07 Aug 2, 2024
cdf47cc
Merge pull request #2 from sarahyx11/NPC
kaien07 Aug 2, 2024
5b741d9
created files for different classes
sarahyx11 Aug 2, 2024
35d53fb
Merge branch 'main' of https://github.com/sarahyx11/KFC-project
sarahyx11 Aug 2, 2024
1a7edd8
Restore NPC class
kaien07 Aug 2, 2024
e2c6515
update imports
sarahyx11 Aug 2, 2024
26ebc37
Fix indentation in chicken.py
kaien07 Aug 7, 2024
ada596c
Fix dialogue in game.py
kaien07 Aug 7, 2024
25513bb
Change dialogue in game.py
kaien07 Aug 7, 2024
ac45524
text file
sarahyx11 Aug 7, 2024
1601414
update text file
sarahyx11 Aug 7, 2024
c9ae53f
update text file
sarahyx11 Aug 7, 2024
e72ff85
update text file
sarahyx11 Aug 7, 2024
b12d676
update text file
sarahyx11 Aug 7, 2024
d128d55
Fix opened bracket
kaien07 Aug 15, 2024
44267b6
update text file
sarahyx11 Aug 15, 2024
cb023c5
Create test.py
lyangelaa Aug 15, 2024
d5b0a79
Merge pull request #4 from sarahyx11/main
lyangelaa Aug 15, 2024
8b2f243
Merge pull request #5 from sarahyx11/main
kaien07 Aug 15, 2024
6e65cd6
Update day2 function in game.py
kaien07 Aug 15, 2024
a63cbe9
Merge pull request #6 from sarahyx11/day2
kaien07 Aug 15, 2024
b77abb7
update shop
Sakthi12345678900 Aug 15, 2024
e466b9a
Update chicken for testing
kaien07 Aug 15, 2024
3b0ba29
Merge pull request #7 from sarahyx11/day2
kaien07 Aug 15, 2024
d7fa686
Merge pull request #8 from sarahyx11/main
lyangelaa Aug 15, 2024
c39a35b
update text file
sarahyx11 Aug 15, 2024
3be682e
update game
sarahyx11 Aug 15, 2024
7661138
update shop.py
lyangelaa Aug 15, 2024
705ac71
Merge pull request #9 from sarahyx11/test
lyangelaa Aug 15, 2024
1ab9909
Merge pull request #10 from sarahyx11/main
kaien07 Aug 15, 2024
553ee1c
Reformat intros for each day
kaien07 Aug 15, 2024
f412752
Merge pull request #11 from sarahyx11/day2
kaien07 Aug 15, 2024
22f7981
update text file
sarahyx11 Aug 16, 2024
44653b8
Create function to initialise enemy
kaien07 Aug 16, 2024
b47abc6
Merge branch 'main' into day2
kaien07 Aug 16, 2024
3ccfe57
Added choose_chicken() test
lyangelaa Aug 16, 2024
bd0a782
Merge pull request #13 from sarahyx11/test
lyangelaa Aug 16, 2024
a1188bc
Merge pull request #12 from sarahyx11/day2
kaien07 Aug 16, 2024
e34690d
Merge pull request #14 from sarahyx11/main
kaien07 Aug 16, 2024
44df3d2
update game.py
kaien07 Aug 16, 2024
6e468f0
Merge pull request #15 from sarahyx11/main
lyangelaa Aug 16, 2024
5e4d60c
Create attack selection system
kaien07 Aug 16, 2024
5d8d61e
Create fighting system
kaien07 Aug 16, 2024
dfcf303
Merge pull request #16 from sarahyx11/day2
kaien07 Aug 16, 2024
32297c8
update shop
sarahyx11 Aug 16, 2024
d616646
Update fighting mechanics
kaien07 Aug 16, 2024
7c7b0ea
Merge pull request #17 from sarahyx11/day2
kaien07 Aug 16, 2024
56c54e9
Merge remote-tracking branch 'origin/main' into shop
sarahyx11 Aug 16, 2024
b969cc9
Added test for set_day()
lyangelaa Aug 21, 2024
06f7f5f
Add fight repeating when chicken faints
kaien07 Aug 21, 2024
057ab16
Merge pull request #19 from sarahyx11/day2
kaien07 Aug 21, 2024
df6239a
updated coin system and player inventory
sarahyx11 Aug 21, 2024
7230a46
Merge branch 'test' into main
lyangelaa Aug 21, 2024
96449fd
Merge remote-tracking branch 'origin/main' into player_inventory
sarahyx11 Aug 21, 2024
a4791bc
done
Sakthi12345678900 Aug 21, 2024
daeb605
update shop
sarahyx11 Aug 21, 2024
213ca37
Merge remote-tracking branch 'origin/main' into player_inventory
sarahyx11 Aug 21, 2024
aa5080f
update shop
sarahyx11 Aug 21, 2024
e4955cb
update shop
sarahyx11 Aug 21, 2024
42b59ac
Update all dialogue
kaien07 Aug 21, 2024
da029fe
Merge branch 'main' of https://github.com/sarahyx11/KFC-project
Sakthi12345678900 Aug 21, 2024
93f1dda
Merge pull request #20 from sarahyx11/day2
kaien07 Aug 21, 2024
71c0c3c
Merge remote-tracking branch 'origin/main' into player_inventory
sarahyx11 Aug 21, 2024
922c59a
Add defence feature
kaien07 Aug 22, 2024
0943fb7
Merge pull request #21 from sarahyx11/day2
kaien07 Aug 22, 2024
ecc97a2
update game and shop
sarahyx11 Aug 22, 2024
3f2062d
Merge remote-tracking branch 'origin/main' into player_inventory
sarahyx11 Aug 22, 2024
e7c2fcf
update intro
sarahyx11 Aug 22, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@

## Members

- Member 1
- Member 2
- Member 3
- Member 4
- Sakthi kfc
- Kaien
- Angela
- Sarah Hong

<Description of your project>

## Description
KFC is the latest game in town!!!! Through the engaging gameplay and amazing descriptions, you are bound to get hooked. (Beware this game may cause addictions, play at your own risk)
55 changes: 55 additions & 0 deletions chicken.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
class Chicken:

def __init__(self):
self.name = ""
self.type = None
self.health = None
self.max_health = None
self.strength = None
self.attack = {}

def set_type(self, type):
if type == "1":
self.type = "GMO"
self.health = 60
self.max_health = self.health
self.strength = 40
else:
self.type = "Organic"
self.health = 50
self.max_health = self.health
self.strength = 50

def set_name(self, name):
self.name = name

def get_name(self):
return self.name

def update_attack(self, attack, damage):
self.attack[attack] = damage

def update_health(self, change):
if self.health + change < 0:
self.health = 0
else:
self.health += change
return self.health

def update_strength(self, change):
self.strength += change

def get_type(self):
return self.type

def get_strength(self):
return self.strength

def get_health(self):
return self.health

def get_max_health(self):
return self.max_health

def get_damage(self, attack):
return self.attack[attack]
192 changes: 192 additions & 0 deletions game.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
from chicken import Chicken
from npc import NPC
from shop import Shop
import text
import random

chicken = Chicken()

class Game:
def __init__(self):
self.name = None
self.day = 0
self.shopee = None
self.inventory = {"Coins" : 100, "Corn" : 5, "Water" : 2}

def update_player_name(self, name):
self.name = name

def get_player_name(self):
return self.name

def welcome(self):
print(text.welcome)
name = input(text.askname)
self.update_player_name(name)

print(text.welcome_intro.format(self.name))

def choose_chicken(self):
print(text.chicken_reminder.format(self.get_player_name()))
print(text.gmo_desc)

print(text.organic_desc)

choice = input(text.ask_choice)
while choice not in "12":
choice = input("Invalid choice, input 1 or 2: ")
self.set_chicken_type(choice)

print(f"\nCongratulations on receiving your one and only {chicken.get_type()} Chicken! What will their name be? \n")
chicken_name = input(text.ask_choice)
self.set_chicken_name(chicken_name)
print(f"\n{chicken.name} pecks your face with affection.\n\n")

def set_chicken_type(self, choice):
chicken.set_type(choice)


def get_chicken_type(self):
return chicken.get_type()

def set_chicken_name(self, chicken_name):
chicken.set_name(chicken_name)

def get_chicken_name(self):
return chicken.get_name()

def get_inventory(self):
return self.inventory

def update_inventory(self, item, quantity):
if self.get_inventory().get(item.capitalize()) == None:
self.inventory[item] = quantity
else:
self.inventory[item] += quantity

def create_shop(self):
inventory = [40, 30, 20]
price = [1, 4, 7]
items = ["Water", "Chicken feed", "Corn" ]
self.shopee = Shop(inventory, price, items)

def get_shop(self):
return self.shopee

def shop(self):
shop = self.get_shop()
print(text.shop_message)
exit = False
while not exit:
print()
print(f"Your coins: {self.get_inventory()["Coins"]}")
print(text.shop_options)
print()
choice = input(text.ask_choice)
while choice not in "123":
choice = input("Invalid choice, input 1, 2 or 3: ")
if choice == "1":
shop.get_price_list()
elif choice == "2":
item, quantity, cost = shop.purchase_item()
self.update_inventory(item, quantity)
self.deduct_coins(cost)

else:
coins = self.get_inventory()["Coins"]
if coins < 0:
print(f"\nYou have {coins} coins left. If coins remain negative at the end of the game, you lose! Be mindful of your spending !\n")
else:
print(f"\nYou have {coins} coins left\n")
exit = True

def go_shop(self):
choice = input("You see a shop! Would you like to enter? Y/N: ")
while choice.upper() not in "YN":
choice = input("Invalid choice, " + text.ask_choice)

if choice.upper() == "Y":
self.shop()

def set_day(self, day):
self.day = day

def get_day(self):
return self.day

def day_is_over(self):
pass

def intro(self):
print(f"====== DAY {self.day} ======")
print(text.intros[self.day - 1].format(chicken.name))

def prep_day(self):
data = text.enemy_data[self.day - 1]
npc = NPC(data["enemy_name"], data["enemy_health"], data["enemy_attacks"])
return npc

def deduct_coins(self, coins):
self.inventory["Coins"] -= int(coins)

def fight_is_over(self, npc):
if npc.get_hp() <= 0:
return True
elif chicken.get_health() <= 0:
self.deduct_coins(100)
chicken.update_health(chicken.get_max_health())
return True
return False

def fight_over_message(self, npc):
if npc.get_hp() <= 0:
print(f"You have beaten {npc.get_name()}!!\n")
elif chicken.get_health() <= 0:
print("You have fainted :(\n")
print("100 coins will be deducted for the defeat, try harder next time!")


def enemy_beaten(self, npc):
if self.fight_is_over(npc) and npc.get_hp() <= 0:
return True
else:
return False

def npc_attacks(self, npc, defence):
attack_name, atk = npc.get_attack()
print(f"{npc.get_name()} attacked you with {attack_name}!")
if defence:
atk -= defence
print(f"Your defence has reduced your damage taken by {defence}.")
print(f"Your health decreased from {chicken.get_health()} to {chicken.update_health(-atk)}.")

def print_stats(self, npc):
print(f"Your Strength: {chicken.strength}")
print(f"Your Health: {chicken.health}")
print(f"Enemy's Health: {npc.health}")

def prompt_player(self):
print("Moves available: ")
for i in range(len(text.attack_list[self.day - 1])):
print(f"{i+1}. {text.attack_list[self.day - 1][i]["name"]}")
choice = input("Pick your move: ")
while not 0 < int(choice) <= len(text.attack_list[self.day - 1]):
print("Invalid choice")
choice = input("Pick your move: ")
return int(choice)

def do(self, choice, npc):
move = text.attack_list[self.day - 1][choice - 1]
if move["atk"]:
print(f"{npc.get_name()}'s health has decreased from {npc.get_hp()} to {npc.update_hp(move["atk"])}.\n")
return move["def"]

###### TO CHANGE!!!!
def debrief(self):
chicken.update_health(chicken.get_max_health())


if __name__ == "__main__":
game = Game()
game.create_shop()
game.shop()
29 changes: 28 additions & 1 deletion main.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,31 @@
# Import statements
from game import Game

game = Game()

if __name__ == "__main__":
pass
game.welcome()
game.choose_chicken()
game.create_shop()
for day in range(1, 6):
game.set_day(day)
game.intro()
npc = game.prep_day()
while not game.enemy_beaten(npc):
npc = game.prep_day()
while not game.fight_is_over(npc):
game.print_stats(npc)
choice = game.prompt_player()
game.do(choice, npc)
defence = game.do(choice, npc)
game.npc_attacks(npc, defence)
if game.fight_is_over(npc):
break
game.fight_over_message(npc)

if str(day) in "134":
game.go_shop()
game.debrief()
game.ending()
game.is_over()

24 changes: 24 additions & 0 deletions npc.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import random
from typing import Tuple

class NPC:
def __init__(self, name, health, attacks):
self.name = name
self.health = health
self.attacks = attacks

def get_name(self) -> str:
return self.name

def get_attack(self) -> Tuple[str, int]:
attack_index = random.randint(0, len(self.attacks)-1)
name = self.attacks[attack_index]["attack_name"]
dmg = self.attacks[attack_index]["atk"]
return (name, dmg)

def get_hp(self):
return self.health

def update_hp(self, change) -> int:
self.health = self.health - change
return self.health
46 changes: 46 additions & 0 deletions shop.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
class Shop:
def __init__(self, inventory, price, item):
self.inventory = inventory
self.price = price
self.item = item

def get_inventory(self):
return self.inventory

def get_item(self):
return self.item

def get_price(self):
return self.price

def get_price_list(self):
print()
for i in range(len(self.get_inventory())):
print(f"{self.get_item()[i]:<15}: ${self.get_price()[i]}")
print()

def purchase_item(self):
print()
for i in range(len(self.get_item())):
print(f"{i+1}. {self.get_item()[i]}")
purchase_number = input('\nEnter item number: ')

while not purchase_number.isdigit() or not (1 <= int(purchase_number) <= len(self.get_item())):
purchase_number = input('Enter valid item number: ')

purchase_number = int(purchase_number)
quantity = input('Enter quantity: ')

while not quantity.isdigit() or not(1 <= int(quantity) <= int(self.get_inventory()[purchase_number - 1])):
print(f"Quantity left: {self.get_inventory()[purchase_number - 1]}")
quantity = input('Enter valid quantity: ')

quantity = int(quantity)
self.update_inventory(purchase_number, quantity)

return self.get_item()[purchase_number - 1], quantity, self.get_price()[purchase_number - 1] * quantity

def update_inventory(self, purchase_number, quantity):
self.inventory[int(purchase_number) - 1] -= int(quantity)


24 changes: 24 additions & 0 deletions test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from game import Game

game = Game()

def test_main():
#test welcome()
game.update_player_name("hehe")
assert game.get_player_name() == "hehe"

#test choose_chicken()
game.set_chicken_name("sander")
assert game.get_chicken_name() == "sander"

game.set_chicken_type("1")
assert game.get_chicken_type() == "GMO"

#test set_day(day)
game.set_day(1)
assert game.get_day() == 1

#test prep_day()

if __name__ == "__main__":
test_main()
Loading