Edit this page Backlinks This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ===== H04. Final homework ===== For the final homework, you **may** choose between two options: * **A. Lab homework (0.5p)**. All students which **did not submit** Homework 3, (or submitted a solution which did not compile or got under 30p), may choose this homework. The **maximum** number of points that may be achieved is 0.5p. See details below. * **(B) Tic Tac Toe part 2 (1p)**. All students which **submitted** Homework 3 or a consistent part of it may choose this homework. See details below. ===== A. Lab homework (0.5p) ===== The lab homework consists in providing **complete** solutions to labs [[fp:lab04|4]], [[fp:lab05|5]], [[fp:lab06|6]], [[fp:lab07|9]] and [[fp:lab08|10]], except for exercises marked with **(!)**. * **Each completed lab will be graded with 0.1p** * **There will be no partial points for partially solved labs** - each lab has to be entirely complete to be graded. * **Solutions will be presented live and graded during lab** - no solutions sent by email or MS Teams will be graded. * **Solutions should be solved 100% individually**. If some exercises or **parts** of them are taken from other sources, the **entire homework** will not be graded. * Deadline: **Friday 27 May** ===== B. Tic Tac Toe part 2 (1p) ===== Option B. for Homework 4 consists in developing a complete Tic Tac Toe game, together with an AI and a very basic interface. * For this stage, you will decide on the structure of your project, as well as write tests to guide your implementation. * There are three parts of this homework, which will be evaluated independently; * **The evaluation will take into account your working code, AS WELL AS THE TESTS THAT YOU WRITE** (If you write insufficient tests, an otherwise working code may not be graded). * There will be no other partial points, other than those mentioned explicitly in the statement. ==== B.1. Board analysis (0.2p) ==== For this part, you need to implement a function ''sequences'', that returns a map of the form: ''(a,5), (b,4), (c,3), (d,2)'' where: * ''a'' is the number sequences of length 5 that the player has established (on lines, columns or diagonals). * ''b'' is the number of sequences of length 4 **which can be filled-out in order to achieve a 5-sequence**. For example: ''XX XX'' is such a sequence for player ''One'', however ''XX0XX'' is not, since this cannot be filled-out in order to achieve a 5-sequence. * ''c'' (resp. ''d'') is the number of sequences of length 3 (resp. 2) which can be filled-out in order to achieve a 5-sequence. * Proper testing is **essential** for this function, as the AI will take decisions based on it. It will be harder to spot problems with ''sequences'' in a later stage of the project. * You can replace the implementation of ''winner'' with a call to this function, to make the code more compact and avoid partial re-implementations <code scala> def sequences(p: Player)(b: Board): Map[Int,Int] = ??? </code> ==== B.2. Functionality (0.35p) ==== For this part, you need to implement a functional project which consists of a running loop: * Asks for the player to supply a move (expressed as a pair (x,y) of coordinates to play, or in any other manner that you prefer). * Plays the opponent move via the AI * Displays the board, and repeats, until either player wins. ** For this particular part, tests are not necessary**. ==== B.3. Game AI (0.45p) ==== This part is at the very core of the project, and essentially consists of a function ''play'', which implements the AIs decision of selecting a move. <code scala> def play(p: Player, b: Board): Board = ??? </code> **You may slightly change the signature of this function**, to accommodate your project. * Very basic, but functional AI: **0.1p** * Intermediate AI (which may win in some cases): **0.2p** * Minimax-based AI **0.45p** ==== B.4. Bonus (0.2p) ==== During the last lecture, we will play a tournament of Tic-Tac-Toe, in which all your AI programs will compete. **The author of the best AI will be awarded a bonus of 0.2p**.