Skip to content
Open

Pan #57

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
96bf425
first test
LichasX Jul 26, 2024
b2e077b
name
LichasX Jul 26, 2024
ef0edc7
Chenjinxuu Jul 26, 2024
4b50932
Merge branch 'main' of https://github.com/LichasX/j1-summary-project
Chenjinxuu Jul 26, 2024
226033c
Rng part is ready
Chenjinxuu Jul 26, 2024
450d5ff
it is actually ready now
Chenjinxuu Jul 26, 2024
705423f
player + object + class in dictionary concept
LichasX Jul 26, 2024
7262367
commit
GohJianLin Jul 26, 2024
69b0f35
tewst
LichasX Jul 26, 2024
8d103f4
Class weapon
Chenjinxuu Jul 26, 2024
b89fa19
Merge branch 'main' of https://github.com/LichasX/j1-summary-project
Chenjinxuu Jul 26, 2024
3f46287
Merge branch 'main' of https://github.com/LichasX/j1-summary-project
GohJianLin Jul 26, 2024
08b7aed
object class
LichasX Jul 26, 2024
f3c3359
last commit
LichasX Jul 26, 2024
1b53c4f
part of the intro is done
Chenjinxuu Jul 26, 2024
12742e1
bag. Store and display
GohJianLin Jul 26, 2024
6442507
intro is done
Chenjinxuu Jul 26, 2024
ce69d00
test
LichasX Aug 1, 2024
9e7b8d1
made some updates
GohJianLin Aug 1, 2024
af7c21f
Merge branch 'main' into jianlin1
GohJianLin Aug 1, 2024
6959edb
Merge pull request #1 from LichasX/jianlin1
LichasX Aug 1, 2024
3a40f56
Most of the Weapons are ready
Chenjinxuu Aug 1, 2024
5ca5c7c
changed some names
GohJianLin Aug 1, 2024
d5da271
test
LichasX Aug 1, 2024
b249986
Merge branch 'main' into thing
Chenjinxuu Aug 1, 2024
ba7d3fc
Merge remote-tracking branch 'origin/main' into matthew
LichasX Aug 1, 2024
365e0d8
they say i need to commit
GohJianLin Aug 1, 2024
dea94a6
Merge remote-tracking branch 'origin/main' into thing
Chenjinxuu Aug 1, 2024
af820ed
updated
GohJianLin Aug 1, 2024
41189fe
Matthew is forcing me
Chenjinxuu Aug 1, 2024
d2c1fdf
Merge pull request #2 from LichasX/matthew
LichasX Aug 1, 2024
d52bf8d
thing
Chenjinxuu Aug 1, 2024
affc349
Merge remote-tracking branch 'origin/main' into thing
Chenjinxuu Aug 1, 2024
bbb8fb2
Merge pull request #3 from LichasX/thing
LichasX Aug 2, 2024
7d66ddf
Merge remote-tracking branch 'refs/remotes/origin/jianlin1' into jian…
GohJianLin Aug 2, 2024
7d146ad
Merge remote-tracking branch 'origin/main' into jianlin1
GohJianLin Aug 2, 2024
4f8361a
Merge pull request #4 from LichasX/jianlin1
LichasX Aug 2, 2024
869a5a2
Finished backpack
GohJianLin Aug 2, 2024
d81d556
Merge pull request #5 from LichasX/jianlin1
LichasX Aug 2, 2024
ce85d49
Matthew is still not diamond yet
Chenjinxuu Aug 2, 2024
d88e1ca
Merge remote-tracking branch 'origin/main' into thing
Chenjinxuu Aug 2, 2024
22db3dd
Merge pull request #7 from LichasX/thing
LichasX Aug 2, 2024
59f67be
test
LichasX Aug 2, 2024
a7f6652
Merge branch 'main' of https://github.com/LichasX/j1-summary-project
LichasX Aug 2, 2024
8dad1a9
Partially finished Gear
GohJianLin Aug 2, 2024
086a96e
Merge remote-tracking branch 'origin/main' into jianlin1
GohJianLin Aug 2, 2024
40683b6
INVENTory fixed jian lin thing no stack!!!
LichasX Aug 2, 2024
229ff3f
added true and false
GohJianLin Aug 7, 2024
36888d0
changes
GohJianLin Aug 7, 2024
2b9ad1e
Potion implementation is complete
Chenjinxuu Aug 7, 2024
e1403d1
Merge remote-tracking branch 'origin/main' into jianlin1
GohJianLin Aug 7, 2024
dbeb73b
added weight partially
GohJianLin Aug 7, 2024
4176111
Added some equip unequip, added gear class
GohJianLin Aug 9, 2024
11a6387
Merge remote-tracking branch 'origin/main' into thing
Chenjinxuu Aug 15, 2024
55f284b
Merge pull request #8 from LichasX/jianlin1
LichasX Aug 15, 2024
6098dcf
game
LichasX Aug 15, 2024
aae48c4
Merge remote-tracking branch 'origin/main'
LichasX Aug 15, 2024
5db18cb
movement game working
LichasX Aug 15, 2024
6d364ae
done stuff( stuff)
GohJianLin Aug 15, 2024
8300d5c
Merge remote-tracking branch 'origin/main' into thing
Chenjinxuu Aug 16, 2024
f31009b
Merge remote-tracking branch 'origin/main' into jianlin1
GohJianLin Aug 16, 2024
6a738cd
Merge remote-tracking branch 'origin/main' into thing
Chenjinxuu Aug 16, 2024
60518db
Merge pull request #9 from LichasX/jianlin1
LichasX Aug 16, 2024
04a3cf5
event queue
LichasX Aug 16, 2024
ea5cd5f
Merge remote-tracking branch 'origin/main'
LichasX Aug 16, 2024
6494c4c
shit combat
LichasX Aug 16, 2024
dcca20f
boss implemented
LichasX Aug 16, 2024
ec70d45
update
LichasX Aug 16, 2024
3c96c05
coommiitt
GohJianLin Aug 16, 2024
e0feb58
nothing
Chenjinxuu Aug 21, 2024
44859d1
Merge remote-tracking branch 'origin/main' into jianlin1
GohJianLin Aug 21, 2024
688fdbc
Merge pull request #10 from LichasX/jianlin1
LichasX Aug 21, 2024
ec7f26c
test
LichasX Aug 21, 2024
13a7d30
Merge remote-tracking branch 'origin/main'
LichasX Aug 21, 2024
1adc8b2
Merge remote-tracking branch 'origin/main' into thing
Chenjinxuu Aug 21, 2024
6300e79
nothing
Chenjinxuu Aug 21, 2024
b08a8ae
fixed backpack
LichasX Aug 21, 2024
542be72
Merge remote-tracking branch 'origin/main' into thing
Chenjinxuu Aug 21, 2024
0944c13
nothing
Chenjinxuu Aug 21, 2024
6047787
Merge branch 'main' into thing
LichasX Aug 21, 2024
1465967
Merge pull request #11 from LichasX/thing
LichasX Aug 21, 2024
ed2cad3
shit
LichasX Aug 21, 2024
b30fd50
Merge remote-tracking branch 'origin/main'
LichasX Aug 21, 2024
e448748
fix all the damn bugs
LichasX Aug 21, 2024
906c507
added loot table, multiple commands, fixed layout and bugs
LichasX Aug 21, 2024
0610fca
spacing in text
LichasX Aug 21, 2024
4712d47
fixed unequip bug which adds duplicates items
LichasX 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
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

## Members

- Member 1
- Member 2
- Member 3
- Member 4
- Matthew
- Jianlin
- Jin Xu
- Pannnnnnnnnnawit

<Description of your project>
220 changes: 220 additions & 0 deletions character.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
from typing import Any, Dict
import item
import time

class Player:
def __init__(self, name):
self.name = str(name)
self.health = 10
self.max_health = self.health
self.defense = 0
self.attack = 1
self.speed = 1
self.coords = (0, 0)
self.last_move = (0, 0) #tracks the player's position last turn
self.event_queue = None #stores the event that the player is moving to (e.g. enemy fight)
self.items = {}
self.mload = 10000000000000000000000 #fuck it who cares
self.gears = {
'helm': None,
'chest': None,
'leg': None,
'boots': None,
'weapon': item.wooden_sword
}

def __repr__(self):
return "P"

def backpack_isFull(self):
total = 0
for itm in self.items.values():
total += itm.weight
return total >= self.mload

def store(self, object):
if not self.backpack_isFull():
if object.name in self.items: #item present
self.items[object.name].num += 1
weight = 0
for item in self.items.values():
weight += item.weight
if weight > self.mload:
print("That's too much for your bag to handle!")
self.items[object.name].num -= object.num #Take back item
return False

print(f'1 {object.name} has been stored')
return True

else: #new item
self.items[object.name] = object

total = 0
for item in self.items.values():
total += item.weight
if total > self.mload:
print("That's too much for your bag to handle!")
del self.items[object.name]
return False

print(f'{object.num} {object.name} has been stored.')
return True

else:
print("Unable to store. Backpack is full.")



def display_inv(self):
print("-----\nInventory\n")
for i in self.items.keys():
print(i, self.items[i].num)
print("-----\n")

def display_gears(self):
print("-----\nGears\n")
for i in self.gears.keys():
print(f"{i}: {self.gears[i]}")
print("-----\n")

def check(self, object):
if item in self.items.keys():
print(f'Name: {item}')
print(f'Amount:{self.items[item].num}')
print(f'Description:{self.items[item].desc}')
return True
print('Item not in Backpack')
return False

def trash(self, object):
if object.name not in self.items:
print("Invalid object entered")
else:
self.items[object.name].num -= 1
if self.items[object.name].num <= 0:
del self.items[object.name]
#Gears
def equip(self, gear): #accepts object class
if gear.name not in self.items:
print("You don't have that gear!")
return False
#if that section is full, say you have it on

if self.gears[gear.section] is not None:
print(f'You already have a {gear.section} equipped.')
return False

#else, equip that gear
self.gears[gear.section] = gear
print(f'{gear.name} is equipped')
self.trash(self.gears[gear.section])
return True

def unequip(self, section): #accepts string of equipment type
if self.gears[section] is None:
print('Nothing is equipped there.')
return False

if self.backpack_isFull():
print(f'Backpack Full! {section} cannot be unequipped!')
return False
else:
self.store(self.gears[section])
print(f'{self.gears[section].name} unequipped')
self.gears[section] = None
return True

def combat(self, enemy: "Enemy"):
print("\n")
time.sleep(0.5)
crit = 1 #if there is no crit does not change

if self.gears["weapon"].crit():
crit = 2 # double the damage when it crits

damage = (self.gears['weapon'].attack + self.attack - enemy.defense) * crit

if damage <= 0:
damage = 1

enemy.health -= damage

print(f"You dealt {damage} damage to the {enemy.name}.")

print(f"{enemy.name} current health:{enemy.health}")

if enemy.health <= 0:
enemy.health = 0
print(f"{enemy} fainted.")
if isinstance(enemy, Boss):
return -888
return True
else:
return False


class Enemy:
def __init__(self, data: list): #name, health, defense, attack, speed
self.name = data[0]
self.health = data[1]
self.defense = data[2]
self.attack = data[3]
self.speed = data[4]

def __repr__(self):
return "E"

def combat(self, player: "Player"):

print("\n")
time.sleep(0.5)
damage = (self.attack - player.defense) #enemy doesn't crit


if damage < 0:
damage = 1

player.health -= damage #lose health

print(f"You received {damage} damage from the {self.name}.")#print damage to player


print(f"{player.name} current health:{player.health}") #print hp left

if player.health <= 0:
player.health = 0
print("You fainted. Skill Issue.")
return -1
else:
return False

class Boss(Enemy):
def __init__(self, data):
super().__init__(data)

def __repr__(self):
return "B"

def combat(self, player: "Player"):
print("\n")
time.sleep(0.5)
damage = (self.attack - player.defense) #enemy doesn't crit


if damage < 0:
damage = 1

player.health -= damage #lose health

print(f"You received {damage} damage from the {self.name}.")#print damage to player


print(f"{player.name} current health:{player.health}") #print hp left

if player.health <= 0:
player.health = 0
print("You fainted. Skill Issue.")
return -666
else:
return False
135 changes: 135 additions & 0 deletions game.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
import random
import character, sys, item
class Game:
def __init__(self, name):
self.n = 5 #length of sides of grid
self.e = 12 #num of enemies
self.map = [['.' for i in range(self.n)] for i in range(self.n)]
self.player = character.Player(name)

def printmap(self):
print("\n-----\nMap\n\n")
for i in range(self.n):
output = ""
for j in range(self.n):
output += str(self.map[i][j])+" "
print(output)
print(f"Current Event:{self.player.event_queue}", type(self.player.event_queue))
print("-----\n")


def random_map(self): #randomise events in map
#player spawn
self.map[0][0] = self.player
#boss spawn
while True:
coords = (random.randint(0, self.n-1), random.randint(0, self.n-1))
if self.map[coords[0]][coords[1]] == ".":
self.map[coords[0]][coords[1]] = character.Boss(["Overlord", 50, 3, 5, 0.5]) #change values as needed
break
#enemies spawn
for i in range(self.e):
while True:
coords = (random.randint(0, self.n-1), random.randint(0, self.n-1))
if self.map[coords[0]][coords[1]] == ".":
self.map[coords[0]][coords[1]] = character.Enemy(["Enemy", random.randint(3, 10), random.randint(1, 2), random.randint(1, 3), 1])
break

def help_cmds(self):
return "-----\nMovement\n\n'w'\n'a'\n's'\n'd'\n-----\nActions\n\n'trash' (remove item from inventory)\n'equip'\n'unequip'\n-----\nInfo\n\n'inventory'\n'gears'"

def player_input(self):
while True:
move = input("Enter move or 'help' to view all commands: ")
if move=="help":
print(self.help_cmds())
elif move=="inventory":
self.player.display_inv()
elif move=="gears":
self.player.display_gears()
elif move=="equip":
if len(self.player.items.keys()) > 0:
self.player.display_inv()
move2=input("Enter what to equip: ")
while not move2 in self.player.items.keys():
move2=input("Enter valid item: ")
self.player.equip(self.player.items[move2])
else:
print("got nothing to equip lah")
elif move=="unequip":
self.player.display_gears()
move2=input("Enter what section to unequip (e.g. helm, chest etc AND NOT THE NAME OF THE ITEM): ")
while not move2 in ["helm", "chest", "legs", "boots", "weapon"]:
move2=input("Enter valid section: ")
self.player.unequip(move2)
elif move=="trash":
if len(self.player.items.keys()) > 0:
self.player.display_inv()
move2=input("Enter what to trash: ")
while not move2 in self.player.items.keys():
move2=input("Enter valid item: ")
self.player.trash(self.player.items[move2])
else:
print("got nothing to trash lah")
elif move=='w' and self.player.coords[0] > 0:
self.player.event_queue = self.map[self.player.coords[0] - 1][self.player.coords[1]]
self.player.last_move = self.player.coords
self.player.coords =(self.player.coords[0] - 1, self.player.coords[1])
break
elif move=='a' and self.player.coords[1] > 0:
self.player.event_queue = self.map[self.player.coords[0]][self.player.coords[1] - 1]
self.player.last_move = self.player.coords
self.player.coords =(self.player.coords[0], self.player.coords[1] - 1)
break
elif move=='s' and self.player.coords[0] < self.n - 1:
self.player.event_queue = self.map[self.player.coords[0] + 1][self.player.coords[1]]
self.player.last_move = self.player.coords
self.player.coords =(self.player.coords[0] + 1, self.player.coords[1])
break
elif move=='d' and self.player.coords[1] < self.n - 1:
self.player.event_queue = self.map[self.player.coords[0]][self.player.coords[1] + 1]
self.player.last_move = self.player.coords
self.player.coords =(self.player.coords[0], self.player.coords[1] + 1)
break
else:
print("Invalid move")


def update_position(self):
self.map[self.player.coords[0]][self.player.coords[1]] = self.player
self.map[self.player.last_move[0]][self.player.last_move[1]] = "X"

def check_event(self):
if isinstance(self.player.event_queue, character.Enemy):
print("You have encountered an enemy.")
self.event_fight(self.player, self.player.event_queue)
else:
print("nothing")

def event_fight(self, player, enemy):
result = False
turn_order = [player, enemy]
if player.speed >= enemy.speed:
i = 0
else:
i = 1
while not result:
result = turn_order[i].combat(turn_order[i - 1]) #if i = 0 i.e. player, i - 1 will become -1 which points to enemy as intended
if i == 1:
i = 0
else:
i += 1
if result == -1: #defeat against normal enemy
sys.exit()
elif result == -666: #defeat against boss
print("The final boss has killed you...")
sys.exit()
elif result == -888: #win against boss
print("You have defeated the final boss")
sys.exit()
elif result == True: #win against normal enemy
print("\n")
self.player.health = self.player.max_health
reward = random.choice(item.loot_table)
print(f"You have obtained {reward}")
self.player.store(reward)
20 changes: 20 additions & 0 deletions intro.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#fuck it dont use this lol

# import time, character
# def intro():
# yes = True
# while True:
# print("Intro")
# time.sleep(1)
# print("Myserious voice: 'I don't care! I seriously DON'T CARE! I have locked you up in my dungeon and you will never ever have the slightest of slimmer of hope in having the ability to even attempt to escape from this hell Ho of mine!")
# time.sleep(2)
# print("You wake up, dazed, who are you again?")
# name = input("What is your name?")
# while yes:
# confirm = input(f"Are you sure your name is {player}?(y/n):")
# if confirm == "y":
# yes = False
# elif confirm == "n":
# player = classes.Player(str(input("What is your name?")))
# else:
# print("Answer the question please")
Loading