...ndid.se, the somewhat small but happy love child of
freelance designer & game developer Nicolás Delfino.
Knee deep in all that´s flash, loving iOS and getting down with jazz...
Inertia – promo site for my cd
Peter Nilsson – drummer
Scoreoid – Highscores the easy way

Today I got the chance to finally play with the awesome game platform by Almog Design (www.almogdesign.net) called Scoreoid.
What Scoreoid is:
Scoreoid is a non-restrictive, reliable and easy to use gaming platform designed to handle scoring, leaderboards and game management, including advanced functions for multi-platform games such as platform content awareness to advanced player management. Developed by game developers for game developers.
(Info from www.scoreoid.net)
Why Scoreoid:
The reason I´m thrilled about Scoreoid is simply because it lets you cut time on an otherwise potentially time exhaustive part of game development, scores.
With that said I thought I´d write a basic tutorial.
Using Scoreoid:
Getting started with Scoreoid is a breeze, all you really need to do is to sign up (www.scoreoid.com/register) and to add a game, the rest is taken cared of by Scoreoid!
To create a game simply navigate to the dashboard and click on “Add new game”. There´s some basic data you need to enter, nothing weird so I leave that up to you.
There´s actually tons of stuff you can do here, and I do recommend you to check it out, but to get to get started on this tutorial you´ll need 2 things:
An API-key
found under your Account Info.
A Game-ID
found under games and specific for the game you´re working on.
Scoreoid + Flash:
Here´s where the magic happens, no downloads – no nothing.
From here on I´ll show you just the absolute basics needed to get you started on a real world situation.
Please note that his example doesn´t necessary follow best practices and how you end up using this is up to you. Also note that I´m writing this inside a document class.
The Document class (Main.as)
package { //SCOREOID - www.scoreoid.net | www.scoreoid.com import flash.display.MovieClip; import flash.net.URLVariables; import flash.net.URLRequest; import flash.net.URLRequestMethod; import flash.net.URLLoaderDataFormat; import flash.net.URLLoader; import flash.events.Event; public class Main extends MovieClip { //setup: private var url:String = "https://www.scoreoid.com/api/getGameField"; private var request:URLRequest; private var requestVars:URLVariables; private var apiKey:String = "enter your API-key"; private var gameId:String = "enter your game-ID"; private var responseType:String = "XML"; private var ulGetScore:URLLoader = new URLLoader(); private var ulSendScore:URLLoader = new URLLoader(); public function Main() { /* Send a score to Scoreoid containing the name of the user and his or hers score */ sendScore("Player name", "player score e.g 8278"); /* Show the score on stage */ getScores(); }
The sendScore function
This simple function recieves two values passed in as strings: user and score.
We start by pointing the url variable to the appropiate API-call, in this case the one called “createScore” and continue by packing a request handler with data.
The data is contained by an URLVariable we call requestVars which stores the fundamental elements needed to talk to Scoreoid (API-key / game-ID etc…)
Before sending the request we make sure to pass in the two crucial variables needed (score and user, both strings).
private function sendScore(user:String, score:String):void { url = "https://www.scoreoid.com/api/createScore"; request = new URLRequest(url); requestVars = new URLVariables(); request.data = requestVars; requestVars.api_key = apiKey; requestVars.game_id = gameId; requestVars.response = responseType; /* send score variables: */ requestVars.score = score; requestVars.username = user; request.method = URLRequestMethod.POST; ulSendScore.dataFormat = URLLoaderDataFormat.TEXT; ulSendScore.addEventListener(Event.COMPLETE, sendScoreCompleteHandler); ulSendScore.load(request); }
Listen for a respond
By casting the data send back from Scoreoid as xml we´re able to check against a string “The score has been saved” to assure that the score we just send in fact got processed and saved by Scoreoid.
//Send score complete handler: private function sendScoreCompleteHandler(e:Event):void { //sending scores to scoreoid... var xml:XML = new XML(e.target.data); if (xml == "The score has been saved") { trace("The score has been saved.") } }
Get scores – using it all
This function looks a lot like the sendScore function and would definitly need some cleanup considering the main difference lies in the url (getScores) and the score variables.
The get score variables:
Again, there´s plenty more to check out but to receive the 4 highest scores we use “limit” to limit the result, “order_by” to order the result by score values (“name” would give you a list ordered in alphabetical order) and lastly “dsc” to get the highest score first.
private function getScores():void { url = "https://www.scoreoid.com/api/getScores"; request = new URLRequest(url); requestVars = new URLVariables(); request.data = requestVars; requestVars.api_key = apiKey; requestVars.game_id = gameId; requestVars.response = responseType; /* get score variables: */ requestVars.limit = 4; requestVars.order_by = "score"; requestVars.order = "dsc"; request.method = URLRequestMethod.POST; ulGetScore.dataFormat = URLLoaderDataFormat.TEXT; ulGetScore.addEventListener(Event.COMPLETE, getScoreCompleteHandler); ulGetScore.load(request); }
Putting it out there!
Inside our handler we cast the Scoreoid respond once again as xml and loop through each player object to put a movieclip on stage.
The movieclip we´re using lies inside the Flash IDE library exported for actionscript with the linkage name “PlayerResult”.
PlayerResult:
Contains two dynamic textfields: “name_t” for names and “score_t” for scores.
Scoreoid values:
To show something in our textfields we use “player.@username” and “player.score.@score”.
//Get score complete handler: private function getScoreCompleteHandler(e:Event):void { var scoreXML:XML = new XML(e.target.data); var playerResult:MovieClip; var pX:Number = 86; var pY:Number = 116; for each (var player:Object in scoreXML.player) { //show results on stage: playerResult = new PlayerResult(); playerResult.x = pX; playerResult.y = pY; playerResult.name_t.text = player.@username; playerResult.score_t.text = player.score.@score; addChild(playerResult); pY += playerResult.height -1; } } } }
Presto!
That´s all there is to it really, again you could propably optimize this to half the size but that´s not really the point here.
This is the end result btw:
So download the fla if you want and get your ass over to www.scoreoid.net!
Cheers!
/Nicolás
AMFPHP vid diary
A video showing me playing around with the awesome amfphp framework
Amfphp makes it really easy to create / read / update and delete records on a mysql database.
A tutorial showing the basics of the framework coming soo !