Programming Assignment 6: Bipartite Concentration

This programming assignment has two parts
  • a pure java part, due on Friday
  • a complete android app due next Tuesday
Your goal is to create a kind of concentration game.  The classic concentration game is played by
turning all the cards in a deck face down. Players take turns flipping over pairs of cards.  If the pair matches (e.g. two black sevens or two red Queens) they get to take the cards; otherwise, they flip the cards back over. The goal is to get as many cards as you can and the challenge is to remember where the matching cards are.

In this variant, players will also be matching pairs of words or phrases, e.g. States and their Capitals, and there will be two playing boards: e.g. one with State names and the other with Capital names. Players will take turns selecting positions in the two boards (e.g. A-3 and C-4). If they get a match, those positions are taken off the board and they get a point.  This framework can be used for all kinds of simple learning tasks (e.g. learning a foreign alphabet or language, chemical properties of elements, heads of state,  multiplication problems, pure memory of colors, ...)

The program should be able to read the game data from a file (or a URL) and the user should be offered
a choice of which game to play as well as how many players there will be and what there names are.

The Pure Java Game (due Friday)
The java version will simply print a textual representation of the two game boards and ask the user to
write their choices (as above "A-3&C-4") and it will prompt the players in order and keep track of the score.

The program should also keep track of the number of games that each player has won. It only has to work with one game (e.g. state capitals).  This pure Java version should be developed with JUnit tests for the main classes.

This part of the project has a one hour time limit.  After one hour you should upload your code to github and include a comment explaining how far you got and what needs to be done!

What to submit:
  • upload your code to github
  • create a short screen cast showing you playing the java game
  • create a short screen cast explaining the JUnit tests you created

The Android Version (due Tuesday)
The android version will present a graphical version of the game where users touch the "cards" to indicate their chosen pair.  The android version should also have a soundtrack playing in the background (which should be licensed music, no copyright violations allowed!) and should have a sound effect when there is a match and a different sound effect when there is a non-match.

What to submit:
  • upload your code to github
  • create a short screen cast showing you playing the android game on the simulator (or a movie playing on the device)

Learning Objectives:
After this programming assignment you should
  • have more experience in designing Java classes to represent a multi-player game
  • understand how to add a soundtrack and sound effects to an android game
  • have another android application to add to your portfolio
If you get into this PA you could extend it in several ways, e.g.
  • get the games from a URL and allow people to upload games to the server
  • provide images and sounds with the pairs (for multi-modal learning)
  • allow networked players as well as co-located players
  • passively assess changes in memory over time

You can get access to a wide range of "flashcard data" at
The card sets can be accessed using a REST-ful interface that returns the data using json