| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275 |
- function CGame(oData){
-
- var _bUpdatesSuspended = true;
- var _iCardsNum = 4;
- var _iCurrentLevel = 0;
- var _iFlippedCards = 0;
- var _iTimeLeft; // in ms
- var _iTimeElapsBetweenMatching;
- var _iScore = 0;
- var _iCurMatchMult;
- var _iLevelScore = 0;
- var _iLevelTimeBonus = 0;
-
- var _aCards = [];
- var _oBgContainer;
- var _oInterface;
- var _oNextLevelUI;
- var _oGameOverUI;
- var _oVictoryUI;
- var _oAttachCard;
-
- this._init = function(){
- // load spritesheet
- var oSpriteSheetPNG = s_oSpriteLibrary.getSprite('card_spritesheet');
- var oSpriteSheetData = {
- images: [oSpriteSheetPNG],
- frames: {width: CARD_WIDTH, height: CARD_HEIGHT, regX: CARD_WIDTH/2, regY: CARD_HEIGHT/2},
- animations: { card0: [0],
- card1: [1],
- card2: [2],
- card3: [3],
- card4: [4],
- card5: [5],
- card6: [6],
- card7: [7],
- card8: [9],
- card9: [10],
- card10: [11],
- card11: [12],
- card12: [13],
- card13: [14],
- card14: [15],
- card15: [16],
- back: [17]}
- }
- this.spriteSheet = new createjs.SpriteSheet(oSpriteSheetData);
- // Level background
- _oBgContainer = new createjs.Container();
- s_oStage.addChild(_oBgContainer);
-
- _oAttachCard = new createjs.Container();
- s_oStage.addChild(_oAttachCard);
-
- // setup GUI
- _oInterface = new CInterface(formatTime(_iTimeLeft));
- _oNextLevelUI = new CNextLevel();
- _oGameOverUI = new CGameOver();
- _oVictoryUI = new CVictory();
- // level & GUI setup
- this.nextLevel();
- };
- this.unload = function(bFromExit){
- for (var i = 0; i < _aCards.length; i++) {
- _aCards[i].unload();
- };
- s_oStage.removeAllChildren();
- _oInterface.unload();
-
- if(bFromExit){
- $(s_oMain).trigger("end_level",_iCurrentLevel);
- }
- $(s_oMain).trigger("end_session");
- $(s_oMain).trigger("share_event",_iScore);
-
- s_oMain.gotoMenu();
- };
- this.cardClicked = function(oCard,sCardType){
- if (oCard.isFolded() === true && _bUpdatesSuspended === false) {
- if (_iFlippedCards < 2) {
- oCard.flipCard();
-
- }
- }
- };
- this.addFlippedCard = function(){
- _iFlippedCards++;
- if (_iFlippedCards === 2 && _bUpdatesSuspended === false) {
- this.checkMatching();
- };
- };
- this.checkMatching = function(){
- var foldedCardsId = [];
- var foldedCardsType = [];
- for (var i = 0; i < _iCardsNum; i++) {
- if (_aCards[i].isFolded() === false) {
- foldedCardsType.push(_aCards[i].getType());
- foldedCardsId.push(i);
- };
- };
- if (foldedCardsType[0] === foldedCardsType[1]) {
- var iMult = 1;
- if(_iTimeElapsBetweenMatching < TIME_FOR_MATCH_MULT){
- //PLAYER GET BONUS MULTIPLIER
- _iTimeElapsBetweenMatching = 0;
- _oInterface.showMultiplier(_iCurMatchMult);
- iMult = _iCurMatchMult;
- _iCurMatchMult++;
- }else{
- _iCurMatchMult = 2;
- _iTimeElapsBetweenMatching = 0;
- }
- playSound("right", 1, false);
-
- _aCards[foldedCardsId[0]].eliminateCard();
- _aCards[foldedCardsId[1]].eliminateCard();
- _aCards.splice(foldedCardsId[0],1);
- _aCards.splice(foldedCardsId[1] - 1,1);
- _iCardsNum -= 2;
- _iScore += (SCORE_MATCH_CARD * iMult);
- _iLevelScore += (SCORE_MATCH_CARD * iMult);
- _oInterface.refreshScore(_iScore);
- if (_iCardsNum === 0 &&
- _iCurrentLevel <= s_aCardsPerLevel.length){
-
- _bUpdatesSuspended = true;
-
- var oParent = this;
- setTimeout(function(){oParent.checkVictory();}, 1000);
- };
- } else {
- _bUpdatesSuspended = true;
- setTimeout(function(){
- _aCards[foldedCardsId[0]].flipCard();
- _aCards[foldedCardsId[0]].clickListener();
-
- _aCards[foldedCardsId[1]].flipCard();
- _aCards[foldedCardsId[1]].clickListener();
- _bUpdatesSuspended = false;
- },TIME_SHOW_NO_MATCH);
-
- };
- _iFlippedCards = 0;
- };
- this.checkVictory = function(){
- _bUpdatesSuspended = true;
- _iLevelTimeBonus = Math.round((_iTimeLeft / 1000) * SCORE_TIME_LEFT_MULT);
- _iScore += _iLevelTimeBonus;
- // Update Interface
- _oInterface.refreshScore(_iScore);
-
- $(s_oMain).trigger("end_level",_iCurrentLevel);
- if (_iCurrentLevel < s_aCardsPerLevel.length) {
- playSound("next_level", 1, false);
- _oNextLevelUI.display(_iLevelScore,_iLevelTimeBonus,_iLevelScore+_iLevelTimeBonus,_iScore,_iCurrentLevel);
- }else{
- playSound("win", 1, false);
- _oVictoryUI.display(_iScore);
- }
- };
-
- this.nextLevel = function(){
- _iCurrentLevel++;
- $(s_oMain).trigger("start_level",_iCurrentLevel);
- _oBgContainer.removeAllChildren();
- var bg = createBitmap(s_oSpriteLibrary.getSprite("bg_" + ((Math.floor(Math.random()*NUM_BACKGROUNDS))+1)));
- _oBgContainer.addChild(bg);
- // level setup
- var _oLevelData = CLevels(_iCurrentLevel);
- _iCardsNum = _oLevelData.cardsNum;
- _iTimeLeft = _oLevelData.timeAllotted;
- _iTimeElapsBetweenMatching = TIME_FOR_MATCH_MULT;
- var aChosenCards = [];
- for (var i = 0; i < _iCardsNum/2; i++) {
- aChosenCards[i] = i;
- aChosenCards[i+_iCardsNum/2] = i;
- };
- for (var i = 0; i < _iCardsNum; i++) {
- var iChosenCard = Math.floor(Math.random()*aChosenCards.length);
- var sCardType = "card" + aChosenCards[iChosenCard];
- _aCards[i] = new CCard(_oLevelData.cardsPos[i][0],
- _oLevelData.cardsPos[i][1],
- sCardType,
- _oLevelData.cardZoomFactor,
- _oAttachCard);
- aChosenCards.splice(iChosenCard,1);
- };
- // Score management
- _iLevelScore = 0;
- _iLevelTimeBonus = 0;
- _iGameOverScore = 0;
- _iCurMatchMult = 2;
- _bUpdatesSuspended = false;
- };
- this.suspendUpdates = function(){
- _bUpdatesSuspended = true;
- };
- this.restartUpdates = function(){
- if (_iCardsNum > 0) {
- _bUpdatesSuspended = false;
- };
- };
-
- this.update = function(){
- if(_bUpdatesSuspended){
- return;
- }
-
- // time mngmnt
- _iTimeLeft -= s_iTimeElaps;
- _iTimeElapsBetweenMatching += s_iTimeElaps;
- if(_iTimeLeft < 0){
- _bUpdatesSuspended = true;
- _iTimeLeft = 0;
- playSound("game_over", 1, false);
- _oGameOverUI.display(_iScore);
- _iCurrentLevel = 1;
-
- }else{
- _oInterface.update(formatTime(_iTimeLeft));
- }
- };
- this.spriteSheet = {};
-
- s_oGame = this;
-
- SCORE_MATCH_CARD = oData.score_match_card;
- SCORE_TIME_LEFT_MULT = oData.score_time_left_mult;
- TIME_FOR_MATCH_MULT = oData.time_match_mult;
- s_aCardsPerLevel = oData.card_per_level;
- s_aSecsPerLevel = oData.time_level;
- TIME_SHOW_CARDS = oData.show_cards * 1000;
-
- this._init();
- }
- var s_aCardsPerLevel;
- var s_aSecsPerLevel;
- var s_oGame;
|