This is an old revision of the document!
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.
- Deadline (for both options): Friday 27 May
A. Lab homework (0.5p)
The lab homework consists in providing complete solutions to labs 4, 5, 6, 9 and 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.
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 playerOne
, howeverXX0XX
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
def sequences(p: Player)(b: Board): Map[Int,Int] = ???
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.
More details will be available during lecture.
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.
def play(p: Player, b: Board): Board = ???
You may slightly change the signature of this function, to accommodate your project.
You may start with a very basic (trivial) implementation, which will allow you to move on with B.2. and then refine it after B.2. is complete.
We offer no guidelines about how this function should be implemented, this is entirely up to you, but you may consider:
Possible strategies:
- You may implement
play
by simply evaluating the sequences that are available in the current play, as well as those of the opponent. This local strategy may become complicated, require a lot of code, as the game may unfold in different ways. It is also important to have a good strategy for starting the game (e.g. a play in either corner of the board is a bad way to start).
- The standard approach, is to implement a Minimax Tree which allows you to inspect the game unfolding for a few moves in advance (e.g. 3 moves). More details will be given during lecture.
- 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.