Overview

Vision Statement

We will provide a stream-lined and simple-to-use application for managing and playing games of Assassins. Players can easily start and join games, as well as track their statistics and manage a friends list. Game creators will be able to deal with disputes during the games and roll back to previous game states as necessary. Players report their kills and are informed of the changes to the game state (deaths, new targets).

Assassins is a game in which players are assigned specific targets and, through some pre-defined method, must "kill" their targets (thus removing them from the game). The last player standing wins.

Features List

Key Features

Rules

Optional Rules

Extended Features

GUI Sketches

Architecture

We will be creating a deployable server package that can easily be run on any computer. We will be deploying our instance to a virtual machine hosted by the JHU ACM.

Each server is standalone. Clients can connect to the server through a web interface (or through a mobile Android client, if we have time to implement that) and access all user and game data. The server handles all of our use-cases involving player interaction.

A slightly more detailed view of our architecture:

We will use servlets to communicate between the Web application and the Tomcat server and the Tomcat server will use JSP to create the web interface that our users will connect to in order to play the game.

We will be using Spring to manage the interactions between the model and the view controller in our project.

We will be using Hibernate to interface with a PostgreSQL database to store player and game data.

We have our code divided into two parts, one for front end work and one for backend. The front end package consists entirely of code for creating the GUI (the View and Controller) while the backend package contains all the code for modelling the actual game. (The latter is what we have described in our class diagram).

Additionally, there may be additional client packages that can access this server from Android devices in which case we will be using a JSON interface. The primary way to interact with the server will be via a web interface. (The most likely additional client to be implemented will be an Android interface, as noted).

Use-Cases

Deploying a Server

Primary Actor: Server Operator
Secondary Actors: Server
Goal: Create a server
Pre-Condition: Someone wants to host a server
Post-Condition: Server is running now
Main Path:

  1. Server Operator creates a configuration file (or uses the default).
  2. Server Operator sets up their system to allow necessary connections.
  3. Server Operator launches the server.

Creating a Game

Primary Actor: Game Creator (a user)
Secondary Actors: Server, Players
Pre-Condition: Game creator has an account on the desired server, Server exists
Post-Condition: A new game has been added to the Server
Main Path:

  1. Game Creator logs into the Server of their choice via its web interface
  2. Game Creator creates a new game via the interface
  3. Game Creator invites Players on the Server
  4. The Server informs all Players of their invitations

Joining a Game

Primary Actor: Player
Secondary Actors: Server
Pre-Condition: Player has been invited to a game
Post-Condition: Player is now part of the game they were invited to
Main Path:

  1. Player logs into the Server via the web interface
  2. Player sees their invitations
  3. Player accepts an invitation
  4. Server adds the Player to that game and notifies the Game Creator

Reporting a Kill

Primary Actor: Player
Secondary Actors: Server, second Player (Victim), Administrators
Pre-Condition: The Victim is killed by the Player
Main Path:

  1. The Player logs into the web interface and reports their kill
  2. The Victim logs into the web interface and confirms their death
  3. The Server updates the target graphs and informs the Player of their new target
  4. The Server updates the data for all involved Players

Extensions:

Creating an Account

Primary Actor: Player
Secondary Actors: Server, Server Operator
Main Path:

  1. A person opens the web interface for the server they want to play on
  2. This person enters the create an account dialog
  3. This person enters their information and account preferences
  4. The Server creates a new account an maintains it

Extensions:

Invalidating a Kill

Primary Actor: Administrator
Secondary Actor: Server, Killer, Victim
Main Path:

  1. The Administrator receives a notices that a kill was disputed by the Victim
  2. The Administrator, possibly outside the game, contacts the Killer and Victim
  3. The Administrator weighs evidence and decides whether the kill is valid
  4. The Administrator invalidates the kill in the game's interface
  5. The Server does not change the game state and clears the notices regarding the dispute

Validating a Kill

Primary Actor: Administrator
Secondary Actor: Killer, Victim
Main Path:

  1. The Administrator receives a notices that a kill was disputed by the Victim
  2. The Administrator, possibly outside the game, contacts the Killer and Victim
  3. The Administrator weighs evidence and decides whether the kill is valid
  4. The Administrator validates the kill in the game's interface
  5. The Server updates the game state in the same way it would as if the kill had never been disputed

Kicking a Player

Primary Actor: Administrator
Secondary Actor: Server, Player
Main Path:

  1. The Administrator goes to the interface for the game they are running
  2. The Administrator clicks the "Kick Player" button corresponding to the player that is to be kicked
  3. The Server removes the Player from the game and alerts them of this fact
  4. The Server updates the game as if the Player had been killed

Class Design Proposal

Here are the Javadocs for our classes.

Class Diagram

Class Design Diagram

Resources