Пример #1
0
def generate_map():

    traps = generate_traps()
    treasures = generate_treasures()
    traps_replacement = [-1 for i in traps]
    treasures_replacement = [1 for i in treasures]

    m_logger.debug(f'map_generating: start map generating')
    global game_map
    game_map = [0 for i in range(mapsize) for j in range(mapsize)]

    m_logger.debug(f'map_generating: empty map as list generated')

    for (trap, replacement) in zip(traps, traps_replacement):
        game_map[trap] = replacement

    m_logger.debug(f'map_generating: traps spawned on map')

    for (treasure, replacement) in zip(treasures, treasures_replacement):
        game_map[treasure] = replacement

    m_logger.debug(f'map_generating: start treasure generation')

    game_map = [
        game_map[i * mapsize:(i + 1) * mapsize] for i in range(mapsize)
    ]

    m_logger.debug(f'map_generating: map splited in rows')
Пример #2
0
def input_player_choice():

    m_logger.info('Where do you want to move: ')
    player_choice = input()
    m_logger.debug(f'dungeon_game : player inputed {player_choice}')
    player_choice.casefold()

    if player_choice == 'save':
        m_logger.debug('dungeon_game : player want to save game')
        save_game()

    else:
        DIRECTIONS = ['up', 'down', 'left', 'right']
        while not player_choice in DIRECTIONS:

            m_logger.debug('dungeon_game : player typed something wrong')
            m_logger.info(
                "I'm sorry, I don't understand where do you want to go.\nTry once more: "
            )
            player_choice = input()
            m_logger.debug(
                f'dungeon_game : player inputed {player_choice} as new direction'
            )
            player_choice.casefold()

        m_logger.debug(
            f'dungeon_game : success! player inputed right direction')
        return player_choice
def set_loaded_data(data):
    m_logger.debug(f'game_step : starting data loading')
    mg.mapsize = data[0]
    mg.game_map = data[1]
    m_logger.debug(f'game_step : data loaded')
    global is_player_lost
    is_player_lost = False

    global is_player_won
    is_player_won = False
def notify_player_about_treasures():

    neighbour_values = get_neighbour_values()
    m_logger.debug(f'game_step : got list of neighbour cells')
    neighbour_values.sort(reverse = True)
    m_logger.debug(f'game_step : sorted (reverse = True) list of neighbour cells')

    has_treasures = neighbour_values[0] == 1
    if has_treasures:
        m_logger.info('You are close to win! Treasure is somewhere near you')
def notify_player_about_traps():

    neighbour_values = get_neighbour_values()
    m_logger.debug(f'game_step : got list of neighbour cells')
    neighbour_values.sort()
    m_logger.debug(f'game_step : sorted list of neighbour cells')
   

    has_traps = neighbour_values[0] == -1
    if has_traps:
        m_logger.info('Be careful! Trap is somewhere near you!')
Пример #6
0
def save_game():

    m_logger.debug(f'dungeon_game : starting game saving')
    file = open('savefile.txt', 'wb')
    m_logger.debug(f'dungeon_game : opened savefile.txt in write mode')
    to_save = (gs.get_to_save_data(), gs.player_position)
    m_logger.debug(f'dungeon_game : formed data to save')
    pickle.dump(to_save, file)
    m_logger.debug(f'dungeon_game : serialized data to file')

    file.close()
    m_logger.debug(f'dungeon_game : closed file')
Пример #7
0
def load_game():

    m_logger.debug(f'dungeon_game : starting game loading')
    file = open('savefile.txt', 'rb')
    m_logger.debug(f'dungeon_game : opened file in read mode')
    loaded = pickle.load(file)
    m_logger.debug(f'dungeon_game : loaded data')
    gs.set_loaded_data(loaded[0])
    gs.player_position = loaded[1]
    m_logger.debug(f'dungeon_game : set data to game_step module')

    file.close()
    m_logger.debug(f'dungeon_game : closed file')
Пример #8
0
def spawn_player():

    player_position = choice(range(mapsize * mapsize))

    m_logger.debug(
        f'map_generating: player_position randomly generated {player_position}'
    )

    row, col = player_position // mapsize, player_position % mapsize

    while game_map[row][col] == -1 or game_map[row][col] == 1:

        player_position = choice(range(mapsize * mapsize))
        row, col = player_position // mapsize, player_position % mapsize

        m_logger.debug(
            f'map_generating: player_position generated once more {player_position}'
        )

    return row, col
def get_neighbour_values():
    m_logger.debug(f'game_step : starting list of neighbour cells forming')
    neighbour_cells = [[player_position[0] + direction[0], player_position[1] + direction[1]]  for direction in list(DIRECTION_TO_MOVE.values())]
    neighbour_cells = list(filter(lambda cell: cell[0] >= 0 and cell[1] >= 0 and cell[0] < mg.mapsize and cell[1] < mg.mapsize, neighbour_cells))
    m_logger.debug(f'game_step : list of neighbour cells formed')

    neighbour_cells_values = [mg.game_map[cell[0]][cell[1]] for cell in neighbour_cells]
    m_logger.debug(f'game_step : list of neighbour cells values calculated')

    return neighbour_cells_values
Пример #10
0
def generate_traps():

    traps_amount = mapsize * mapsize // 10
    m_logger.debug(f'map_generating: traps amount will be {traps_amount}')

    m_logger.debug(f'map_generating: start trap generating')

    traps = [choice(range(mapsize * mapsize)) for i in range(traps_amount)]

    m_logger.debug(f'map_generating: traps generated')

    return traps
def init_game():
    m_logger.debug(f'game_step : starting game map initialization')
    mg.init()
    m_logger.debug(f'game_step : game map initialized')

    global player_position
    player_position = list(mg.spawn_player())
    m_logger.debug(f'game_step : player spawned')

    global is_player_lost
    is_player_lost = False

    global is_player_won
    is_player_won = False
Пример #12
0
def new_game():

    m_logger.debug(f'dungeon_game : starting game initialization')
    gs.init_game()
    m_logger.debug(f'dungeon_game : game initialized')
Пример #13
0
    m_logger.debug(f'dungeon_game : closed file')


def new_game():

    m_logger.debug(f'dungeon_game : starting game initialization')
    gs.init_game()
    m_logger.debug(f'dungeon_game : game initialized')


m_logger.info(
    "Do you want to play a new game or load old one?\nEnter your choice [N/L]:"
)

new_or_load = input()
m_logger.debug(f'dungeon_game : player inputed {new_or_load}')
new_or_load.casefold()

while not new_or_load in ['n', 'l']:
    m_logger.debug(f'dungeon_game : player inputed something wrong')
    m_logger.info("Try again\nEnter your choice [N/L]: ")

    new_or_load = input()
    m_logger.debug(f'dungeon_game : player inputed {new_or_load}')
    new_or_load.casefold()

m_logger.debug(f'dungeon_game : player inputed successfully')

if new_or_load == 'n':
    m_logger.debug(f'dungeon_game : player want to start new game')
    new_game()
def print_game_map():

    TRAP = '#'
    TREASURE = '*'
    PLAYER = '!'
    EMPTY_CELL = '.'
    m_logger.debug(f'game_step : game map formatting to print started')
    game_map = mg.game_map
    game_map = [[TRAP if cell == -1 else cell for cell in row] for row in game_map ]
    m_logger.debug(f'game_step : game map traps formatted')
    game_map = [[TREASURE if cell == 1 else cell for cell in row] for row in game_map ]
    m_logger.debug(f'game_step : game map treasures formatted')
    game_map = [[EMPTY_CELL if cell == 0 else cell for cell in row] for row in game_map ]
    m_logger.debug(f'game_step : game map empty cells formatted')

    game_map[player_position[0]][player_position[1]] = PLAYER
    m_logger.debug(f'game_step : game map player position formatted')
    m_logger.debug(f'game_step : game map formatted')

    for r in game_map:
        print(*r)
    m_logger.debug(f'game_step : game map printed')

    m_logger.info(f'Player last position: {player_position}')
def get_to_save_data():
    m_logger.debug(f'game_step : data to save ready to return')
    return mg.mapsize, mg.game_map
def perform_next_step(direction):
    global player_position
    old_position = list(player_position)
    m_logger.debug(f'game_step : saved previous position')

    direction_to_move = DIRECTION_TO_MOVE[direction]
    m_logger.debug(f'game_step : got direction to move by text value of direction')
    
    player_position[0] += direction_to_move[0]
    player_position[1] += direction_to_move[1]
    m_logger.debug(f'game_step : updated player position')

    if player_position[0] < 0 or player_position[1] < 0 or player_position[0] >= mg.mapsize or player_position[1] >= mg.mapsize:
        m_logger.info("You can't move there! You reached border!\n")
        m_logger.debug(f'game_step : player tried to move out from map')
        player_position[0] -= direction_to_move[0]
        player_position[1] -= direction_to_move[1]
        m_logger.debug(f'game_step : player position reverted')

    else:
        m_logger.info(f'Player position changed from ({old_position[1]},{old_position[0]}) to ({player_position[1]},{player_position[0]})')

    row, col = player_position

    global is_player_lost
    if mg.game_map[row][col] == -1:
        m_logger.debug(f'game_step : player lost')
        is_player_lost = True

    global is_player_won
    if mg.game_map[row][col] == 1:
        m_logger.debug(f'game_step : player won')
        is_player_won = True