Julio Arantes
A01476726
CaesarSaladd
Welcome to Batman: Shadows of Gotham, a text-based adventure game where you take the role of the Dark Knight as Gotham City collapses into chaos. The inmates of Arkham Asylum have escaped, villains roam the streets, and only Batman can restore order. The Riddler has set up multiple puzzle chambers throughout the city. Solve riddles and amass health to defeat the Joker.
- Install Python 3.10+
Make sure you have Python installed. Check with:
python --version
- Run the main game file
From the project directory, run:
python game.py
This starts the interactive text-based adventure.
Comp1510-TermProject/
│
├── game_logic/
│ ├── __init__.py
│ ├── level_up.py
│ ├── room_interactions.py
│ ├── test_player_reached_new_level.py
│ ├── test_user_wants_to_heal.py
│ ├── user_heals.py
│
├── rooms/
│ ├── __init__.py
│ │
│ ├── alley_with_thugs_combat.py
│ ├── arkham_asylum_interactions.py
│ ├── batcave_interactions.py
│ ├── defuse_traps.py
│ ├── final_battle.py
│ ├── riddler_interactions.py
│ ├── vials_dealer_interaction.py
│
│ ├── rooms_unit_tests/
│ │ ├── alley_with_thugs_unit_tests/
│ │ │ ├── __init__.py
│ │ │ ├── test_thugs_combat.py
│ │ │ ├── test_thugs_generator.py
│ │ │
│ │ ├── arkham_asylum_interactions_unit_tests/
│ │ │ ├── __init__.py
│ │ │ ├── test_attack_mad_hatter.py
│ │ │ ├── test_user_chooses_analyze.py
│ │ │ ├── test_user_chooses_direct_attack.py
│ │ │ ├── test_user_chooses_smoke_bomb.py
│ │ │
│ │ ├── final_battle_unit_tests/
│ │ │ ├── __init__.py
│ │ │ ├── test_attack_joker.py
│ │ │ ├── test_joker_dialogue.py
│ │ │ ├── test_user_chooses_detective_vision.py
│ │ │
│ │ ├── vials_dealer_unit_tests/
│ │ ├── __init__.py
│ │ ├── test_user_chooses_to_play_card_game.py
│ │ ├── test_user_chooses_to_play_slots.py
│ │ ├── test_user_chooses_to_steal_vial.py
│
├── game.py
├── game.pdf
├── level10.png
├── README.md
├── .gitignore
│
├── test_check_if_goal_attained.py
├── test_get_user_choice.py
├── test_is_alive.py
├── test_make_board.py
├── test_make_character.py
├── test_move_character_or_heal.py
└── test_validate_move.py
| Requirement | Location |
|---|---|
| Use of immutable data structure | Board coordinates in game.py make_board |
| Board is correct size & efficient | make_board in game.py |
| Gameplay ends properly | check_if_goal_achieved in game.py, only possible if user is level 3 |
| Movement + boundaries correct | validate_move in game.py, user cannot move out of bounds |
| Varied + scalable challenges | Riddles, Traps, Vials Dealer and random combat, some fights with dialogue |
| Mutability minimized | Only object being mutated repeatedly is character dictionary and board |
| Mutable scope minimized | Modules are populated by small atomic functions |
| Uses list/dict comprehension | riddles_quiz in riddler_interactions.py line 188 |
| Uses if-statements | Move_character_or_heal in game.py lines 164 to 173 |
| Uses for/while loops | Game in game_py line 242 |
| Uses membership operator | get_user_choice in game.py line 96 |
Uses range() efficiently |
make_board in game.py lines 29 and 30 |
Uses itertools correctly |
alley_with_thugs.py thugs_generator lines 122 and 123 |
Uses random correctly |
alley_with_thugs.py thugs_generator lines 134 and 126 |
| Output uses formatted strings | Defuse_traps.py lines 271 and 272 |
| Exceptions & handling | try/except block in riddle_quiz in riddler_interactions.py |