Skip to content

BKNorton/GameGuideApp

Repository files navigation

Description

This menu system I built was designed to display game guide information to use as a tool while playing video games. It was also set up so that others could contribute to it and add a guide for their own favorite games.

A little background

I started this as a project for school and decided I wanted to make a game guide for the game Monster Hunter Rise that me and my friends were playing at the time. There was a lot of information that I wish I had readily available that either did not exist in the game or was not easy to view in game; especialy while in the middle of a hunt.

I did not know any app dev framework at the time or any other way to display data so I needed to just stick with what I knew which was a console application.

I also did not know how to create and work with databases at the time of starting this project which is why I just store all data as json files.

Skills

This project showcases my programming knowledge and skills to future potential employers by:

  • Demonstrating my understanding of C# and Object Oriented Programming
  • Using Abstract classes to reduce code duplication
  • Using interfaces and constructor dependency injection to abstract dependencies and loosely couple classes
  • Using json to store data and read data and convert json strings into models and from models into json strings
  • Using SOLID Princibles to make my code more modularized and easier to understand, edit, and add too
  • What's cool about this

    This project may have become a little more complicated than it needed to be for the scope of my school project but once I started It was hard to stop.

    I wanted to find a way to implement everyting I was learning inside and outside of class into this one project. Originaly this menu system was very simple and was not modularized. Everything was in one project and a lot of the code was written in just a few classes.

    But as I learned more I decided I wanted to be able to make this modularized with expansion and growth in mind.

    So I needed to make some changes

    1. I wanted to decouple the menu system from the games and the UI, and make it so that the UI could be swapped out for when I learned how to display data in other ways like a windows forms. (Again I did not know any UI framework)
    2. I wanted others to be able to contribute and create their own game guides without needing to know how the menu system or the UI worked

    After refactoring the whole solution to achieve these goals I had a much larger project than was originally needed.

    Originaly I had to format all the strings in the json file to display everything the way I wanted. This however was not optimal because I had to use string formating for every string and that took a very long time and a lot of trial and error to get.

    Instead, I created a formatting tool for console output that formats all the data for me as it displays. This saved me a lot of ugly tedious code.

    Later on when I learned how to use .Net MAUI, I realized my menu system shared similarities with this framework. Of course mine is nowhere near as good but they contained similar concepts.

    • Adding pages in MAUI is similar to how you use the menus in mine.
    • Pages/Menus allow you to add predefined views (or attributes in mine) to the page that represents the view.
    • I also realized that I was using MVVM princibles before I had even learned them.
    • The AppShell in MAUI that holds all pages within the app and provides navigation is similar to how my class Navigation_Menu contains all menus and provides navigation

    Notes

  • The only game that currently has any menu views workig is Monster Hunter Rise
  • The Materials menu in Monster Hunter Rise has not been implemented
  • To Do

    1. Finish Monster Hunter Rise game guide
    2. Add more attributes that allow users to persist data
    3. Finsh all code documentation
    4. Potentially I would like to add a view that allows users to create game guides in the app (very ambitious).

    Instructions

    How to start and navigate through the app

    1. Clone repository to local file.
    2. Open the new file and start the debugger.
    3. Type the number associated with the game you would like to view and press Enter.
    4. Use this same method to navigate through all menu lists.
    5. If you would like to go back to the previous menu, type 0 into the entry field and press Enter.
    6. If you want to exit the program, return to the main menu and type 0 and press Enter.

    How to add more games

    Use the Monster Hunter Rise game as your example. Can be found in GameGuideApp.GameLibrary.

    1. In the GameLibrary project create a folder with the name of your game.
    2. Create a class that inherits from Game that can be found in GameGuideApp.MenuSystem.Menus
    3. Create a folder in your game folder to hold all of your menus and name it "Menus"
    4. Create all your menus using the Menu Templates that can be found in GameGuideApp.MenuSystem.Menus.MenuTemplates
      • All menu temeplates are abstract and must be implemented when inherited
    5. Add your game to the List games in the Program.cs file in GameGuideApp.GameGuideConsole