CS 161 Final Project

Overview

You will be implementing a final programming project to demonstrate all of the programming and computer science skills you've mastered throughout the course. This is a chance to work on something that is of interest to you, while also reinforcing what you've learned. You should aim to make a project that you'd be proud to show off to your friends and family--an awesome "look what I made!" program that will make you the envy of everyone you know.

Schedule

You have until Wednesday, Dec 18 at 11:59pm to complete your project. (This is two days after the final exam, so you will have a chance to make some final changes without getting in the way of studying). However, there will be some deadlines along the way to help keep you on track:

Once more, in case you missed it: the project is due Wednesday, Dec 18 at 11:59pm.

Project Requirements

You are welcome to design your own project for this assignment. Pick something that you think would be fun to create, useful to use, or neat to show off!

However, no matter what you choose, your project should meet a few basic requiremnts:

  1. Your project should include a Graphical User Interface (GUI). This can either be a window with buttons and labels, or a painted graphical image. But it shuold not be just a command-line program [unless you can make a really good argument for it in your project proposal!]
  2. Along those lines, your project should include user interaction with the GUI: mouse and/or keyboard interaction, interaction with buttons, etc. Be sure and think about what makes the program easy and pleasant to use!
  3. Your project should include multiple classes. This means the project should be large enough that it has more than one component. Of course, giving the program a GUI means that you'll likely need at least two classes (one for the UI and one for the program model).
  4. ...that's about it really. :)

We have included a couple of suggestions for suitable projects below. You are encouraged to choose one of these projects, but are welcome to come up with your own idea!

Some Project Options

At this point you have the ability (the power!) to create full if simple applications. One enjoyable program that you can use to show off your computer skills is to implement a computerized version of a classic board game. These games have relatively simple rules (since people need to be able to play them!), so are quite feasible to put together. Note that these would be games played by two players at the same keyboard--creating a computer opponent would be an extra challenge! Some examples are discussed below.

Othello

Othello (also known as Reversi) is a board game that involves two players. Players take turn placing disks so that their pieces flank a line of their opponent's pieces--thereby flipping the disks to that players' color. The player with the most disks showing his or her color wins.

Your game should could allow two humans to play against one another using the same keyboard: players would take turn clicking on the GUI to place a disk. The game should disallow illegal moves, and be able to report the winner at the end of the game (note that the game should be able to automatically determine when the game is over).

Getting started: Start by creating a GUI that draws the board and responds to mouse clicks. You'll need to be able to determine which "cell" the player clicked inside. Add in the ability to switch between players, so that each person can put down a different colored disk. Next, add in the ability to automatically flip disks, so that a proper game can be played. Finally, add in the ability to detect the winner (and possibly start a new game).

Alpha Demo: A program GUI that has all required components. Players can take turns selecting cells, which draws a placed disk as appropriate.

Beta Demo: The game validates moves (makes sure the players don't cheat!) and automatically flips disks.

Checkers

Checkers is one of the all time clasic board games. Your checkers game should allow players to select a piece, and then select where that piece can move to. Being able to select and "drag" a piece would be a nice way to go, though you'll need to have the piece "snap" to the grid. You'll also want to be able to select to jump over opponent's pieces.

Note: The really ambitious could even make a Chess game, playable by two humans. Keeping track of Chess moves is much more complicated, but still doable.

Getting started: Start by creating the GUI that draws the board and responds to mouse clicks. You'll then want to add the ability to "move" a piece, either by selecting the start and end squares, or by dragging the piece. Once you have the interaction in, you can add in the game logic to make sure players don't move illegally and to support jumping over pieces.

Alpha Demo: A program GUI that has pieces that can be selected (though not necessarily dragged). Being able to determine when the user has clicked on a piece is nontrivial, but not too difficult!

Beta Demo: The game allows the user to move pieces, as well as jump over opponent pieces.

Backgammon (Challenging!)

As an alternative to grid-based board games, you could make a computer version of Backgammon. In this game, players take turn rolling dice and then selecting a number of "slots" (called points) to move their pieces along that matches the die rolls. The goal is to move all your pieces to the other end of the track and off the board--the first player off wins!

You program could let players roll dice (picking random numbers!), and then select which pieces to move between points. Note that having the ability to "undo" a move (if you didn't use up all your points and so want to change your mind) might be nice.

This game is more complicated than the others, since there are more choices for the player to make (and you need to keep track of all that information). But it's a fun game ;)

Getting started: Start by drawing out your board, but don't get bogged down. Next you'll want to set up your data structure to keep track of how many stones are on each point--this will likely be more complicated than the simple arrays, ArrayLists, and 2D arrays we've used. Make sure you can draw stones as they correspond to the data in your game logic program. Once you have that, you can start adding interaction, with players able to select points to move between. Finally, add in the rest of the game logic.

Alpha Demo: A program GUI that can display the stones on the points--you should be able to "hard code" a board position (by adjusting the contents of your data structure) in order to make the points move!

Beta Demo: The game shoulw allow the user to move pieces around, possibly based on a die roll

Other Options

There are of course many other options for projects--you are not required to make a board game! Instead, you might consider making a classic arcade game, such as Pong, Snake, or Space Invaders. Maybe you want to extend a previous homework or lab in an interesing way (making GuitarPlayer into GuitarHero or a full-featured synthesizer; or making a Graphical Evil/Cheating Hangman). Or maybe you have another idea in mind--feel free to be creative! You can pick any project that sounds interesting to you. Come up with an application that seems fun and impressive and make that.

Submitting

There are multiple compents and requirements in submitting your project: be sure to read them carefully!

Grading

This project will be graded based on roughly the following components: