ScalaQuest Appendix Documents

1 Sprints Historical Overview

In this document keep track of what we have done in the last Sprints (not the current). It is an historical document linking the issues and pull request that we opened or used in a given Sprints, so that we have an historical unique entry point for the work we have done.

The typical Sprint in our organizaion should last a week, but the first ones have a different duration as they are done into the holidays.

1.1 Sprint 0 (21st December - 24th December)

This is not exactly a real Sprint, but a first basic footprint for the future work (this is the reason for name “Sprint 0”). We made a lot of internal meetings to define context bounds and do knowledge crunching.

Precisely, we started doing some vague knowledge chrunching sessions from the submission of the project on the 6th of December, but we started making some heavy effort from the 24th.

In addition, we set the foundations of the project, by giving the Gradle Subproject Structure, setting up the test framework (ScalaTest) and starting setting up the CI.

Useful links:

1.2 Sprint 1 (24th December - 2nd January)

Here is how we really start the group work, splitting the team into two sub-teams, each one working into a different part of the project. We proceeded in parallel mostly, but we have done some intermediate meetings for integrate parts and solve common problems. The two parts are in progress yet, and they will be finished in the next Sprints. In addition, some minor tasks have been finished during the Sprint.

Roles:

  • Team 1: [@maldins46], [@corinz97], [@ThomasAngeliniUnibo]: in charge of developing the Model basics, and linked to it, also the Interpreter and Resolver components;
  • Team 2: [@lippo97], [@francescogorini]: in charge of developing the Prolog engine basics, and linked to it, also the Parser and Lexercomponents.

Useful links:

1.3 Sprint 2 (3rd January - 9th January)

In the second Sprint we basically continued the work started in the first one, divided in teams. Tasks regarding model and Prolog engine are two of the most funding part of the project, and as such they deserve particular attention. In particular, we have carried on various meeting to take some decisions about how to use the model in a more functional way, as described in the linked issue.

Useful links:

1.4 Sprint 3 (10th January - 16th January)

In the third Sprint we basically continued the work started in the previous, divided in teams. Tasks about Model and Engine basic structure are basically finished. We handled merge conflicts about the two parts during the Sprint Review. In addition, some minor tasks have been resolved in common meetings.

Useful links:

1.5 Sprint 4 (17th January - 23rd January)

In this Sprint we closed the base structure tasks of the previous Sprint, and we continued working divided in teams: we finished Model’s ScalaDoc and refactoring, and started a re-organization of the ItemRef concept, as an `AST. Additionally, we started some minor tasks, as an automation structure for the report, and CI optimization.

Useful links:

1.6 Sprint 5 (24th January - 30th January)

In this Sprint we continued working in teams, bringing up more other tasks. Team 1 revised the model, dealing with the concept of MessagePusher and Messages, improving the ScalaDoc and making some refactoring. In the meanwhile, Team 2 started working in a more structured concept of ItemDescription and Verbs, as a lexical abstraction for the game concepts. In addition, the team refactored the Prolog generation and some of the related concepts.

Furthermore, a task has been closed together, regarding a re-organization of the reports in a Gradle subproject, with a dedicated formatter and Linter for Markdown.

Useful links:

1.7 Sprint 6 (31st January - 6th February)

In this Sprint we continued working divided in groups. Team 2 continued and finished the dictionary module, a sort of initial “wrapper” used to generate Prolog code initially. Team 1 carried on various tasks regarding CI, QA enhancement, release generation, and created a bot for dependency update.

In addition, reports and documentation now are located in a separate repository, and a new page for the project description has been deployed.

Useful links:

1.8 Sprint 7 (7th February - 13th February)

In this Sprint we continued working divided in groups. Team 1 we re-organized the commons package, by splitting common reactions from the behaviors, we added some utility builders, and worked hard on the CI, by enabling a well-defined release workflow (with automatic scalaDoc generation and deploy at the end of the process), and by enabling coverage threshold, both on GH Actions and with the QA tool SonarCloud. Team 2 worked into the CLI, by enabling a specific test framework for ZIO. In addition, they worked into the resolver, in order to manage ambiguous description. Then, in a common meeting with all members, we work into the Escape Room example, by creating a real story with our framework. We also created our first stable releases.

Useful links:

1.9 Sprint 8 (14th February - 20th February)

The sprint 8 started with an important refactor of the model, carried out jointly from all members of the team. This was an important modification, regarding the split between State and Messages, that are separate entities actually, involved at different abstraction levels. In this joint group configuration, we also finished the second example, called PokeQuest. In the second part of the week, resuming the sub-team organization, we finished some minor tasks like a re-organization of the Reports’ CI and the common package based on the new State-Message configuration (in Team 1), and a refactoring/scaladoc addition for parseranddictionary` packages (in Team 2).

Useful links:

1.10 Sprint 9 (21st February - 27th February)

In Sprint 9 we focused on reports, in particular into the PPS one. The plan was to join forces reorganizing pre-existent documentation produced throughout the duration of the project into a single report, and finish it. The initial plan was to work in sub-teams: from Monday to Wednesday the Team 1 should have worked on chapters 1, 2, 3, meanwhile [@scalaquest/team-2] on 4,5,7. Then, in the second part of the week we should have switched roles, in order to complete, review and integrate the different parts. Due to various problems related to lessons and personal problems of the members, the second phase was prolonged, and continued until the next Sprint with both teams focusing on the last chapters. In addition, a major feature and some minor task has been completed, such as the enabling of continuous delivery on Maven Central, enabling of a development prerelease delivery system, and some minor adjustments.

Useful links:

1.11 Sprint 10 (28th February - 6th March)

In Sprint 10 we focused onto finish the PPS report. We finished it at the end of the Sprint. In parallel, we started working on the LSS report, we finished the last example WizardQuest, and we finished some minor modifications to the CI. We are planning to close the works in the next Sprint.

Useful links:

1.12 Sprint 11 (7th March - 10th March)

This is the final Sprint of the project, where we closed the last fixes and report revisions.

Useful links:

2 Guide to the examples

2.1 EscapeRoom

EscapeRoom is the first example created for ScalaQuest. The example is created using mainly configuring builders and Items given by the library.

In the following lines there is shown a little guide for playing this example, explaining the steps to do in order to win the match.

After have red the initial message shown at the beginning, it’s always recommended typing the command inspect and send it pressing the Enter button. Furthermore, this command is essential to understand the environment design and content.

About sentences, articles are always optional, and adjectives also but just if there aren’t ambiguity.

Initially, you are in a basement. Inspecting the room there are:

  • a brown chest
  • an iron hatch
  • a rusty heavy crowbar

You may try the command open the hatch with the crowbar, but it will be ineffective. Sending open the chest will open it, without needing a chest key. An old rusty key will appear in the room. Now the command open the hatch with the key will work and you can go in the living room using go u,go up or enter the hatch. Now you can go in the bathroom using go north, but it will contain nothing! So go back, and you may want to eat an apple… but which? Eat red apple will be a tasty action, while eat the green apple will bring in a sad ending, because is poisoned. Anyway, there is a big doorway, which is locked, so it needs some tool, like the chest previously. So, neither open the doorway nor open doorway with key, because it’s not avalaible anymore. Going back in the basement, there is a crowbar (maybe will be effective?). go down and take crowbar will bring it in your bag, as you can see with inspect bag. This allows you to move the object in another room. Go up again and open the doorway with crowbar will let you win.

2.2 PokeQuest

Pokequest is the second example created for ScalaQuest. The example is created using mainly custom Items.

In the following lines there is shown a little guide for playing this example, explaining the steps to do in order to win the match.

After have red the initial message shown at the beginning, it’s always recommended to type the command inspect and send it pressing the Enter button. Furthermore, this command is essential to understand the environment design and content.

About sentences, articles are always optional, and adjectives also but just if there aren’t ambiguity.

Initially, you are in Vermilion City. Inspecting the room there is a sleeping snorlax. inspect bag will tell there are a pikachu, a pokeball, a pokeflute.

Snorlax is sleeping and blocking the way, but wake snorlax would be ineffective and lead you to death. So, the pokeflute may be useful…

play the pokeflute or wake snorlax with pokeflute allows you to have the free way, going north with go n and moving into the forest.

There is a Charizard into the forest! You should capture it!

With catch charizard with pokeball it could happen, but at first time it is too strong, and in that case it would fly away.

This means it’s Pikachu’s turn!

attack charizard with pikachu is very effective, so don’t do it again, or Charizard will die!

Now catch charizard with pokeball will work and let you win the match!

2.3 WizardQuest

WizardQuest is the last example given for the project. This makes use of custom Items and a custom Ground, showing the potentiality of the last construct, mainly.

In the following lines there is a little guide for playing this example, explaining the steps to take in order to win the match.

After reading the initial message, it’s always recommended typing the command inspect and send it pressing the Enter button. Furthermore, this command is essential to understand the environment design and content.

About sentences, articles are always optional, and adjectives also but just if there aren’t ambiguity.

You are Harry Potter. And probably in the worst situation. Inspecting the room, you discover that you are in the Chamber of Secrets, with Tom Riddle in the front of you.

Tom has been subjugated a terrible basilisk and the poor Ginny Weasley is lying in the ground. Fortunately the basilisk is blind, but you don’t have any weapon to kill it.

You have to run away, through a tunnel in direction East with the command go east. The basilisk follows your sound, and you can’t return to the Chamber.

With inspect you notice that there’s a little stone in the ground behind you. throw the stone to distract the basilisk. Now you can go back to the Chamber with go west.

But the terrible basilisk is following you, so you have to find a sword or something else to kill it! In the Chamber there is the sorting hat and look inside the hat to find what you need.

Now kill the basilisk with the gryffindor sword!

The problems aren’t over! Now you have to destroy Tom Riddle for ever (or better, until next film). The basilisk hurts you, and a tooth of the basilisk remains on the ground. To kill Tom you have to destroy the diary with the tooth.