forked from Cryz/battle_royale_sim
bugfix and more complete resource handling on map
This commit is contained in:
@@ -66,32 +66,37 @@ class BrSimMap():
|
|||||||
self.game_map[p_coord_y][p_coord_x]= item
|
self.game_map[p_coord_y][p_coord_x]= item
|
||||||
#self.game_map[i_coord_y][i_coord_x]= self.item_sym
|
#self.game_map[i_coord_y][i_coord_x]= self.item_sym
|
||||||
|
|
||||||
def _set_coordinates(self, target):
|
def _put_resource_on_map(self, target):
|
||||||
x= _random.randint(1, self.world_width -2) # from 1 to width-2 because 1 cell is occupied by the mountain
|
#x= _random.randint(1, self.world_width -2) # from 1 to width-2 because 1 cell is occupied by the mountain
|
||||||
y= _random.randint(1, self.world_height -2)
|
#y= _random.randint(1, self.world_height -2)
|
||||||
|
x= _random.randint(0, self.world_width -1)
|
||||||
|
y= _random.randint(0, self.world_height -1)
|
||||||
resource= self.get_map_matrix()[y][x]
|
resource= self.get_map_matrix()[y][x]
|
||||||
while resource:
|
while resource:
|
||||||
#while self.get_map_matrix()[y][x] != self.field_sym:
|
#while self.get_map_matrix()[y][x] != self.field_sym:
|
||||||
_logs.log_debug('_set_coordinates: collision, regenerate coordinates')
|
_logs.log_debug('_put_resource_on_map: collision, regenerate coordinates')
|
||||||
x= _random.randint(1, self.world_width -2)
|
x= _random.randint(0, self.world_width -1)
|
||||||
y= _random.randint(1, self.world_height -2)
|
y= _random.randint(0, self.world_height -1)
|
||||||
|
resource= self.get_map_matrix()[y][x]
|
||||||
|
print(f'{target.get_name()} >>> ({x},{y})')
|
||||||
target.set_coordinates(x, y)
|
target.set_coordinates(x, y)
|
||||||
|
self.get_map_matrix()[y][x]= target
|
||||||
|
|
||||||
def init_players_coordinates(self):
|
def init_players_coordinates(self):
|
||||||
for player in self.players:
|
for player in self.players:
|
||||||
self._set_coordinates(player)
|
self._put_resource_on_map(player)
|
||||||
|
|
||||||
def init_items_coordinates(self):
|
def init_items_coordinates(self):
|
||||||
for item in self.items:
|
for item in self.items:
|
||||||
self._set_coordinates(item)
|
self._put_resource_on_map(item)
|
||||||
|
|
||||||
def add_player_to_map(self, player):
|
def add_player_to_map(self, player):
|
||||||
self.players.append(player)
|
self.players.append(player)
|
||||||
self._set_coordinates(player)
|
self._put_resource_on_map(player)
|
||||||
|
|
||||||
def add_item_to_map(self, item):
|
def add_item_to_map(self, item):
|
||||||
self.items.append(item)
|
self.items.append(item)
|
||||||
self._set_coordinates(item)
|
self._put_resource_on_map(item)
|
||||||
|
|
||||||
def get_map_matrix(self):
|
def get_map_matrix(self):
|
||||||
return self.game_map
|
return self.game_map
|
||||||
@@ -99,16 +104,37 @@ class BrSimMap():
|
|||||||
def get_player_available_directions(self, Player):
|
def get_player_available_directions(self, Player):
|
||||||
coord_x, coord_y= Player.get_coordinates()
|
coord_x, coord_y= Player.get_coordinates()
|
||||||
avail_directions= []
|
avail_directions= []
|
||||||
if self.get_map_matrix()[coord_x - 1][coord_y] not in [self.mountain_sym]:
|
#XXX for now move only on available cells, no over other players/items
|
||||||
|
if coord_x > 0 and not self.get_map_matrix()[coord_x - 1][coord_y]:
|
||||||
avail_directions.append((-1, 0, 'sinistra'))
|
avail_directions.append((-1, 0, 'sinistra'))
|
||||||
if self.get_map_matrix()[coord_x + 1][coord_y] not in [self.mountain_sym]:
|
if coord_x < self.world_width -1 and not self.get_map_matrix()[coord_x + 1][coord_y]:
|
||||||
avail_directions.append((1, 0, 'destra'))
|
avail_directions.append((1, 0, 'destra'))
|
||||||
if self.get_map_matrix()[coord_x][coord_y - 1] not in [self.mountain_sym]:
|
if coord_y > 0 and not self.get_map_matrix()[coord_x][coord_y - 1]:
|
||||||
avail_directions.append((0, -1, 'su'))
|
avail_directions.append((0, -1, 'su'))
|
||||||
if self.get_map_matrix()[coord_x][coord_y + 1] not in [self.mountain_sym]:
|
if coord_y < self.world_height -1 and not self.get_map_matrix()[coord_x][coord_y + 1]:
|
||||||
avail_directions.append((0, 1, 'giu\''))
|
avail_directions.append((0, 1, 'giu\''))
|
||||||
return avail_directions
|
return avail_directions
|
||||||
|
|
||||||
|
def check_near_players(self):
|
||||||
|
# TODO Implement me
|
||||||
|
return True
|
||||||
|
|
||||||
|
def check_near_items(self):
|
||||||
|
# TODO Implement me
|
||||||
|
return False
|
||||||
|
|
||||||
|
def get_player_available_actions(self, Player):
|
||||||
|
# TODO: define actions list
|
||||||
|
coord_x, coord_y= Player.get_coordinates()
|
||||||
|
avail_actions= []
|
||||||
|
|
||||||
|
if self.check_near_players(Player):
|
||||||
|
avail_actions.append(1) #XXX replace with attack action (or maybe other actions on players)
|
||||||
|
if self.get_player_available_directions(Player):
|
||||||
|
avail_actions.append(2) #XXX replace with action move
|
||||||
|
if self.check_near_items(Items):
|
||||||
|
avail_actions.append(3) #XXX replace with get item action
|
||||||
|
|
||||||
def get_renderized_map(self):
|
def get_renderized_map(self):
|
||||||
res= ''
|
res= ''
|
||||||
self.populate_map()
|
self.populate_map()
|
||||||
@@ -118,7 +144,8 @@ class BrSimMap():
|
|||||||
if not x: el= self.field_sym
|
if not x: el= self.field_sym
|
||||||
#XXX how to manage mountains?
|
#XXX how to manage mountains?
|
||||||
elif x.is_player():
|
elif x.is_player():
|
||||||
if x.player_gender_is_male(): el= self.player_male_sym
|
if not x.is_alive(): el= self.dead_player_sym
|
||||||
|
elif x.player_gender_is_male(): el= self.player_male_sym
|
||||||
elif x.player_gender_is_female(): el= self.player_female_sym
|
elif x.player_gender_is_female(): el= self.player_female_sym
|
||||||
else: el= self.player_nonbinary_sym
|
else: el= self.player_nonbinary_sym
|
||||||
elif x.is_item():
|
elif x.is_item():
|
||||||
|
|||||||
Reference in New Issue
Block a user