KickShot for Android

KickShot for Mobile is a project to develop mobile app versions of the board game, KickShot. The goal of this project to further polish the completed Junior version and complete a coherent and playable prototype of the Warm-Up version. The end result will be that KickShot Junior is ready to be released for both Android and iOS, and KickShot WarmUp is functional on both Android and iOS.
== Sponsor ==
Aziz Makhani:
: local youth/adult soccer referee and creator of KickShot.
== Problem Definition ==
=== Background ===
KickShot the board game was invented by Aziz Makhani to help educate children of all ages about the rules of soccer. After achieving success in the board game industry, Aziz set his sights on the mobile platform. During the summer of 2013, Aziz created a new version of KickShot that lowered the age barrier to play his game. This version was KickShot Junior. Fall 2013, Aziz requested that a team of computer science students develop KickShot Junior on the Android platform. The team was successful in creating a foundation for the game.
For spring 2014, Team RedCardDev was tasked with finishing development on KickShot Junior and creating a foundation for KickShot WarmUp. KickShot Junior required user experience development. This included game sounds, animations, and a homepage. KickShot WarmUp required a design to account for the ability to play cards to perform actions, instead of just relying on dice rolls.
In Fall 2014, Team RedCardDev was asked to polish the finished version of KickShot Junior, such as fixing a few bugs and improving cross-device compatibility. In addition, an iOS version was to be developed to complement the Android version. A playable prototype of KickShot Warm-Up for both platforms was begun, demonstrating an implementation of the design achieved in Spring 2014.
=== Problem Statement ===
To create and deliver a executable applications for iOS and Android that successfully epitomizes the gameplay of KickShot Junior and Warm-Up.
=== Rules of the Game ===
==== KickShot Junior ====
Turns
* Ball Starts at the midfield circle after every score or the start of each half.
* Offense rolls dice to advance the ball. Ball advances equal to the highest die value.
* If a double are rolled, the offense turns the ball over.
* Defense rolls dice. If doubles, defense intercepts the ball.
* If offense advances to the goal line, they enter shooting mode and take a shot immediately.
* Defense rolls dice. If doubles, defense blocks the shot and receives the ball on the line equal to the total dice roll.
Doubles
* If doubles are rolled, the ball is turned over.
Scoring Goals
* When the offense makes it to the goal line, a shot is automatically taken.
* The defense can block a shot by rolling doubles.
==== KickShot Warm-Up ====
* Cards will be added for game play. 
* There are 6 type of cards on either Home or Away side, and only one type of the Referee card will be added in WarmUp.
* No card need to be used for kick off.
* Without using a card will skip the current turn.
* Draw a new card after using a card.
* Only one chance each turn to trade a card if no card is usable.
* Traded card can be used immediately, if it is usable.
* Different card has different rules
Pass
* 17 total pass cards on either Home/Away side.
* Only used in Offence Phase. 
* Roll 2 dices, advance ball based on the high die. 
* Ball will turn over if roll 1 on either dice.
* Goal if ball advance to the end of opponent's zone without rolling 1 on either dice.
GoalShot
* 5 Left Goal Shot and 5 Right Goal Shot on either Home/Away Side.
* Only used in Offence Phase. 
* Roll 2 dices, advance ball based on the sum of two dies.
* Ball will turn over if ball doesn't reach the end of opponent's zone.
* Opponent must use the same direction Goal Block to block the ball, otherwise goal!
* Draw one Referee Card if use Goal Shot and reach the end of opponent's zone.
Intercept
* 5 Intercept cards on either Home/Away Side.
* Only used in Defence Phase.
* Roll 2 dices, succeed to intercept（turn the ball over) if no dice roll of 1 on either die.
GoalBlock
* 5 Left Goal Block and 5 Right Goal Block on either Home/Away Side.
* Only used in Defence Phase.
* Block the ball immediately if opponent use Goal Shot and reach the end of zone.
* Must use the same direction Goal Block to block the ball, otherwise goal!
* After block, roll two dices, advance the ball out based on the sum of two dies. Ball will turn over if rolling 1 on either dice.
 
Direct Free Kick
* 5 Direct Free Kick cards, which are the only Referee Cards for WarmUp.
* Can be used either in Offence or Defence Phase.
* The same effect as Pass if use in Offence Phase.
* The same effect as Intercept if use in Defence Phase.
=== Target Specifications ===
Android and iOS systems on mobile devices. This includes tablets and phones.
Game ratio is 3:2 on all screens (960x640 resolution)
== Design: ==
=== User Interface ===
The user interface for KickShot Mobile was designed to be based on the touch technology of Android. To roll the dice in KickShot Junior, the user has to touch the screen. When an action took place (Interception, Shot, Block, Goal), an animation pops up to inform the user.
The menus were designed by a group of VTD students working on animations and art for Aziz.
Main Menu
Play Game
Correct Form
We designed our own interface for picking card in warmup version.
Warmup Card Pick View
=== Warm Up Class Diagram ===
=== Versions ===
==== Junior ====
KickShot Junior was developed in Fall 2013 by Jordan Leithart and Nicholas Otter. Junior was developed iteratively by creating the basic rule set in the Junior class. In the Spring 2014 semester, Jordan continued to develop the application to get it ready for release. Aziz requested that a menu page and animations be developed. At SnapShot day, team Red Card Dev was happy to showcase a beta build for feedback and testing.
After a successful release at the end of Spring 2014, Aziz and the team realized that the app could still use some polish, mostly on graphical updates. The primary bulk of work on Junior was related to these small improvements during the Fall 2014 term.
==== WarmUp ====
In the Spring of 2014, as the Junior app was being finalized, a design for a more complex version of the game originated, also on the Warm Up rules for the KickShot board game. The goal for progress on Warm Up was to finalize the design and complete a working prototype by the end of the semester.
This has since been accomplished: a detailed rule set document has been created and a playable text-based subset of Warm Up (which implements only the basic game play elements) will be demonstrated at the Engineering Expo.
In the fall of 2014, Tao Zhang and Cameron Simon began development on the playable app version of KickShot WarmUp, starting with the main menu and the game rules. Updates to the board game itself, which had occurred over the summer, were taken into account and included in the updated design.
== Technologies == 
In the first semester, KickShot was developed for Android only using the Java programming language and the Android Development Kit. The IDE used by all team members was Android Studio. The benefits of Android Studio were numerous, including automatic code completion, in-editor documentation access, and various other helpful code hints. However, Android Studio could only develop for Android devices, and this was seen for the second semester as a deal-breaking limitation. In addition, the project was kept organised through numerous configuration files that were not safe for version control systems, as they would break project compilation with strange bugs when copied to other team member's development computers.
For the second semester, the team switch development strategies and began using JavaScript and HTML5 as the development platform. This enabled the game to be developed in a cross platform fasion, and allowed the developers to test the game on their web browser directly rather than compiling it to a device each time or running on a slow emulator. The team originally started out using the Phaser game engine, but after initial tests showed it to be buggy on mobile devices and overly engineered to boot, the decision was made to switch to PandaJS, which is a much smaller and thus simpler framework.
In order to generate high-performance native apps which can be installed from app stores for mobile devices, the team relied on the CocoonJS service. CocoonJS allows developers to upload a zipped archive of their web game and covert it to a native app. This means one code base can be developed that works across multiple devices, shortening the development time of a cross platform mobile game dramatically.
== Team: Red Card Dev == 
Current Members
Robert Kleffner -- Spring 2014 - Fall 2014:
:Robert is a Senior majoring in Computer Science and Mathematics, interested in game design and programming, programming language design and implementation, and the theory of computer science.
Tao Zhang -- Spring 2014 - Fall 2014:
:Tao is a Senior majoring in Computer Science, interested in computer game programming.
Cameron Simon -- Fall 2014:
: Cameron is a Senior majoring in Computer Science.
Past Members
Jordan Leithart -- Fall 2013 - Spring 2014:
:Jordan was a senior majoring in Computer Science, with fields of interest in computer game programming, artificial intelligence, computer graphics, and tools engineering.
== Documentation ==
SRS (Software Requirements Specification)
SDD (Software Design Document)
Category:Capstone Design