LPOO Project (2019)
For the LPOO course final project you will develop a text-based game in Java, taking into consideration the following points:
- The game should be text-based and use lanterna as its GUI framework.
- You should follow good object oriented design practices.
- The main focus of the project is not its size but good usage of design patterns so that OOP principles, like SOLID, are not violated.
- Together with the project, you will write a report that will contain, among others, information about the usage of design patterns in your project, which code smells are still present at the end, and what refactorings could be used to fix them.
- Your source code and report will be stored at a GitHub repository that will be given to you.
- You should also try to use good git practices (like using feature branches).
- Code should be tested extensively. Having a good design will help with this. Use mocks and stubs if needed.
- Important: Having a good design will help with some requirements changing mid-project. Be prepared for some surprises.
As an extra requirement, your game should also be playable using Swing as well as Lanterna. If you followed a MVC architecture, as recommended, then you should only have to change the View part of your architecture. Another idea is to implement the AbstractFactory pattern having one factory for Lanterna and another for Swing. Both these factories would know how to create the correct Models, Views, and Controllers.
The project should be done in groups of two students. If the number of students in a class is odd, one group will have one or three elements.
Deliverables and deliveries
You should deliver the following two artifacts:
- The source code, which should follow good object oriented design practices, with close attention to the SOLID principles and the use of appropriate design patterns, in a /code/ folder. All functionality should be adequately unit-tested.
- A report written in markdown syntax, following the provided template, in a README.MD file on the /docs/ folder. It should describe the features that are implemented, the features that are planned, the design patterns that have been used, the existing code smells and what refactoring techniques could be used to fix them. It should also reflect the quality of the unit tests with screenshots and links to the coverage and mutation testing reports.
These two artifacts should be continuously available in the project’s git repository and will be evaluated in two distinct points in time:
- Intermediate delivery @ 2019-05-05.
- Final delivery:
- Code for Demo @ 2019-05-27 to 2019-05-31 week (before your practical class).
- Final Code & Report @ 2019-06-02.
In both of these deliveries the code and the report should reflect your implementation up to that point in time. The features reported as implemented should be properly tested and bug-free. Existing unit tests should all pass. The use of design patterns should be properly motivated and described using UML.