Challenge Overview
Project Overview
The project is to build a simple, yet fun and addicting game where the goal is to throw "files" across a screen full of obstacles to the safety of the cloud. Players will score points and compete for high scores based on the size of the files that reach the target (i.e. the cloud) safely, which communicates the underlying message that storing data on the cloud is safe.
This challenge will add Game Center Leaderboards for players with highest scores and display the leaderboards in the "highest score screen", it will refine the last assembly and add shields not implemented yet.
Technology Overview
- target platform: iOS8+, Swift, SpriteKit, GameKit Game Center, Xcode 6.1
- Priority is for iPhone 5/5s/5c -- 640x1136 pixel resolution at 326 dpi, auto fit screen for iphone 6(including plus);
- iPad support is required (auto fit screen)
- Only Portrait orientation
- Allows anonymous play, in addition to Apple Game Center
Competition Task Overview
You will need to familiarize yourself with the game and the specification first.
1. Game Center Leaderboards
for technical infomation, refer to Leaderboards of GameKit
We only have one leaderboard(total score)
1) report total score to Game Center Leaderboards
report when level completed/failed
if network is not available, display a hit message (e.g. "network not avaible") for several seconds and disappear then.
"total score" in game center should be the sum of all scores achieved by the user ever played.
2) display the leaderboards in the "highest score screen"
play a waiting animation while retrieving leadboards, remove it when data is received, if network is not available, display a hit message (e.g. "network not avaible") for several seconds and disappear then.
show top 10 of the selected filter
there are two kinds of filters: playscore, timescope
player scope:
GKLeaderboardPlayerScopeGlobal
GKLeaderboardPlayerScopeFriendsOnly
time scope:
GKLeaderboardTimeScopeToday
GKLeaderboardTimeScopeWeek
GKLeaderboardTimeScopeAllTime
2. More Shields
1) All the shields that are not implemented yet are in scope:
Folder, Sync, Copy, Connection booster, File Recovery, MoreTime, DataProtection, HiddenFile
2) shield holder refinement:
1> Immediately after the launcher is grabbed the sheild holder could expand and show quickly ( say 1 or 2 seconds and then retract again). Then when user wants to use a shield they will first need to click on the holder to expand and check which ones they have , and holder automatically retracts or collapses when a shield is used or user clicks on the holder shield holder button again
2> Reducing the shields pop up time from 5 seconds to just 3
3. Update marketing/commercial messages(displayed in loading screen)
when the app starts up, it will send an http request(with local version number) to get latest version and all messages from remote server(if the version is already the latest, the remote server will simply response with no messages) and store in Messages.plist, if failed(e.g. network error), still use the old messages.plist(update the default messages.plist with the 1st and 2nd messages in cloud facts.txt)
In loading screen, one of the N messages will be chosen randomly to display.
The remote server could be a NodeJS server provides version check and message feedback services.
4. Game scene refinement
use the score text at the top of the game screen as a sort of progress bar (for instance with green color so when you achieve the goal for a given level, the entire word "score" is turned "green")
5. Obstacle refinement
1) Enhance the obstacle "Dark clouds & lightning", bolts coming from the dark clouds should be random directions (right now they all seem to come left oriented)
2) Support more fields for obstacle in level configure:
f1 - id: required, int, id for reference.
f2 - notLoadOnStart: optional, bool, if true, the obstacle won't appear after level is loaded.
f3 - tdelay: optional, int, time to delay, if exists, the obstacle won't appear after level is loaded, instead, it will appear after "tdelay" seconds if the level is still active.
f4 - ttl: optional, int, time to live, if exists, the obstacle will be destroyed after "ttl" seconds (and ttlToBe is missing).
f5 - ttlToBe: optional, array of int, id of obstacle to appear after ttl seconds, if exists, when the obstacle is destroyed after "ttl" seconds, a new obstacle(randomly choose from ttlToBe) is created at the same position, make sure the transition is smooth
the client need to try one level maybe on the higher ones that is truly random and has obstacles showing and vanishing so they change during the same level, configure the level to make all the obstacles have a chance to appear.
6. Bug fix
when exiting game while on pause and going back in again , pause screen is displayed but timer is not stopping (obstacles animations are also resumed). Steps to reproduce:
1) While playing any level click on pause, Pause screen and vertical menu bar pops up all action and timer is frozen as expected.
2) Click on the iphone home button (exit game go back to phone home pages)
3) Then click on the PayIBM icon to go back in the game
4) Pause screen is displayed (as expected) however you will notice the timer and onstacle action in the screen is no longer paused. (should be frozen until user exits pause mode)
1) While playing any level click on pause, Pause screen and vertical menu bar pops up all action and timer is frozen as expected.
2) Click on the iphone home button (exit game go back to phone home pages)
3) Then click on the PayIBM icon to go back in the game
4) Pause screen is displayed (as expected) however you will notice the timer and onstacle action in the screen is no longer paused. (should be frozen until user exits pause mode)
7. Level Selection screen
Add an entry in global configure: dev
if it is true, then in level selection screen
1) if touch on a unlocked level cloud for more than e.g. 5 seconds, all the open levels are locked except the first level.
2) if touch on a locked level cloud for more than e.g. 5 seconds, all the locked levels(level <= the touched level) are unlocked(with zero star)
8 Level Configures
Add an entry in global configure: levelset
It is a dir name where to load level configuration files.
e.g. we may have following sets:
dev: add level configure for each newly added obstacle of this challenge here (include the level described in 5.2: Support more fields for obstacle in level configure) , increase goal specially on higher levels.
product: product levels coming later.
General notice
1. Memory leaks check: There should be no memory leaks for this app. Please use Instrument to check memory leaks, espcialy reset game repeatly
2. We use texture packer ( https://www.codeandweb.com/texturepacker ) to packer sprite images (except backgrand images), please check atlas_projects of last assembly submssion.