|CPSC 329||Software Development||Fall 2017|
This project has several goals:
This is a group project. Teams are:
Team members are expected to contribute fully to their team.
For the team parts of the project, getting help from or discussing ideas with others not in your group is allowed with limits as detailed in the collaboration policy. Parts of the project designated as "individual" (such as the reflection) should be done solely by the person handing it in.
In all cases, coming to office hours is always OK. (And encouraged!)
Your task is to implement a simulation of the sharks and fish of Wa-Tor as described in the paper by A. K. Dewdney (available on Canvas in the Files section).
The program must provide a graphical display of the sharks and fish moving around the world and some kind of display of the numbers of sharks and fish in each iteration, and must allow the user to choose the dimensions of the world (grid size) and the values of the five simulation parameters (nfish, nsharks, fbreed, sbreed, and starve). There must also be buttons to start, stop, and reset the simulation. The paper describes the movement rules for the sharks and fish.
There is a lot of latitude in how fancy or barebones you make your program - it is sufficient to do everything via the terminal except for the graphical display of sharks and fish moving around in the world and the start/stop/reset buttons.
There are several requirements related to thinking about working in teams:
Take minutes at team meetings - record the time and length of the meeting, who is present, project status, things discussed, tasks assigned, etc. Someone should be designated as the note-taker for each meeting. (This can be the same person all the time or it can rotate.)
At the beginning of the project, the whole team should:
Identify skills relevant for this project (e.g. working with GUIs, planning and organizing the code structure, writing code) and get to know each other with respect to those skills. Assign roles (e.g. team leader) and responsibilities for various tasks accordingly. (Include these assignments and the rationale for assigning them in your meeting minutes.)
Discuss your answers to last Friday's class prep exercise about successful and problematic group experiences. Identify one or two things to focus on, and choose a few (1-3) specific practices from the teamwork and Agile readings (from 9/1) that address those points. (The practice(s) you select and why should be documented in your meeting minutes.) Incorporate those practices as you work on this project.
At the end of the project, each team member should complete the individual reflection and assessment described in the "Deliverables" section.
You are required to use a collaborative tool such as Google Drive for the meeting minutes and any other team documents to facilitate sharing amongst the group - no emailing documents around.
You are also required to incorporate appropriate usage of version control (using SVN) into your development process. (Something to think about is how often and what size chunks to commit.) Use wator as the name of the subdirectory within the repository (this should go under one team member's repository directory) and "single project layout" when you share the project. It is fine to use a single development branch (the trunk). Informative commit comments are expected.
Note: SVN will be introduced in lab over the next few weeks. You are only required to use the basic features introduced on 9/5, but you are encouraged to try out more advanced features as appropriate.
Use Swing for your GUI and Swing timers to handle the running and animation of the simulation. Professor Eck's textbook is a good place to start for a user-friendly introduction to GUI programming and the basic elements of Swing (including timers). Java's Swing tutorial is another source of information for learning how to use aspects of Swing. Once you understand the basics of a particular topic, you can often find many additional examples on the internet - but be careful to remember that you are looking for examples, not solutions! The Java API is useful if you are already familiar with the concepts of what you need to do, and you just need to figure out the details of method calls.
One handin per group.
One handin per person.
Reflect on your experience. Was the experience successful? Were there difficulties? Did the teamwork practices you focused on help? What led to problems, and what can improve the experience next time? Explain your answers. Be thoughtful in your responses; a rough estimate is approximately a page of writing (but what you say is more important than the exact length). Hand in a hard copy.
Complete the "project 1 teamwork assessment" survey on Canvas (in the "Quizzes" section). Answer the questions for each person in your group including yourself. The survey is anonymous.
Good programming style and following consistent coding conventions (recommended conventions) is expected, and will be reflected in the functionality grade.
A small portion of the functionality grade will reflect the attractiveness, sophistication, and ease-of-use of the program. Some extra credit is possible for a fancier user interface and/or appropriate additional features beyond the minimal specifications, but note that extras will not count if the requirements are not met - make sure that you identify what is essential and budget your time so that you end up with a working program that meets the specifications, however minimally.
All members of the group will receive the same grade for the functionality portion of the grade. All members of the group will receive the same grade for the portion of the teamwork component that is based on the meeting minutes, discussion of collaboration and communication, and the use of version control. The reflection and individual contributions to the team components will be graded individually. (Contributions to the team will count under the "Participation" part of the overall course grade.)