-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
138 lines (105 loc) ยท 4.11 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#7,7 map --> https://etc.usf.edu/clipart/42600/42671/grid_42671_lg.gif
class Map(object):
def __init__(self, max_size=[6,6], monster_locations=[[2, 2],[4, 4]], players={}):
self.size = {'X':[0,max_size[0]],'Y':[0,max_size[1]]}
self.players = players
self.monster_locations = monster_locations
def generate_map(self):
for cell_x in range(self.size['X'][0],self.size['X'][1]):
#print('~~~~~~~~~~~~~~~~')
for cell_y in range(self.size['Y'][0],self.size['Y'][1]):
#print([cell_x,cell_y])
if [cell_x,cell_y] in self.monster_locations:
face = '๐พ'
elif [cell_x,cell_y] in self.player_locations():
index = self.player_locations().index([cell_x,cell_y])
face = self.players_icons()[index]
else:
face = '--'
print(f' {face} ', end="")
print('\n')
def player_locations(self):
return [self.players[n].location for n in self.players]
def players_icons(self):
return [self.players[n].icon for n in self.players]
#for i in range(0,6):
# print(' - ', end="")
class Error(Exception):
"""Base class for other exceptions"""
pass
class PlayerAlreadyRegistered(Error):
"""A player with that name already exists. Can't add it"""
pass
class Player(object):
def __init__(self,name,starting_location,armor,weapon,strenght, stamina,icon,map):
self.name = name
self.armor = armor
self.weapon = weapon
self.strenght = strenght
self.level = stamina
self.icon = icon
self.location = starting_location
self.map = map
self.register_in_the_map(self.name)
def register_in_the_map(self,name):
if name not in self.map.players:
self.map.players[name] = self
else:
raise PlayerAlreadyRegistered
def get_name(self):
return self.name
def attack(self,player):
self.weapon.attack(player)
def get_location(self):
return self.location
def newpos(self,move):
coord_change = {'N':(0,1), 'S':(0,-1), 'W':(-1,0), 'E':(1,0) }
move = coord_change[move]
self.location[0] = self.location[0] + move[0]
self.location[1] = self.location[1] + move[1]
return True
def hit(self):
pass
#class NPC(Player):
# pass
#
#class Humans(Player):
# pass
class Weapons(object):
def __init__(self,weapon_name,weapon_strenght, weapon_use_level):
self.name = weapon_name
self.strenght = weapon_strenght
self.level = weapon_level
def attack(self,player):
if self.level > 0:
self.level = self.level -1
return self.strenght
else:
return 0
#More unicode icons: https://emojipedia.org/
m1 = ['Alien',[2,2],30,'Tentacules',10, 10,'๐พ']
m2 = {"name":'Shark',"starting_location":[4,4],"armor":5,"weapon":'mouth',"strenght":13, "stamina":10, 'icon': '๐ฆ'}
p1 = ['David',[0,0],30,'axe',10, 10,'๐']
p2 = {"name":'Mark',"starting_location":[5,5],"armor":20,"weapon":'knife',"strenght":11, "stamina":10, 'icon':'๐๏ธ'}
p3 = ['Elliot',[0,5],10,'sword',30, 10,'๐']
p4 = {"name":'Marco',"starting_location":[5,0],"armor":5,"weapon":'dagger',"strenght":13, "stamina":10, 'icon': '๐ด'}
p5 = ['Felicity',[3,3],40,'shield',14, 10,'๐ฉ๏ธ']
l = [p1,p2,p3,p4,p5]
map = Map()
list_of_players = []
for player in l:
if type(player) == type([]):
list_of_players.append(Player(*player, map=map))
elif type(player) == type({}):
list_of_players.append(Player(**player,map=map))
else:
print('incorrect input for player')
#print(list_of_players)
#print(map.player_locations())
#print(map.players['David'].location)
map.generate_map()
map.players['David'].newpos('N')
print(map.players['David'].location)
map.generate_map()
#print(map.players['David'])
#print(map.player_locations().index([3,3]))