GamePlayPage.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. cc.Class({
  2. extends: cc.Component,
  3. properties: {
  4. CountDown: {
  5. default: null,
  6. type: cc.Node
  7. },
  8. CardsData:[],
  9. CardsList:{
  10. default: null,
  11. type: cc.Node
  12. },
  13. Card:{
  14. default: null,
  15. type: cc.Prefab
  16. },
  17. ZhiJingRenDetails:{
  18. default: null,
  19. type: cc.Node
  20. },
  21. CompareCardsArr:[],
  22. TimeTimingNode:{
  23. default: null,
  24. type: cc.Node
  25. },
  26. CurrentCardsNum:20,
  27. GameOverPage:{
  28. default: null,
  29. type: cc.Node
  30. },
  31. GamePlayPage:{
  32. default: null,
  33. type: cc.Node
  34. },
  35. TimingTimerID:null,
  36. TimingNum:0,
  37. TimingText:'',
  38. CardsNodeArr:[],
  39. EnableTouch:true,
  40. },
  41. onLoad(){
  42. this.EnableTouch = true;
  43. this.CardsNodeArr = [];
  44. this.CurrentCardsNum = 20;
  45. this.CardsData = [
  46. {
  47. DimensionID: '1',
  48. DimensionName: '自然',
  49. CardsListData: [
  50. {
  51. CardName: '袁隆平',
  52. CardWord: '坚持',
  53. CardIMG: cc.Color.GREEN,
  54. CardDetailsText: '袁隆平是杂交水稻研究领域的开创者和带头人,先后成功研发出“三系法”杂交水稻。'
  55. },
  56. {
  57. CardName: '钱学森',
  58. CardWord: '奋斗',
  59. CardIMG: cc.Color.RED,
  60. CardDetailsText: '钱学森发展国防科学技术方面做了大量工作,在我国导弹核武器的研究中建立了功勋。'
  61. },
  62. {
  63. CardName: '熊庆来',
  64. CardWord: '刻苦',
  65. CardIMG: cc.Color.YELLOW,
  66. CardDetailsText: '熊庆来主要从事函数论方面的研究,定义了一个“无穷级函数”,国际上称为熊氏无穷数。'
  67. },
  68. {
  69. CardName: '华罗庚',
  70. CardWord: '努力',
  71. CardIMG: cc.Color.BLUE,
  72. CardDetailsText: '华罗庚是一位只有初中学历的数学家,对数论有很深的研究,得出了著名的华氏定理。'
  73. }
  74. ]
  75. },
  76. {
  77. DimensionID: '2',
  78. DimensionName: '数学',
  79. CardsListData: [
  80. {
  81. CardName: '熊庆来',
  82. CardWord: '刻苦',
  83. CardIMG: cc.color.BLUE,
  84. CardDetailsText: '熊庆来主要从事函数论方面的研究,定义了一个“无穷级函数”,国际上称为熊氏无穷数。'
  85. },
  86. {
  87. CardName: '华罗庚',
  88. CardWord: '努力',
  89. CardIMG: cc.color.BLUE,
  90. CardDetailsText: '华罗庚是一位只有初中学历的数学家,对数论有很深的研究,得出了著名的华氏定理。'
  91. }
  92. ]
  93. }
  94. ];
  95. },
  96. start () {
  97. },
  98. ReadyBeforePlay(DimensionID){
  99. this.CompareCardsArr = [];
  100. this.CardsNodeArr = [];
  101. this.CurrentCardsNum = 20;
  102. this.TimeTimingNode.getComponent(cc.Label).string = '时间:00:00';
  103. //播放倒计时动画
  104. var CountDownAnim = this.CountDown.getComponent(cc.Animation);
  105. CountDownAnim.play();
  106. CountDownAnim.on('finished',this.TimeTiming,this);
  107. var CardsListData = this.GetCardsListByDimensionID(DimensionID);
  108. // console.log(CardsList);
  109. this.DestroyAllChildren(this.CardsList);
  110. this.AddCardToCardsList(this.CardsList,this.Card,CardsListData);
  111. this.ZhiJingRenDetails.active = false;
  112. },
  113. //时间计时
  114. TimeTiming(){
  115. var Minute = 0;
  116. var Second = 0;
  117. var self = this;
  118. self.TurnCardsToBack(self.CardsNodeArr);
  119. self.TimingTimerID = setInterval(function(){
  120. self.TimingNum+=1;
  121. var TimeText = '';
  122. if(Second<60){
  123. Second+=1;
  124. if(Second==60){
  125. Second=0;
  126. Minute+=1;
  127. }
  128. }
  129. if(Minute > 0 && Minute <10){
  130. TimeText = TimeText+'0'+Minute+':';
  131. }else if(Minute >= 10){
  132. TimeText = TimeText+Minute+':';
  133. }else{
  134. TimeText += '00:'
  135. }
  136. if(Second > 0 && Second <10){
  137. TimeText = TimeText+'0'+Second;
  138. }else if(Second >= 10){
  139. TimeText += Second;
  140. }else{
  141. TimeText += '00'
  142. }
  143. self.TimeTimingNode.getComponent(cc.Label).string = '时间:'+TimeText;
  144. self.TimingText = TimeText;
  145. },1000);
  146. },
  147. GetCardsListByDimensionID(DimensionID){
  148. var CardsDataArrLength = this.CardsData.length;
  149. var CardsListData = [];
  150. for(var i=0;i<CardsDataArrLength;i++){
  151. if(DimensionID == this.CardsData[i].DimensionID){
  152. CardsListData = this.CardsData[i].CardsListData;
  153. }
  154. }
  155. return CardsListData;
  156. },
  157. AddCardToCardsList(CardsList,CardPrefab,CardsListData){
  158. //1.生成20个空卡放入节点数组;
  159. this.CardsNodeArr = [];
  160. for(var i = 0;i<20;i++){
  161. var newMyPrefab = cc.instantiate( CardPrefab );
  162. newMyPrefab.parent = CardsList;
  163. this.CardsNodeArr.push(newMyPrefab);
  164. }
  165. //2.随机10个智敬人CardsListData卡片信息,然后存到智敬人数组CardsInfoArr里存2次,这样就是10对卡片了。
  166. var CardsInfoArr = [];
  167. var CardsListDataIndex = 0;
  168. //如果卡库length>=10,则:
  169. // 设置个index数组=【0-卡库.length】,然后从卡库数组取(随机index数组)位的信息,放入智敬人数组,放入2次,然后该index在数组中移出,直至I=9,
  170. if(CardsListData.length >= 10){
  171. var indexArr = [];
  172. for(var i = 0;i<CardsListData.length;i++){
  173. indexArr.push(i);
  174. }
  175. for(var i = 0;i<10;i++){
  176. CardsListDataIndex = this.GetRandomNum(0,indexArr.length-1);
  177. let aIndex = indexArr[CardsListDataIndex];
  178. CardsInfoArr.push(CardsListData[aIndex]);
  179. CardsInfoArr.push(CardsListData[aIndex]);
  180. indexArr.splice(CardsListDataIndex,1);
  181. }
  182. }
  183. //如果卡库length<10,则:
  184. // 依次保存入对应智敬人数组,完事之后再补随机,直至满10位。
  185. else{
  186. for(var i = 0;i<10;i++){
  187. if(i<CardsListData.length){
  188. CardsListDataIndex = i;
  189. }else{
  190. CardsListDataIndex = this.GetRandomNum(0,CardsListData.length-1);
  191. }
  192. CardsInfoArr.push(CardsListData[CardsListDataIndex]);
  193. CardsInfoArr.push(CardsListData[CardsListDataIndex]);
  194. }
  195. }
  196. //3.设置个CardsInfoArrIndex数组=【0-19】,将智敬人数组顺序打乱, 依次放入节点数组随机index(index数组取随机),该index就从index数组里面移出,
  197. var CardsInfoIndexArr = [];
  198. // var DisorderlyCardsInfoArr = [];
  199. var CardsInfoIndex = 0;
  200. for(var i = 0;i<20;i++){
  201. CardsInfoIndexArr.push(i);
  202. }
  203. for(var i = 0;i<20;i++){
  204. CardsInfoIndex = this.GetRandomNum(0,CardsInfoIndexArr.length-1);
  205. // DisorderlyCardsInfoArr.add(CardsInfoArr[CardsInfoIndex]);
  206. var CardDetailsScript = this.CardsNodeArr[i].getComponent( 'CardDetails' );
  207. CardDetailsScript.GamePlayPageJS = this;
  208. let aIndex = CardsInfoIndexArr[CardsInfoIndex];
  209. CardDetailsScript.SetDetails(i,CardsInfoArr[aIndex]);
  210. CardsInfoIndexArr.splice(CardsInfoIndex,1);
  211. }
  212. },
  213. //倒计时结束开始游戏后,所有卡片翻过去,变成背面
  214. TurnCardsToBack(CardsNodeArr){
  215. for(var i = 0;i<20;i++){
  216. CardsNodeArr[i].getChildByName('CardBack').active = true;
  217. }
  218. },
  219. CompareCards(CardID,CardName,Details,CardNode){
  220. if(this.EnableTouch == false) return;
  221. CardNode.getChildByName('CardBack').active = false;
  222. if(this.CompareCardsArr.length == 0){
  223. var aCard = {CardID,CardName,CardNode};
  224. this.CompareCardsArr.push(aCard);
  225. }else if(this.CompareCardsArr.length == 1){
  226. this.EnableTouch = false;
  227. if(CardID != this.CompareCardsArr[0].CardID){
  228. var aCard = {CardID,CardName,CardNode};
  229. this.CompareCardsArr.push(aCard);
  230. if(CardName == this.CompareCardsArr[0].CardName){
  231. this.ZhiJingRenDetails.active = true;
  232. this.SetZhiJingRenDetails(Details);
  233. this.scheduleOnce(function() {
  234. this.CardsClear(this.CompareCardsArr);
  235. this.EnableTouch = true;
  236. this.CompareCardsArr.splice(0,2);
  237. }, 0.5);
  238. }else{
  239. this.scheduleOnce(function() {
  240. this.CardsReset(this.CompareCardsArr);
  241. this.EnableTouch = true;
  242. this.CompareCardsArr.splice(0,2);
  243. }, 0.5);
  244. }
  245. }
  246. }else if(this.CompareCardsArr.length == 2){//当玩家快速点到第三个的时候,就让前两个马上消失
  247. if(CardName == this.CompareCardsArr[0].CardName){
  248. this.CardsClear(this.CompareCardsArr);
  249. }else{
  250. this.CardsReset(this.CompareCardsArr);
  251. }
  252. this.CompareCardsArr.splice(0,2);
  253. var aCard = {CardID,CardName,CardNode};
  254. this.CompareCardsArr.push(aCard);
  255. }
  256. },
  257. CardsClear(CompareCardsArr){
  258. for(var i = 0;i<CompareCardsArr.length;i++){
  259. var CardNodeJS = CompareCardsArr[i].CardNode.getComponent('CardDetails');
  260. CardNodeJS.CardClear();
  261. }
  262. this.CurrentCardsNum -= 2;
  263. //20张卡牌全部消除,游戏结束
  264. if(this.CurrentCardsNum == 0){
  265. this.GameOverPage.active = true;
  266. this.GamePlayPage.active = false;
  267. clearInterval(this.TimingTimerID);
  268. var GameOverJS = this.GameOverPage.getComponent('GameOverPage');
  269. GameOverJS.SetGameResut(this.TimingNum,this.TimingText)
  270. }
  271. },
  272. CardsReset(CompareCardsArr){
  273. for(var i = 0;i<CompareCardsArr.length;i++){
  274. var CardNodeJS = CompareCardsArr[i].CardNode.getComponent('CardDetails');
  275. CardNodeJS.CardReset();
  276. }
  277. },
  278. SetZhiJingRenDetails(Details){
  279. this.ZhiJingRenDetails.getChildByName('DetailsText').getComponent(cc.Label).string = Details.CardDetailsText;
  280. this.ZhiJingRenDetails.getChildByName('HeadIMG').color = Details.CardIMG;//图片暂时用颜色代替
  281. },
  282. DestroyAllChildren(ParentNode){
  283. var children = ParentNode.children;
  284. for (var i = 0; i < children.length; i++)
  285. {
  286. children[i].destroy();
  287. }
  288. },
  289. //从n到m获取随机整数,包含n,m
  290. GetRandomNum(n, m) {
  291. var random = Math.floor(Math.random() * (m - n + 1) + n);
  292. return random;
  293. }
  294. });