Kickshot

KickShot is an app based on the board game of the same name by Aziz Makhani. The game is split into three levels of play, aptly named Level 1, Level 2, and Level 3. Each successive level introduces additional complexity to the game. Level 1 was completed during the Fall 2014 semester. This semester's team has been tasked with implementing Level 2.

Background
KickShot is a soccer board game conceptualized by Aziz Makhani, a local soccer referee. KickShot includes three levels of play and the iteration being implemented this semester is Level 2. Level 2 builds off Level 1 by adding cards, new rules, several ways to score a goal, and two halves of play. Eventually, Level 3 will add even more cards, along with additional rules and a difficult AI opponent.

Deliverables
This semester's team aims to deliver a finished Level 2 version of KickShot that includes:
 * 7 playable cards
 * New Rules that provide more options for offense and defense
 * Several ways to score
 * Shooting left or right, which can be blocked with the correct card
 * Passing into a goal
 * Direct free kicking into a goal
 * 2 halves of play that end when the players run out of cards to play

Specifications
There are several important requirements for KickShot. The most obvious requirements are that it be bug free and fun to play. Ideally, KiskShot should also be intuitive, requiring little explanation of mechanics. Lastly, KickShot must be cross platform. KickShot is currently being implemented in the Panda.js game engine so it can be cross platform. It can be played in a web browser, as well as on smartphones, tablets, or computers.

Challenges
This semester's team chose to roll back last semester's changes in favor of writing clearer, more easily extensible code. Other considerations of implementing the board game include:
 * Adding cards to the game
 * Data structure
 * Manage multiple decks of cards and hands
 * Graphics and animations
 * Drawing cards
 * Playing cards
 * Viewing cards in hand
 * New set of rules
 * Redesign turns
 * Able to pick a card and play it
 * Cards have unique rules
 * Roll-offs between players
 * Goal scoring attempts
 * Goal blocking attempts
 * Intercept attempts
 * Pass attempts
 * Rule enforcement
 * Cards can only be used a appropriate times
 * The player can only have so many cards at a time
 * Artificial Intelligence
 * Needs to calculate possible moves
 * Better AI will compare moves and choose the best one.

Project Learning
Over the course of the semester, our team has learned more about the Panda.js engine we are using for development, javascript, control flow, and version control.

Design
A big change we made was the card menu. We decided to implement a minimalist design.



Mousing over the cards at the bottom of the screen makes them enlarge. Clicking on a card plays the card.

Part of our design had to do with how often the player needs to click the screen. We originally implemented the game to require a click to begin each phase of the turn. We found this too tedious, so we changed the the game to only require clicks when rolling dice, selecting cards, and pushing buttons. This way, we could default to disabling input so extra clicks do not interfere with turn flow.

Difficulty
During EXPO, many of the children playing the game found the AI to difficult. In response to this, we rigged the AI to roll poorly more often, thus making the game easier.

Documents Archive
Current work can be viewed on Github here: https://github.com/RedCardDev/KickShotLevelTwo

Here is a schedule for development:

Our poster from EXPO: