Town deck

This commit is contained in:
henriquenakashima 2021-03-28 16:28:54 -04:00
parent 51123c10bc
commit a7387da9fc

View file

@ -2,20 +2,33 @@ import random
from typing import List from typing import List
import map.quest_map import map.quest_map
from map.quest_map import QuestMap, MapEncounter, EncounterType, QuestPath as QP from map.quest_map import QuestMap, MapEncounter, EncounterType as ET, QuestPath as QP
TOWN_DECK = (
[ET.TOWN_MARKET] * 2
+ [ET.TOWN_TAVERN] * 3
+ [ET.TOWN_DOCKS] * 2
+ [ET.TOWN_LIBRARY] * 5
+ [ET.TOWN_WORKSHOP] * 2
+ [ET.TOWN_TOWN_HALL] * 2
+ [ET.TOWN_TEMPLE] * 2
+ [ET.TOWN_REST] * 2
+ [ET.TOWN_ROAD] * 7)
DIAGONALS_DECK = [QP.NO_PATH] * 8 + [QP.FORWARD_LEFT] * 5 + [QP.FORWARD_RIGHT] * 5
def generate_encounter_inaccessible() -> MapEncounter: def generate_encounter_inaccessible() -> MapEncounter:
return MapEncounter(EncounterType.INACCESSIBLE) return MapEncounter(ET.INACCESSIBLE)
def generate_encounter_battle(battle_type: EncounterType): def generate_encounter_battle(battle_type: ET):
assert battle_type in map.quest_map.ENCOUNTER_TYPES_BATTLE assert battle_type in map.quest_map.ENCOUNTER_TYPES_BATTLE
return MapEncounter(battle_type) return MapEncounter(battle_type)
def generate_encounter_town(): def generate_encounter_town(town_type: ET):
town_type = random.choice(map.quest_map.ENCOUNTER_TYPES_TOWN) assert town_type in map.quest_map.ENCOUNTER_TYPES_TOWN
return MapEncounter(town_type) return MapEncounter(town_type)
@ -26,27 +39,28 @@ def generate_map() -> QuestMap:
# TODO: Use sample as if drawing from a deck # TODO: Use sample as if drawing from a deck
encounters_rows = [] encounters_rows = []
town_deck_it = iter(random.sample(TOWN_DECK, len(TOWN_DECK)))
for r in range(11): for r in range(11):
row: List[MapEncounter] = [] row: List[MapEncounter] = []
if r == 10: if r == 10:
row.append(generate_encounter_inaccessible()) row.append(generate_encounter_inaccessible())
row.append(generate_encounter_battle(EncounterType.BATTLE_BOSS)) row.append(generate_encounter_battle(ET.BATTLE_BOSS))
row.append(generate_encounter_inaccessible()) row.append(generate_encounter_inaccessible())
elif r in (1, 4, 7): elif r in (1, 4, 7):
elite_column = random.randrange(4) # 75% chance of elite elite_column = random.randrange(4) # 75% chance of elite
for c in range(3): for c in range(3):
battle_type = EncounterType.BATTLE_ELITE if c == elite_column else EncounterType.BATTLE_REGULAR battle_type = ET.BATTLE_ELITE if c == elite_column else ET.BATTLE_REGULAR
row.append(generate_encounter_battle(battle_type)) row.append(generate_encounter_battle(battle_type))
else: else:
for c in range(3): for c in range(3):
row.append(generate_encounter_town()) town_type = next(town_deck_it)
row.append(generate_encounter_town(town_type))
encounters_rows.append(row) encounters_rows.append(row)
quest_map.encounters = encounters_rows quest_map.encounters = encounters_rows
# Generate paths # Generate paths
diagonals_deck = [QP.NO_PATH] * 8 + [QP.FORWARD_LEFT] * 5 + [QP.FORWARD_RIGHT] * 5 random_paths_it = iter(random.sample(DIAGONALS_DECK, len(DIAGONALS_DECK)))
random_paths_it = iter(random.sample(diagonals_deck, len(diagonals_deck)))
path_rows = [] path_rows = []
for r in range(11 - 1): for r in range(11 - 1):
row: List[QP] row: List[QP]