/feup-lpoo-armadillo

Project developed for 'Object Oriented Programming Laboratory', a second year subject @FEUP. Made in collaboration with @edgaracarneiro.

Primary LanguageJavaMIT LicenseMIT

Armadillo

BCH compliance Open Source Love

Table of Contents
Setup/Installation Procedure
Video Tutorial
Package and class diagram (UML)
Design Patterns Used
Tests Coverage
Other Considerations

Setup/Installation Procedure

  • To install the android app through the Google Play Store

    Get it on Google Play

  • To install the desktop app (for Windows, Linux and MacOS)

    1. Download the jar here.
    2. Run the file from the terminal or by double-clicking it.
  • To install the development environment

    1. Clone this repository and open it with Android Studio.
    2. Set your Run Configuration to work in android/assets folder.
    3. To assemble a release apk you will need to change the signing settings to your own, or assemble an unsigned apk.

Video Tutorial

screen shot 2017-06-11 at 23 36 28

Package and class diagram (UML)

class diagram

Original package and class diagram for reference. This was drafted before we began development.

Design Patterns Used

  • Model–view–controller (MVC) - architectural pattern

    MVC Pattern

    The Game features three main packages:

    • Model: It expresses the application's behavior in terms of the problem domain, independent of the user interface (Controller package). It directly manages the data, logic and rules of the application.
    • View: An output representation of the model's information.
    • Controller: Accepts input and converts it to commands for the model or view.

    Why we decided to use it:

    • facilitates simultaneous development;
    • seperates responsabilities;
    • reduces coupling of components and, therefore, facilitates testing;
    • models can have multiple views.
  • Factory

    Factory Pattern in our Project

    Participating classes: ViewFactory and B2DFactory.

    Why we decided to use it:

    • Creates objects without exposing the instantiation logic to the client (therefore allowing for higher abstraction and cleaner code).
  • Factory Method

    Factory Method

    Participating classes: EntityView and all sub-classes (BallView, PowerUpView, ...).

    Why we decided to use it:

    • Allows the subclasses to decide which class to instantiate (useful for when a class knows it should create an object, but not it's type).
  • Null Object

    Participating classes: NullGameServices.

    Why we decided to use it: Prevents constant null checks which would result in no actions being executed.

  • Update Method

    Update Method

    Participating classes: EntityView and ShapeView.

    Why we decided to use it: facilitates updating all view entities in the game.

  • GameLoop

    GameLoop Pattern

    Participating classes: GameController (handles input), GameModel (updates game) and GameScreen (renders).

    Why we decided to use it: decouples the progression of game time from user input and processor speed.

Tests Coverage

  • 100% class coverage
  • 100% method coverage
  • 98% line coverage

code_coverage

Other Considerations

  • Lessons learned - Singleton... and why we decided not to use it

    We had initially planned for the GameModel class to implement the Singleton pattern, but eventually it became more troublesome than the problems it solved. It increased code coupling and made automated testing unnecessarily difficult.

  • Overall time spent developing:

    We estimate a total of 300 hours (evenly distributed between the two developers).

  • Difficulties along the way

    • Frustratingly trying to integrate google play services (and getting it to work on a release build);
    • Releasing an alpha on the play store, while adhearing to Google Play App Signing.

    (These are fairly simple once you've done it a couple times, but for first-timers like us it required understanding the inner works of Android Studio)

  • Notes

    If you see any references to 'Spheral', it was the original name of this project. We decided to rename it mid-development to Armadillo to better reflect the art style.

  • Developers:

    Project developed for 'Object Oriented Programming Laboratory', a second year subject @FEUP.

    Authors: Andre Cruz and Edgar Carneiro.

  • Game Art:

    A big thanks to Mariana Silva for providing most of the art we use in the game.

  • Tutorial Spin-Off

    As a result of our difficulties in setting up Google Play Services, we decided to write a detailed tutorial on this task: Setup Google Play Services in LibGDX.

    Tutorial Authors: @AndreFCruz and @antonioalmeida.