forked from Cryz/battle_royale_sim
		
	
		
			
				
	
	
		
			120 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import time as _time
 | |
| import random as _rand
 | |
| import main as _main
 | |
| from utils import logs as _logs
 | |
| from bot_libs import syms as _syms
 | |
| 
 | |
| def _debug_data():
 | |
|   players= _syms.COLORS_NAMES
 | |
|   weapons= []
 | |
| 
 | |
|   Arena= _main.init_arena()
 | |
|   for player in players:
 | |
|     Arena.add_player(player)
 | |
|   return Arena
 | |
| 
 | |
| def _end_game_debug(alive_players, day):
 | |
|   last_player= alive_players[0]
 | |
|   msg= f'{last_player.get_name()} sopravvive e vince dopo {day} lunghi Giorni, conquistando l\'amore eterno di Guarino'
 | |
|   _logs.log_debug(msg)
 | |
|   return msg
 | |
| 
 | |
| def _random_action(Arena, Player_one):
 | |
|   _RANDOM_ACTIONS= {
 | |
|       1: 'attack',
 | |
|       2: 'move',
 | |
|       }
 | |
|   Map= Arena.get_map()
 | |
|   avail_actions= Map.get_player_available_actions(Player_one)
 | |
|   _logs.log_debug(f'{Player_one.get_name()}:{Player_one.get_coordinates()}, avail_actions: {avail_actions}')
 | |
|   msg= ''
 | |
|   if 1 in avail_actions:
 | |
|     # XXX maybe in future this action is available only if you are near to another player
 | |
|     # so Player_two is no more random, but will be a random near player
 | |
|     preys= avail_actions[1]
 | |
|     Player_two= _rand.sample(preys, 1)[0]
 | |
|     while Player_one.get_id() == Player_two.get_id() and not Player_two.is_alive():
 | |
|       Player_two= _rand.sample(preys, 1)[0]
 | |
|     _dmg, msg= Player_one.attack(Player_two)
 | |
|   elif 2 in avail_actions:
 | |
|     Map= Arena.get_map()
 | |
|     available_movements= Map.get_player_available_directions(Player_one)
 | |
|     _logs.log_debug(f'{Player_one.get_name()}:{Player_one.get_coordinates()}, avail_movements: {available_movements}')
 | |
|     if not available_movements:
 | |
|       # XXX probably should skip this action and look for another action
 | |
|       return f'{Player_one.get_name()} Pensa a Guarino tutto il giorno'
 | |
|     _rand.shuffle(available_movements)
 | |
|     x, y, direction= available_movements[0]
 | |
|     Player_one.move(x, y)
 | |
|     Map.init_map_matrix()
 | |
|     _logs.log_debug(Map.get_renderized_map())
 | |
|     msg= f'{Player_one.get_name()} Si muove verso »»» {direction}'
 | |
| 
 | |
|   return msg
 | |
| 
 | |
| def play_one_day_debug(Arena):
 | |
|   if not Arena.get_players(): return
 | |
|   _logs.log_debug(f'Giorno #{Arena.day}')
 | |
|   alive_players= Arena.get_alive_players()
 | |
|   if len(alive_players) == 1:
 | |
|     day= Arena.day
 | |
|     return _end_game_debug(alive_players, day)
 | |
|   
 | |
|   daily_events= []
 | |
|   _rand.shuffle(alive_players)
 | |
|   for Player_one in alive_players:
 | |
|     if not Player_one.is_alive(): continue # he could be dead during this day cycle
 | |
|     msg= _random_action(Arena, Player_one)
 | |
|     #p_two= _rand.sample(Arena.get_alive_players(), 1)[0]
 | |
|     #while Player_one.get_id() == p_two.get_id():
 | |
|       #p_two= _rand.sample(Arena.get_alive_players(), 1)[0]
 | |
|     #_dmg, msg= Player_one.attack(p_two)
 | |
|     daily_events.append(msg)
 | |
|   
 | |
|   Arena.next_day()
 | |
|   res= '\n'.join(daily_events)
 | |
|   return res
 | |
|   #p_one, p_two= _rand.sample(alive_players, 2)
 | |
|   #_dmg, msg= p_one.attack(p_two)
 | |
|   #return msg
 | |
| 
 | |
| def init_debug_simulation():
 | |
|   Arena= _debug_data()
 | |
|   while (len(Arena.get_alive_players()) > 1):
 | |
|     events= play_one_day_debug(Arena)
 | |
|     _logs.log_debug('#################')
 | |
|     _logs.log_debug('#################')
 | |
|     _logs.log_debug('#################')
 | |
|     _logs.log_debug(events)
 | |
|     _logs.log_debug('#################')
 | |
|     _logs.log_debug('#################')
 | |
|     _logs.log_debug('#################')
 | |
|     _time.sleep(0.3)
 | |
| 
 | |
| def init_debug_loop():
 | |
|   Arena= _debug_data()
 | |
|   while (len(Arena.get_alive_players()) > 1):
 | |
|     alive_players= Arena.get_alive_players()
 | |
| 
 | |
|     p_one, p_two= _rand.sample(alive_players, 2)
 | |
|     p_one.attack(p_two)
 | |
| 
 | |
|     #Start a day
 | |
|     #At 23:59:
 | |
|     Arena.next_day()
 | |
|     _time.sleep(0.3)
 | |
|     #End of day
 | |
| 
 | |
|   last_player= Arena.get_alive_players()[0]
 | |
|   _logs.log_debug(f'{last_player.get_name()} sopravvive e vince dopo {Arena.day} lunghi Giorni, conquistando l\'amore eterno di Guarino')
 | |
| 
 | |
| def debug_random_map():
 | |
|   from entities import map as _map;
 | |
|   from entities import player;
 | |
|   M= _map.BrSimMap(players= [player.BrSimPlayer(i) for i in range(20)]);
 | |
|   res= M.get_renderized_map()
 | |
|   _logs.log_debug(res)
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|   init_debug()
 | 
