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
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.
- It should have a (nice) graphical user interface
- It should have a reasonable level of difficulty (not too easy,
not too hard)
- It should be fun!
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
HTML games". Of course, your applet should be much simpler than
most of these games.
Here are some specific additional ideas for projects:
- 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.
- Implement the game
(aka "Quinto") for boards of
variable sizes (3x3, 4x4, 5x5, ...) For a description see a (very) old
- 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
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
Schedule and deadlines
- 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.
- 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:
- The names of the team members (please also indicate in which section you can present, especially cross-section teams)
- A title for your project
- A brief description of the project (1-2 paragraphs)
- A sketch of the user interface / layout (e.g., done in MS Word,
PowerPoint, or another drawing program.)
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
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.
- 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.
- 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:
- 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).
- From the command line under linux, navigate to the folder that
contains your "fp" folder, and type "zip -r fp.zip fp".
- Under windows, right-click on your "fp" folder, and select "Send
to -> Compressed (zipped) folder."
- On a Mac, right-click on your "fp" folder and select 'Compress
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.