Files in the top-level directory in any check-in
- .DS_Store
- .editorconfig
- .gitignore
- .nojekyll
- .github
- .idea
- com
- gradle
- images
- imgs
- legal
- resources
- script-dir
- src
- allclasses-index.html
- allpackages-index.html
- build.gradle
- CNAME
- constant-values.html
- element-list
- EXT_LICENSE
- gradlew
- gradlew.bat
- help-doc.html
- index-all.html
- index.html
- jquery-ui.overrides.css
- LICENSE
- member-search-index.js
- module-search-index.js
- move_data.csv
- overview-summary.html
- overview-tree.html
- package-search-index.js
- party_data.csv
- project_plan_dev.md
- README.md
- screenshots.webp
- script.js
- search.js
- stylesheet.css
- tag-search-index.js
- type-search-index.js
Mountain Group 105
Mountain Group 105 is a rogue-like video game originally created as part of a software design course, with the following premise:
You are a group of four weary travellers. You have been walking for so long that you no longer have any memory of where you came from or who you are. You cannot recall anything but the endless action of putting one foot in front of the other, traversing this empty landscape. Suddenly, you look up, startled out of your reverie. An imposing mountain looms before you. Your party steps forward, drawn to it for some inexplicable reason. You crane your neck to see if you can make out the peak, but the morning mist impedes your view. You all know you cannot go back to wherever you came from. You have to keep going. You have to climb the mountain. Maybe whatever waits for you up there will remind you of who you are… and what you’re searching for.
Running Instructions
IntelliJ IDEA (IDE) Instructions
First download the latest source code from here and extract it.
Next, open the project in IntelliJ by going to to File > Open
, and navigating to the folder created in the last step.
Next, if IntelliJ does not immediately recognize the fact this is a Gradle project (you can tell by the lack of a Gradle
tab on any of the edges), navigate to the build.gradle
file in the IDE.
An icon with an elephant should appear, click it.
There should now be a Gradle
tab on one of the edges.
Finally, open the Gradle
tab and navigate to course-project-group-105 > Tasks > application
and double-click run
.
Command-Line (CLI) Instructions
First, this project requires Java 17, so make sure that is installed.
Next download the source code and change into that directory which can either be done by
fossil clone https://vcs.pta.gg/mg105
cd mg105
or by
wget https://vcs.pta.gg/mg105/zip/trunk/download.zip
unzip download.zip
cd download
if you do not have Fossil installed.
Finally, this is a standard Gradle project, so to start the application simply run
gradlew.bat run
in the Windows CMD, or
./gradlew run
on any Unix-like operating system (or the built-in IntelliJ IDEA terminal).
Features
As a complete game, Mountain Group 105 features
- a randomly generated room-based map,
- the ability to change the character on the map,
- a progressively updating minimap that only shows currently discovered rooms,
- a turn-based battle sequence,
- an inventory system (with health potions and upgrade tokens),
- an item-based character upgrade system,
- an interactive controls display,
and it has been balanced so that it plays decently well!
Exercise to the reader: match a feature to each of the four screenshots at the top of this README.
Program Architecture
Being part of a specific course, this project strictly adheres to Robert Martin's Clean Architecture.
The code is packaged by layers where
com.mg105.entities
contain the enterprise business rules,com.mg105.use_cases
contain the application business rules,com.mg105.interface_adapters
contain the interface adapters, andcom.mg105.user_interface
andcom.mg105.data_control
both contain frameworks and drivers.
Additionally the code makes use of a plethora of design patterns including
- facade pattern in
com.mg105.use_cases.save.Saver
andcom.mg105.use_cases.set_up.data_system_creator.DataStorageSystemCreator
, - simple factory pattern in
com.mg105.use_cases.inventory.ItemFactory
andcom.mg105.user_interface.StandardComponentFactory
, - builder pattern in
com.mg105.use_cases.set_up.data_system_creator.DataStorageSystemCreator
, - chain of responsibility pattern in
com.mg105.user_interface.InputListener
,com.mg105.interface_adapters.InputInterpreter
, andcom.mg105.interface_adapters.InputControllable
, - observer pattern in
com.mg105.use_cases.map.RoomUpdater
, - mediator pattern in
com.mg105.entities.GameState
, and - dependency injection in essentially all the classes.
Changes Since Initial Release
As previously mentioned this was originally part of a course project. The original state of the source code as of the submission date can be found here or at its original home on GitHub, here.
Since the original release, the only changes have been a complete UI overhaul (the core functionality and overall architecture is essentially unchanged). The marking scheme allocated no marks for how pretty it looked, and so no time was spent on that. In particular the overhaul aims to improve
- lack of consistent game resolution,
- unintuitive and inconsistent controls (some buttons, some keyboard), and
- lack of any real graphics or use of colour.
A full diff of these changes can be found here.
Note for Apple Silicon Users
Mountain Group 105 has a hard dependency on JavaFX, which has been flaky on Apple Silicon chips. The game may not be playable on your hardware.
Note for Tiling Window Manager Users
Put your window manager into its floating mode before starting the game. The game expects a constant, self-set resolution, which tiling window managers tend to violate.
Copyright
Unless mentioned in the EXT_LICENSE file, code is licensed under the GNU Affero General Public License, Version 3.0. See the LICENSE and EXT_LICENSE files for more details.