COMP 3004B Individual Assignment 2

Due February 12 2021 9AM


You are to design, code and test a networked Java implementation of the game Crazy Eights for 3 and 4 players. You must develop your code using Github, IntelliJ IDEA, Maven and Java 1.8. You must test your code using specifically JUnit version 4.12. For networking, you may use sockets or, for a bonus, Spring Boot.


Description of the basic card game:

(also watch https://www.youtube.com/watch?v=iDQjn3k76Mw)

The game consists of several rounds, each round concluding by computing the score of each player for that round and updating their game scores accordingly. In a round, five cards are dealt to each player. The remaining cards of the deck are placed face down at the center of the table as the stock pile. The top card is then turned face up to start the game as the first card in the discard pile. This top card cannot be an eight and, if this is the case, that eight is put back randomly in the deck and a new top card is picked.

In a round, on his/her turn, a player discards a card by matching rank or suit with the top card of the discard pile. Alternatively, a player can play any 8, which allows that player to declare the z that the next player is to play: that next player must then match the named suit or play another 8.

If a player is unable to play, that player draws, one at a time, up to 3 cards from the stock pile. A card that is drawn and can be played must be played. If still unable to play after 3 draws, that player must then immediately end his/her turn.

A round is over as soon as one player plays their last card. In this case, that player scores 0 for the round. Each other player scores the total value of the cards in their hand as follows: 8s score 50 points, kings, queens and jacks are worth 10 points, and all other cards are worth their face value. The scores for the current round are added to those of the previous rounds. The game is over once any of the players reaches 100 points. The winner is the player with the lowest score and the game is over.

Alternatively, a round is over once the stock pile is exhausted and no player can play another card. That is, even if the stock pile is exhausted, players continue their turns until no player can play another card. In this case, all players score the total value of the cards in their hand.


Additional Special Behavior Cards:

a) Queens

Playing a Queen causes the next player to miss their turn.

b) Aces

Playing an Ace reverses the direction of play (i.e., modifies who is the next player to play.

c) Twos

Playing a Two forces the next player to draw two cards, unless they can play two cards. Furthermore, if a two is played in response to a two, the next player must draw four cards!


Additional rules for this assignment:

1) The order in which the players join a game determines their sequence of play. That is, the first player to have joined plays first in the first round, followed by the second player to have joined, etc. In the second round, it is the second player to have joined the game who starts that 2nd round, followed by the third player to have joined, etc.


Assignment Requirements:

Your game interface must allow each player to see their cards, the number of cards remaining in the stock pile, the top card of the discard pile, and the score of all players. This interface must also indicate whose turn it is, and, once a player’s turn ends, who is the next player to play. Finally, at the end of the game, the winner must be identified.

A graphical user interface is NOT required: you are to use a textual interface, with S for spades, C for Clubs, D for diamonds and H for hearts. So 8H refers to the eight of hearts.

You are to submit a single file to cuLearn by the due date.

This file must have its name consist of:

- your LAST name followed by a – followed by

- your First name followed by a – followed by

- your student number followed by a – followed by A2

Your submission must be of type .xlsx and contain the filled correction grid that will have been posted for this assignment. This grid will have you specify a link to your repository. You must have this repository private and grant access to it to the instructor AND the 4 TAs at least 1 week prior to the deadline for submission.

The grid will have you specify a link to a first unlisted youtube video showing you:

1) downloading your game from your repository

2) building your game

3) starting your game with 3 players

4) playing a round including scoring

5) playing a second round in which a player will go over 100 and a winner will be determined.

The purpose of this first video is to show your game being used independently of the tests you have to execute in a second video.

The exact cards to ‘rig’ the game play will be posted by February 1st.

The correction grid also specifies an extensive set of tests to verify the functional correctness of your implementation. The grid will have you specify a link to a second unlisted youtube video addressing your testing by:

1) downloading your game from your repository

2) building your game

3) showing where the JUnit methods corresponding to the tests of the grid are to be found.

4) Running the test suite in order to demonstrate the required tests pass.

A networked implementation of the game of Yahtzee will be posted for you to study and will be briefly discussed in class.

A non-networked solution that satisfies all other requirements of this assignment will get a mark of 50 out of 100.

Any submission that is incorrectly named or not opening in Excel will automatically get a mark of 0.