HCID Introductory Programming Project 2017

TA: (Stacy) Shu-Yuan Hsueh (class managed by Anastasia Bezerianos)

The goal of this class is for you to practice the skills acquired in your different classes and create a programming project that is more involved than previous exercises in the Programming of Interactive Systems.  

Your TA will be present each week to answer questions and give you a hand, in the form of lab hours. Occasionally she will also do exercises with you, abd present material that we will not cover in the class, and that will help you in your project.

The topic of the project is fairly broad and open to allow you to be creative in the direction you want to.

news and announcements

11/10: By next TA class (18/10) be prepared to discuss with your TA what you chose to implement, your sketches and UML diagram


11/10: Project presentation slides

project requirements

You must work in pairs (if we have odd number of students we can have a single group of 3).

A topic is proposed, but if you would like to do another one talk with your TA or Anastasia to see if your level of programming and the complexity of the project are appropriate.

We suggest to implement the user interface in Java. If you want to use another language you should ask the instructors first, and it is not certain we will be able to help with coding problems. 

An interactive maze

Your goal in this project is to create an interactive maze where user-controlled and automated characters move around. Why they do so is up to you: is it to reach the end the fastest, is it to cover it all, is it to win as many points as possible within a time-limit? 

You need to decide how the user interacts with their character: do they move him step by step, draw a path to follow, etc.? 

What exists inside the maze is also up to you: is it open and locked access points, traps that delay the characters, treasures that give them extra powers?

The interaction of the characters is also open: if one character is in a room in the maze does she block it for others, when two characters meet do they fight or do they exchange information about the maze, etc.? Do they take turns moving or are they all moving at the same time?

Two simple examples of such mazes (with images) are seen in the project presentation slides: and briefly presented here:

A boat race: the weather in different areas of the sea maze changes unexpectedly. It pushes the boats that have an initial speed and direction into different directions, causing them damage that delays them. Depending on their size and weight the boats are affected differently by the weather conditions. The user does swipe gestures to adjust and correct the direction of movement of her boat when weather conditions shift it off course. The user and NPC boats try to reach the island safely.

A warrior’s challenge: in a turn taking maze characters of different races and different equipment (armour, arms) move in a “fog of war” (i.e. cannot see the maze areas they have not yet visited). The user clicks towards the area of the maze they want their character to move. When characters meet others of their race they share information about what they know of the maze and its traps, while if they meet characters of other races they fight, and gain or loose arms and treasures. Their goal is to find as many treasures in the maze as possible. 

proposed functionality

Your maze application should have at least the following aspects:

  1. Main visual components:
  2. A way for the user to interact/control their character (e.g. move them, adjust their direction). Consider advanced interactions (such as drawing paths, swiping, crossing) not just clicking.
  3. Clear feedback to the user about what is the state of their character (moving, fighting, hurt, etc), as well as the state of the (visible) part of the maze.

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). This project can be very simple to very complex. Discuss with your partner your programming experience before deciding on what you want to do exactly. If you have doubts about the difficulty of your choice, ask your TA for her opinion. 

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 to hard, try to simplify things. 

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. 

Remember, this is an HCI course, we are interested in  the interface and UI aspect of this game. We do not expect impressive gaming mechanisms or non-player characters with AI :). NPCs can have very simple behaviours (e.g. random movement or always go left).

Try to structure well and comment your 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 proposed functionality. To get a good grade you also have to come up with extensions and creative ideas (well, you have to as the proposed functionality is not really a maze game yet). These features you add have to be well-thought and integrate well into the overall design of your maze.
  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: well-structured code, separation between model, look-and-feel and interaction components, meaningful names for classes, variables and packages.
  4. Documentation: 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 depending on how creative/challenging they are.

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 or use it. If you decide to code in a platform other than Java Swing/Java 2D, 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!

what to submit

One week before the last day of class (Wed, Nov 8) you should be prepared to show the TA your progress (this is an official landmark that will give you a mark, so be there!).

Create an archive (zip or tar.gz) named firstname-lastname.zip or firstname-lastname.tar.gz that includes: 

  1. A short document (2-3 pages, preferably a pdf) with a brief description of your result: what functionalities you implemented, what simplifications you made (bullet points are ok) and how the application can be used.
  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.
  3. Your code documentation can be automatically generated (in Java using Javadoc) or just included in the source code.

Email your compressed archive to Anastasia and Stacy by Tue, November 14 (23:00pm)the latest. Use the subject [ProjIS] in your email. You will be asked to give a brief 10 min presentation of your project in exam week (Wed, Nov 15, 13:30). Do not prepare slides, just show the application running.