Title: Networked Game Project
Course: CPS 261: Advanced Java Concepts ~ DL & MM MASTER

Networked Game Project

Create a project of your own choosing. I want your project to use MVC and gameNet to create a networked program(game?).
- create something that you would find useful (I have had students who used their projects in job interviews).
- chance to be creative and innovative and learn new things
- work on coming up with an intuitive user interface

It will be scored with the following weighting:

- 100 points - Does it work
- 30 points - Intuitive user interface
- 30 points - Creativity and Innovation
- 30 points - Level of difficulty
- 30 points - WAS IT TURNED IN ON TIME
- 20 points - For returning evaluations

This assignment will be graded more like a Class Presentation.

It is very important to turn this project in by the due date. Your JING links will be distributed to the rest of the class and this will effectively be your presentation to the rest of the class. I will solicit class inputs on all projects to come up with a grade for this assignment. So being on time with your work and participating in the evaluations is important for this to work.

Requirements:

Your program must be networked and use "gameNet". I would like to see you use concepts taught in the course wherever possible.

Your program can be a game of your own choosing. I would recommend not taking on more than you can handle. Sample games to consider ( not all equally difficult to implement)

- Master-mind
- Picture matching game. A rectangular grid containing squares with hidden pictures. Each picture shows up twice and each player attempts to find the matches.
- Black Jack card game
- Polker game
- Yatzee
- 2 Person Pong game (Actually you might even consider N person Pong where you can have a up to 4 players on each side of a rectangle).
- Add brains and enhancements to the no brains Chess game example
- Enhance the Pong game. You could even re-invent the concept a bit. I had one student who once created a 4 person Pong game.
- I have had a number of students who got creative with the Rock/Paper/Scissors game idea.
- You could create a game where players lob bombs at each other. Each player picks the angle, and the bomb velocity. Then it is just a matter of phyiscs to figure out the trajectory of the bomb.
- I once had a student who took the drawing program idea and made a game where one player was drawing pictures and the other player had to guess what he was drawing. I think there is a game you can buy that does something like this.
- Checkers game
- tetris
- Guessing letters until a phrase has been guessed. (Wheel of fortune?)
- Connect the dots game
- Battle ship game
- Simple space war where 2 players navigate a ship and shoot at each other
- Any other original idea. KIS (Keep It Simple) at least to start with. Time slips away a lot faster than we realize.

Hints, Suggestions, and Typical Pitfalls

In this project we are trying to simulate a task you might have in industry. Your boss gives you a specification like MVC and some software(like gameNet). Your job is to create some software which works with these specifications and the defined interface.

- In the Networked Games Zip file, you will find a package called "gamenet". You will need this for your project. This is the package demo'ed in the MVC gamenet videos. There is also another package called "gamenet_cloneable". In general you don't want to use gamenet_cloneable. It is very similar to gamenet, but there are more requirements for using this package. However, if your game has so much information flying around that gamenet sometimes crashes on you (See the Networked Drawing game where this crash is demo'ed), then you might consider gamenet_cloneable. Discuss the additional ramifications with your teacher if you do need this.
- Make sure you understand the MVC (Model View Controller) approach. The following videos go over MVC and how it works with gameNet. Make sure you understand these concepts
  - MVC, gameNet High Level
  - gameNet interfaces
- I have lots of examples of programs (some of them are purposely left incomplete for simplicity). You don't have to watch all of the examples, but pick examples that seem to have something in common with what you want to do for your project. You can get a high level idea of each example from the high level objectives for the associated video.
- Having trouble coming up with any ideas. See my starting list of ideas above. Some of my sample programs are incomplete programs that you could merely enhance. The chess game is the most obvious candidate. Keep in mind that you don't have to create a complete chess game. You could just choose to implement as many chess rules as you have time for. The Pong game is also pretty minimal.
- One common mistake made by some students is to go off and write code for your desired game without worrying about MVC and gameNet. The hope is that once that code is done we just need to make a few changes and cram it into the desired interface. This is a BAD IDEA. Start out from the beginning using the MVC/gameNet approach.
- Don't bite off more than you can complete during the semester. It is good to start out with a strip down version of your program that works with MVC and gameNet. Then as you have time incrementally enhance your work to provide more functionality. It is a good idea to maintain a copy of your last working version as you are adding additional incremental functionality. A lot of students will start with one of the sample programs that I provide and morph it into the program that they really want.
- Keep as much of the game knowledge in the Model as possible and keep the View and controller parts (i.e the user interface part) as "dumb" as possible. The Model (your MyGame class) should drive the show.
- Avoid using static variables. The only static variables that can exist in your code would be constants. Remember that all of the communication between the various parts of the Networked Game happens because objects are being written and read through sockets. If you happen to have static variables, they can't be passed in your MyGameInput, MyGameOutput, or MyGame classes because these are the objects that get sent through the sockets.
- You can put almost any data structure into your MyGame, MyGameInput, or MyGameOutput. However, there are some classes/objects that won't work. Anything tied to a specific computer is likely to have problems. For example, a Scanner class tied to your keyboard, a JButton tied to your computer are likely to fail on you. The Strings coming from the keyboard or the information gathered from the JButton click are good candidates of things which can be passed around on the network.
- Keep in mind that sending very large data structures around on the network is time consuming and costly. So for example, if you have images, be careful what you do with them. I would keep the images local on the each Client. The MyGame class might be responsible for telling each client which image to use. The same philosophy would be true of any large data objects(i.e. MP3, MP4 files, etc. ).

Last Updated: December 20, 2014 8:51 PM