CGame.js 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. function CGame(oData){
  2. var _bUpdatesSuspended = true;
  3. var _iCardsNum = 4;
  4. var _iCurrentLevel = 0;
  5. var _iFlippedCards = 0;
  6. var _iTimeLeft; // in ms
  7. var _iTimeElapsBetweenMatching;
  8. var _iScore = 0;
  9. var _iCurMatchMult;
  10. var _iLevelScore = 0;
  11. var _iLevelTimeBonus = 0;
  12. var _aCards = [];
  13. var _oBgContainer;
  14. var _oInterface;
  15. var _oNextLevelUI;
  16. var _oGameOverUI;
  17. var _oVictoryUI;
  18. var _oAttachCard;
  19. this._init = function(){
  20. // load spritesheet
  21. var oSpriteSheetPNG = s_oSpriteLibrary.getSprite('card_spritesheet');
  22. var oSpriteSheetData = {
  23. images: [oSpriteSheetPNG],
  24. frames: {width: CARD_WIDTH, height: CARD_HEIGHT, regX: CARD_WIDTH/2, regY: CARD_HEIGHT/2},
  25. animations: { card0: [0],
  26. card1: [1],
  27. card2: [2],
  28. card3: [3],
  29. card4: [4],
  30. card5: [5],
  31. card6: [6],
  32. card7: [7],
  33. card8: [9],
  34. card9: [10],
  35. card10: [11],
  36. card11: [12],
  37. card12: [13],
  38. card13: [14],
  39. card14: [15],
  40. card15: [16],
  41. back: [17]}
  42. }
  43. this.spriteSheet = new createjs.SpriteSheet(oSpriteSheetData);
  44. // Level background
  45. _oBgContainer = new createjs.Container();
  46. s_oStage.addChild(_oBgContainer);
  47. _oAttachCard = new createjs.Container();
  48. s_oStage.addChild(_oAttachCard);
  49. // setup GUI
  50. _oInterface = new CInterface(formatTime(_iTimeLeft));
  51. _oNextLevelUI = new CNextLevel();
  52. _oGameOverUI = new CGameOver();
  53. _oVictoryUI = new CVictory();
  54. // level & GUI setup
  55. this.nextLevel();
  56. };
  57. this.unload = function(bFromExit){
  58. for (var i = 0; i < _aCards.length; i++) {
  59. _aCards[i].unload();
  60. };
  61. s_oStage.removeAllChildren();
  62. _oInterface.unload();
  63. if(bFromExit){
  64. $(s_oMain).trigger("end_level",_iCurrentLevel);
  65. }
  66. $(s_oMain).trigger("end_session");
  67. $(s_oMain).trigger("share_event",_iScore);
  68. s_oMain.gotoMenu();
  69. };
  70. this.cardClicked = function(oCard,sCardType){
  71. if (oCard.isFolded() === true && _bUpdatesSuspended === false) {
  72. if (_iFlippedCards < 2) {
  73. oCard.flipCard();
  74. }
  75. }
  76. };
  77. this.addFlippedCard = function(){
  78. _iFlippedCards++;
  79. if (_iFlippedCards === 2 && _bUpdatesSuspended === false) {
  80. this.checkMatching();
  81. };
  82. };
  83. this.checkMatching = function(){
  84. var foldedCardsId = [];
  85. var foldedCardsType = [];
  86. for (var i = 0; i < _iCardsNum; i++) {
  87. if (_aCards[i].isFolded() === false) {
  88. foldedCardsType.push(_aCards[i].getType());
  89. foldedCardsId.push(i);
  90. };
  91. };
  92. if (foldedCardsType[0] === foldedCardsType[1]) {
  93. var iMult = 1;
  94. if(_iTimeElapsBetweenMatching < TIME_FOR_MATCH_MULT){
  95. //PLAYER GET BONUS MULTIPLIER
  96. _iTimeElapsBetweenMatching = 0;
  97. _oInterface.showMultiplier(_iCurMatchMult);
  98. iMult = _iCurMatchMult;
  99. _iCurMatchMult++;
  100. }else{
  101. _iCurMatchMult = 2;
  102. _iTimeElapsBetweenMatching = 0;
  103. }
  104. playSound("right", 1, false);
  105. _aCards[foldedCardsId[0]].eliminateCard();
  106. _aCards[foldedCardsId[1]].eliminateCard();
  107. _aCards.splice(foldedCardsId[0],1);
  108. _aCards.splice(foldedCardsId[1] - 1,1);
  109. _iCardsNum -= 2;
  110. _iScore += (SCORE_MATCH_CARD * iMult);
  111. _iLevelScore += (SCORE_MATCH_CARD * iMult);
  112. _oInterface.refreshScore(_iScore);
  113. if (_iCardsNum === 0 &&
  114. _iCurrentLevel <= s_aCardsPerLevel.length){
  115. _bUpdatesSuspended = true;
  116. var oParent = this;
  117. setTimeout(function(){oParent.checkVictory();}, 1000);
  118. };
  119. } else {
  120. _bUpdatesSuspended = true;
  121. setTimeout(function(){
  122. _aCards[foldedCardsId[0]].flipCard();
  123. _aCards[foldedCardsId[0]].clickListener();
  124. _aCards[foldedCardsId[1]].flipCard();
  125. _aCards[foldedCardsId[1]].clickListener();
  126. _bUpdatesSuspended = false;
  127. },TIME_SHOW_NO_MATCH);
  128. };
  129. _iFlippedCards = 0;
  130. };
  131. this.checkVictory = function(){
  132. _bUpdatesSuspended = true;
  133. _iLevelTimeBonus = Math.round((_iTimeLeft / 1000) * SCORE_TIME_LEFT_MULT);
  134. _iScore += _iLevelTimeBonus;
  135. // Update Interface
  136. _oInterface.refreshScore(_iScore);
  137. $(s_oMain).trigger("end_level",_iCurrentLevel);
  138. if (_iCurrentLevel < s_aCardsPerLevel.length) {
  139. playSound("next_level", 1, false);
  140. _oNextLevelUI.display(_iLevelScore,_iLevelTimeBonus,_iLevelScore+_iLevelTimeBonus,_iScore,_iCurrentLevel);
  141. }else{
  142. playSound("win", 1, false);
  143. _oVictoryUI.display(_iScore);
  144. }
  145. };
  146. this.nextLevel = function(){
  147. _iCurrentLevel++;
  148. $(s_oMain).trigger("start_level",_iCurrentLevel);
  149. _oBgContainer.removeAllChildren();
  150. var bg = createBitmap(s_oSpriteLibrary.getSprite("bg_" + ((Math.floor(Math.random()*NUM_BACKGROUNDS))+1)));
  151. _oBgContainer.addChild(bg);
  152. // level setup
  153. var _oLevelData = CLevels(_iCurrentLevel);
  154. _iCardsNum = _oLevelData.cardsNum;
  155. _iTimeLeft = _oLevelData.timeAllotted;
  156. _iTimeElapsBetweenMatching = TIME_FOR_MATCH_MULT;
  157. var aChosenCards = [];
  158. for (var i = 0; i < _iCardsNum/2; i++) {
  159. aChosenCards[i] = i;
  160. aChosenCards[i+_iCardsNum/2] = i;
  161. };
  162. for (var i = 0; i < _iCardsNum; i++) {
  163. var iChosenCard = Math.floor(Math.random()*aChosenCards.length);
  164. var sCardType = "card" + aChosenCards[iChosenCard];
  165. _aCards[i] = new CCard(_oLevelData.cardsPos[i][0],
  166. _oLevelData.cardsPos[i][1],
  167. sCardType,
  168. _oLevelData.cardZoomFactor,
  169. _oAttachCard);
  170. aChosenCards.splice(iChosenCard,1);
  171. };
  172. // Score management
  173. _iLevelScore = 0;
  174. _iLevelTimeBonus = 0;
  175. _iGameOverScore = 0;
  176. _iCurMatchMult = 2;
  177. _bUpdatesSuspended = false;
  178. };
  179. this.suspendUpdates = function(){
  180. _bUpdatesSuspended = true;
  181. };
  182. this.restartUpdates = function(){
  183. if (_iCardsNum > 0) {
  184. _bUpdatesSuspended = false;
  185. };
  186. };
  187. this.update = function(){
  188. if(_bUpdatesSuspended){
  189. return;
  190. }
  191. // time mngmnt
  192. _iTimeLeft -= s_iTimeElaps;
  193. _iTimeElapsBetweenMatching += s_iTimeElaps;
  194. if(_iTimeLeft < 0){
  195. _bUpdatesSuspended = true;
  196. _iTimeLeft = 0;
  197. playSound("game_over", 1, false);
  198. _oGameOverUI.display(_iScore);
  199. _iCurrentLevel = 1;
  200. }else{
  201. _oInterface.update(formatTime(_iTimeLeft));
  202. }
  203. };
  204. this.spriteSheet = {};
  205. s_oGame = this;
  206. SCORE_MATCH_CARD = oData.score_match_card;
  207. SCORE_TIME_LEFT_MULT = oData.score_time_left_mult;
  208. TIME_FOR_MATCH_MULT = oData.time_match_mult;
  209. s_aCardsPerLevel = oData.card_per_level;
  210. s_aSecsPerLevel = oData.time_level;
  211. TIME_SHOW_CARDS = oData.show_cards * 1000;
  212. this._init();
  213. }
  214. var s_aCardsPerLevel;
  215. var s_aSecsPerLevel;
  216. var s_oGame;