CS 201 - Final Project

Description due: Wednesday 11/29, at 8am

In-class presentations: Monday 12/4 and Wednesday 12/6

Final project due: Friday 12/8, at midnight

In this last homework assignment, you are to implement a game or a puzzle of your choice as a Java applet. It is completely up to you what you choose to implement - if you want, you could also implement an animation or demonstration of an algorithm. Ideally you will utilize some of the data structures we have covered in this course, but this is not a requirement. If you can't come up with something, check out the examples below. You must work on this assignment in groups of two.

Your implementation project should satisfy the following constraints:

Your assignment will be graded on design, functionality, level of difficulty, organization and documentation. The score will count twice as high as your regular homework scores. You may take at most one 24-h extension (if both team members have one left) on the final deadline only. All other deadlines must be met without extensions.

Project ideas

Be creative in brainstorming for games or applications you could implement. Projects in previous years have included Memory, Flood it, Hangman, Connect Four, Simon, Khet, Candy Crush, Battleship, Eight's Off, Traffic Jam, Minesweeper, Tic-Tac-Toe, Checkers, Mancala, Pipe Whizard, Tetris, Sudoku, and Boggle. The apps on your smartphones might also provide inspiration - some of my favorites are 2048 and Flow Free. For more ideas, check out some of the games at lalena.com or search the web for "free HTML games". Of course, your applet should be much simpler than most of these games.

Here are some specific additional ideas for projects:

  1. Write a program to play NIM against the computer. Nim is played on a board with three rows of stones (say 3, 5, and 7 stones). Players alternate taking away stones, and whoever takes the last stone(s) wins. When making a move, a player can take any number of stones, but just from one row. There is an interesting optimal strategy based on binary numbers.

  2. Implement the game Lights Out (aka "Quinto") for boards of variable sizes (3x3, 4x4, 5x5, ...) For a description see a (very) old assignment.

  3. Implement Conway's Game of Life (often found as a screen saver). Check out this site for a great applet and links to related sites, and/or install Golly.

All of the above examples have a "reasonable level of difficulty". The danger is that you attempt something too difficult; before starting, think about whether you have a good idea of how you could implement your program using the tools we have covered in this course so far. To a large extent, of course, the difficulty depends on the complexity of the user interface and the functionality that you choose to provide.

Schedule and deadlines

  1. At the end of class on Monday 11/27, everyone should have found a partner. If you need help finding a partner, please fill out this survey, and I'll try to pair you up.

  2. By 8am this Wednesday 11/29, submit a 1-2 page project proposal via this link. The proposal should be submitted in pdf format and should contain:

    Only one description needs to be submitted per team. Note that the description will be graded and its grade will contribute to your overall score for this homework!

    To get started with the actual coding, follow the instructions for creating a new Eclipse project at the bottom of the Eclipse handout.

    In lab on Wednesday and Thursday you can get started on your project. I will talk to each group and give feedback on the feasibility of your proposals.

  3. By the beginning of next week, you should have a prototype of your applet ready to demonstrate to your classmates. Each team will get 3-4 minutes to show their applet. Due to the large number of students in this class, we'll have to split the demonstrations over two classes: half of the groups in each section on Monday 12/4, and the other half on Wednesday 12/6. For added incentive to get your program ready early, I'll award a few points of extra credit to all groups presenting on Monday.

  4. In lab on Wed and Thu next week, we can help you put the finishing touches on your applet and also assist you with the following task:

    Each group should post their applet on one of the group member's web page. To do this, create a folder cs201 within your public_html folder on the CS lab machines, and within that a folder fp (for "final project"). Then, copy your java class files and an html file into your cs201/fp/ folder as described below.

    Instructions on how to get your applet on your webpage:

  5. By midnight on the last day of classes (12/8) submit the code for your project electronically. Also, make sure the latest version of your applet is running on your webpage.

    To submit your code, create a .zip archive containing your code and all your images and sound files. Assuming your final project folder is called "fp", here's how:

    In all cases, this should result in in a file "fp.zip". (It's ok if your folder and resulting zip file have a different name.) Then, submit the zip file using the HW 9 submission page by midnight on Friday 12/8 (only one submission per team, please).

    In addition, each student should provide information about the total time taken, help and collaboration, and the distribution of effort among team members via this Final Project info questionnaire.

Have fun!