Programming of Interactive Systems 

In-class work and Homework 1, 2 and 3: Minesweeper

Your goal is to storyboard and then develop your own version of an interactive game inspired by the legendary legacy game Minesweeper. Mines are placed in a grid and then hidden, and players try to uncover grid cells without hitting a mine, while uncovered cells can give them clues about the number of mined in the neighbouring cells. A version of the game can be found online here,  and a bit on its history can be found on wikipedia.


You must work individually.

We suggest to implement the user interface in Java. If you want to use another language you should ask the instructors first.

concept and proposed functionality

We expect from the game the following basic characteristics and functionalities. The game is some form of grid (or other geometric arrangement) of cells that can be empty or contain a mine (or other items of interestt). Players can open a cell, and this can reveal a mine (if one is underneath) and the game ends. If the cell is empty, and is adjacent to one or more mines, the cell shows the number of adjacent mines. A player wins when they have opened all the cells not containing a mine. The game should indicate its state (lost, in progress, number of cells opened, time spent in game). Players should be able to start a new game, or play games of at least 2 difficulties (size + number of mines). 

You can use any interactions your can think of for doing the above actions (e.g., mouse clicks, mouse drags, pass over, etc.). Although this is a basic interface there is a lot of room for improvement or extensions. We are interested in how everything fits together in your system, and how creative you are in your interactions. To get a good mark we expect you to go beyond the above recommended functionalities: they will be judged by their complexity and how they fit overall with your prototype (storyboard or code). 

evaluation criteria

Your work will be evaluated based on the following criteria: 

  1. Breadth and depth of the functionality. You are expected to implement the recommended functionality, and come up with another 2 features in the storyboard, and then the code (we can adapt these depending on your programming experience, think "big" for the storyboard). These features have to be well-thought and integrate well into the overall design, and be related to input/output (e.g., different interactions than what existed in the original minesweeper, different layouts and interactive behavior) rather than game logic.
  2. Quality of the design and implementation: clean and usable user interface, appropriate use of UI design guidelines, fluid interaction, well-thought labels and messages.
  3. Quality of the code for H/W 2: well-structured code, separation between model, look-and-feel and interaction components, meaningful names for classes, variables and packages.
  4. Documentation for H/W 2: clarity about what has been implemented, clear instructions about how to run the application (e.g., README file), code documentation.
  5. Bonus points will be given for creative extensions.

Criteria 1 and 2 have a higher weight. However, a poorly documented submission risks to get evaluated more strictly, e.g., if we do not manage to run it. If you decide to code in a platform other than JavaFX, make sure that you provide clear instructions about how to run it. Also make also sure that your TA has the necessary hardware to test it!

some text

Individual Homework 1:see ecampus for deadline. Be ready to show its the next day in class (Tuesday).

The first h/w assignment is a sketch and a storyboard. We ask you to first sketch what your interface would look like. Then we want you to storyboard 4 interaction sequences. The first two should relate to the basic functionality described before. The remaining two should present functionality beyond the basic one. You can be as creative as you want them to be. Do not limit yourself to what you can actually code, we will adpat these for your coding exercises. You can consider a different input (e.g. voice, dragging, etc.), revealing additional information on the game (e.g., stats), other gaming contexts (e.g. collaborative gameplay and interfaces), weird grids, annotations, ways to help users, etc.

You need to give enough details in your storyboard so that it is clear how the different user input leads to a resuting change in the interrface.  The storyboard can be done by sketching on paper (ideally) or with pictures of paper prototypes (please avoid wireframes). You can then take pictures of your storyboards and share it with us by email.

Examples of interaction storyboards as sketches can be found here. If you want to learn more about storyboards than what we cover in class you can have a look here (but please not the examples here do not focus on interaction and input).

what to submit

Upload your storyboard on the date indicated in ecampus and be ready to show it in class the next day.

some text

Individual Homework 2 and 3: Each homework is a seperate version of your minesweeper. Deadlines can be found on ecampus. Be ready to show them running the next day in class (Tuesday).

The second h/w assignment (in two versions) is an implementation of your minesweerper. We expect you to implement the basic functionality described before. To get a good mark  you need to go beyond this functionality and implement at least 2 extensions. We will judge your project based on the criteria mentioned above. 

In the first version of the minesweeper (Homework 2), we expect you to have built the window(s) you will need in your game, with their interface components layed out, and at least one type of interaction (it does not need to be the finalized one, e.g., clicking on a button gives you on the console some information about what is under the button). In the second version of the assignment (Homework 3), you need to hand-in the complete game, that includes all interface components and all interactions implemented.  

some advice

Define the limits of your project before starting. Developing more functionalities will not necessarily give you a better mark (or a better product). 

Focus on aspects of the tool that conform to the described requirements. Your implementation should be usable. You should prevent users from reaching unexpected states in the system and provide feedback and feedforward mechanisms to avoid user errors. 

You are encouraged to be creative, but make sure what you decide to do is inside your competence level and abilities. If some aspects seem too hard, try to simplify things. 

Try to structure well and comment your code. 

what to submit

Be ready to show your program running in class. Also create an archive (zip or tar.gz) named or firstname-lastname.tar.gz that includes: 

  1. A short document (1-2 pages, preferably a pdf) with (i) a screenshot of your program running, (ii) a brief description of your result in text (what functionalities you implemented, what simplifications you made and how the application can be used) - bullet points are ok.
  2. Your code: both the source code and an executable version (in java a .jar), or your eclipse project. Add any necessary instructions for running your project.

Upload both versions of your project on ecampus on the dates indicated. Depending on time, you may be asked to show your assignment running in class, so make sure you have it handy (and working).