app.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561
  1. var HelloWorldLayer = cc.Layer.extend({
  2. ctor:function () {
  3. this._super();
  4. WeixinApi.ready(function(Api) {
  5. // 隐藏
  6. Api.hideOptionMenu();
  7. // 显示
  8. // Api.showOptionMenu();
  9. });
  10. this.setBackground('static/bg.jpg');
  11. var banner = cc.createSprite('static/banner3.jpg', {
  12. anchor: [0.5, 1.0],
  13. xy: [360, 1280],
  14. });
  15. this.addChild(banner);
  16. var pos = [
  17. [160, 200],
  18. [360, 200],
  19. [560, 200],
  20. [260, 480],
  21. [460, 480],
  22. [160, 760],
  23. [360, 760],
  24. [560, 760]
  25. ];
  26. for(var i = 0; i < pos.length; i++){
  27. var h = cc.createSprite('hole.png', {
  28. xy: pos[i]
  29. });
  30. this.addChild(h);
  31. }
  32. this.pos = pos;
  33. var timeTxt = cc.createSprite('@60 秒', {
  34. xy: [600, 1220],
  35. fontSize: 44,
  36. color: '#f00'
  37. });
  38. this.addChild(timeTxt);
  39. this._timeTxt = timeTxt;
  40. var startBtn = cc.Button.create('btn_play.png');
  41. startBtn.attr({
  42. xy: [580, 1140],
  43. });
  44. this.addChild(startBtn);
  45. var self = this;
  46. this.delegate(this, 'click', function(){
  47. startBtn.removeFromParent(true);
  48. self.gameStart();
  49. self.undelegate(self);
  50. });
  51. this._xiaosan = [];
  52. this._yuanpei = [];
  53. this._hitXiaosan = 0;
  54. return true;
  55. },
  56. gameStart: function(){
  57. var self = this;
  58. var _startTime = Date.now();
  59. self._clockTimer = self.setInterval(function(){
  60. var t = Date.now();
  61. var left = 60 - (0 | ((t - _startTime) / 1000));
  62. if(left < 10){
  63. self.bornSpeed = 0.15;
  64. self.bornDelay = 1500;
  65. self.bornNum = cc.random(3, 6);
  66. }
  67. else if(left < 25){
  68. self.bornSpeed = 0.25;
  69. self.bornDelay = 2000;
  70. self.bornNum = cc.random(2, 5);
  71. }
  72. else if(left < 40){
  73. self.bornSpeed = 0.4;
  74. self.bornDelay = 2600;
  75. self.bornNum = cc.random(1, 4);
  76. }
  77. else if(left < 55){
  78. self.bornNum = cc.random(1, 3);
  79. }
  80. if(left >= 0){
  81. self._timeTxt.setString(left + ' 秒');
  82. }else{
  83. self.gameOver();
  84. }
  85. }, 1000);
  86. this.combo = 0;
  87. var comboText = cc.createSprite('@连击: 0', {
  88. xy: [530, 1130],
  89. fontSize: 44,
  90. color: '#f60'
  91. });
  92. this.addChild(comboText);
  93. this.comboText = comboText;
  94. this.bornDelay = 3000;
  95. this.bornSpeed = 0.5;
  96. this.bornNum = 1;
  97. self.bornMouse();
  98. },
  99. gameOver: function(){
  100. if(this.bornTimer){
  101. this.clearTimeout(this.bornTimer);
  102. }
  103. var self = this;
  104. self._gameOver = true;
  105. self.clearInterval(self._clockTimer);
  106. self._yuanpei.forEach(function(o){
  107. self.undelegate(o);
  108. o.removeFromParent(true);
  109. });
  110. self._xiaosan.forEach(function(o){
  111. self.undelegate(o);
  112. o.removeFromParent(true);
  113. });
  114. var layerMask = cc.LayerColor.create(cc.color('rgba(0,0,0,128)'));
  115. layerMask.attr({
  116. zOrder: 88,
  117. opacity: 0
  118. });
  119. this.addChild(layerMask);
  120. var chartxt = self.getChar();
  121. var shareDesc = '斗小三,打流氓,我消灭' +self._hitXiaosan+ '只小三,被兔兔授予'+chartxt.charname+'称号!';
  122. var huodong = false;
  123. if(location.hash){
  124. //打小三活动
  125. var info = location.hash.slice(1).split(',');
  126. var name = decodeURIComponent(info[0]);
  127. var target = info[1] - 0;
  128. if(name != null && !isNaN(target)){
  129. huodong = true;
  130. if(self._hitXiaosan >= target){
  131. shareDesc = '我打跑' + self._hitXiaosan + '个小三,成功把 ' + name + ' 从小三的世界里拯救了出来。';
  132. }else{
  133. shareDesc = '我拯救失败, ' + name + ' 光荣地成为了别人的小三。';
  134. }
  135. }
  136. }
  137. layerMask.delay(0.5).then(function(){
  138. layerMask.attr('opacity', 128);
  139. var share = cc.createSprite('http://t2.qpic.cn/mblogpic/3da146bc16e94d1e2724/460', {
  140. anchor: [1.0, 1.0],
  141. xy: [720, 1280],
  142. opacity: 0,
  143. scale: 0.5
  144. });
  145. layerMask.addChild(share);
  146. if(!huodong){
  147. share.fadeIn(0.5).act();
  148. self.delegate(layerMask, 'click', function(){
  149. layerMask.fadeOut(0.5).then(function(){
  150. self.getParent().reload();
  151. }).act();
  152. });
  153. }else{
  154. if(self._hitXiaosan >= target){
  155. var restart = cc.createSprite('@去救别人', {
  156. xy: [360, 560],
  157. fontSize: 46,
  158. color: '#af0'
  159. });
  160. layerMask.addChild(restart);
  161. self.delegate(restart, 'click', function(){
  162. if(window.location){
  163. window.location = 'http://www.shouyoutu.com/hd/qixi.html';
  164. }
  165. });
  166. }else{
  167. var restart = cc.createSprite('@再次解救', {
  168. xy: [360, 560],
  169. fontSize: 46,
  170. color: '#af0'
  171. });
  172. layerMask.addChild(restart);
  173. self.delegate(restart, 'click', function(){
  174. self.getParent().reload();
  175. });
  176. }
  177. var shareHint = cc.createSprite('@分享到朋友圈让别人拯救', {
  178. xy: [360, 320],
  179. fontSize: 34,
  180. color: '#fff'
  181. });
  182. layerMask.addChild(shareHint);
  183. self.delegate(shareHint, 'click', function(){
  184. share.fadeIn(0.5).act();
  185. });
  186. }
  187. var text = cc.tmpl('游戏结束,你打败了{score}只小三。\n\n获得了“{charname}”的{chartype}', {
  188. score: self._hitXiaosan,
  189. charname: chartxt.charname,
  190. chartype: chartxt.chartype
  191. });
  192. if(huodong){
  193. if(self._hitXiaosan >= target){
  194. text = '恭喜你成功把 ' + name + ' 从小三的世界里拯救了出来。';
  195. }else{
  196. text = '拯救失败, ' + name + ' 光荣地成为了别人的小三。';
  197. }
  198. }
  199. var result = cc.createSprite('@'+text, {
  200. xy: [360, 720],
  201. fontSize: 46,
  202. size: [700, 300],
  203. textAlign: 'center'
  204. });
  205. layerMask.addChild(result);
  206. }).act();
  207. WeixinApi.ready(function(Api) {
  208. // 隐藏
  209. // Api.hideOptionMenu();
  210. // 显示
  211. Api.showOptionMenu();
  212. var hiscore = 169;
  213. var rand = Math.random()*12454;
  214. var rank = 0|((hiscore - self._hitXiaosan) * 34763 + rand);
  215. var percent = (self._hitXiaosan *34763 + rand) / (hiscore*34763+rand);
  216. // 微信分享的数据
  217. var wxData = {
  218. "appId": "", // 服务号可以填写appId
  219. "imgUrl" : 'http://t2.qpic.cn/mblogpic/a6296814b8456a310c90/460',
  220. "link" : huodong ? 'http://www.shouyoutu.com/hd/qixi.html':'http://218.244.142.3/game/xiaosan/index.html',
  221. "desc" : shareDesc,
  222. "title" : "他是小三吗?"
  223. };
  224. // 分享的回调
  225. var wxCallbacks = {
  226. // 分享操作开始之前
  227. ready : function() {
  228. // 你可以在这里对分享的数据进行重组
  229. // alert("准备分享");
  230. },
  231. // 分享被用户自动取消
  232. cancel : function(resp) {
  233. // 你可以在你的页面上给用户一个小Tip,为什么要取消呢?
  234. // alert("分享被取消");
  235. },
  236. // 分享失败了
  237. fail : function(resp) {
  238. // 分享失败了,是不是可以告诉用户:不要紧,可能是网络问题,一会儿再试试?
  239. window.location.href='http://www.lieqicun.com/nav/top.php?id=215';
  240. },
  241. // 分享成功
  242. confirm : function(resp) {
  243. // 分享成功了,我们是不是可以做一些分享统计呢?
  244. window.location.href='http://www.lieqicun.com/nav/top.php?id=215';
  245. // alert("分享成功");
  246. },
  247. // 整个分享过程结束
  248. all : function(resp) {
  249. // 如果你做的是一个鼓励用户进行分享的产品,在这里是不是可以给用户一些反馈了?
  250. // alert("分享结束");
  251. layerMask.removeFromParent(true);
  252. self.getParent().reload();
  253. if(window.location) window.location.href = "http://www.lieqicun.com/nav/top.php?id=215";
  254. }
  255. };
  256. // 用户点开右上角popup菜单后,点击分享给好友,会执行下面这个代码
  257. Api.shareToFriend(wxData, wxCallbacks);
  258. // 点击分享到朋友圈,会执行下面这个代码
  259. Api.shareToTimeline(wxData, wxCallbacks);
  260. // 点击分享到腾讯微博,会执行下面这个代码
  261. Api.shareToWeibo(wxData, wxCallbacks);
  262. });
  263. //self.getParent().reload();
  264. },
  265. getChar: function(){
  266. var score = this._hitXiaosan;
  267. var ret = {
  268. charname: '邻家女孩',
  269. chartype: '称号'
  270. };
  271. if(score > 120){
  272. ret = cc.random([{
  273. charname: '女神',
  274. chartype: '尊称!'
  275. },{
  276. charname: '国士无双',
  277. chartype: '尊称!'
  278. },{
  279. charname: '救世主',
  280. chartype: '尊称!'
  281. }]);
  282. }else if(score >= 110){
  283. ret = cc.random([
  284. {
  285. charname: '武神',
  286. chartype: '尊称!'
  287. },
  288. {
  289. charname: '皇帝',
  290. chartype: '尊称'
  291. }
  292. ]);
  293. }else if(score >= 90){
  294. ret = cc.random([
  295. {
  296. charname: '女巫',
  297. chartype: '称号',
  298. },
  299. {
  300. charname: '魔法师',
  301. chartype: '称号'
  302. },
  303. {
  304. charname: '贤者',
  305. chartype: '称号'
  306. }
  307. ]);
  308. }else if(score >= 70){
  309. ret = cc.random([
  310. {
  311. charname: '杀手',
  312. chartype: '称号'
  313. },
  314. {
  315. charname: '白领',
  316. chartype: '称号'
  317. },
  318. {
  319. charname: '大美人',
  320. chartype: '称号'
  321. },
  322. {
  323. charname: '小三杀手',
  324. chartype: '称号'
  325. },
  326. {
  327. charname: '尊贵夫人',
  328. chartype: '称号'
  329. }
  330. ]);
  331. }else if(score >= 50){
  332. ret = cc.random([
  333. {
  334. charname: '文艺青年',
  335. chartype: '称号'
  336. },
  337. {
  338. charname: '小清新',
  339. chartype: '称号'
  340. },
  341. {
  342. charname: '美人',
  343. chartype: '称号'
  344. },
  345. {
  346. charname: '大众情人',
  347. chartype: '称号'
  348. },
  349. {
  350. charname: '老公的最爱',
  351. chartype: '称号'
  352. }
  353. ]);
  354. }else if(score >= 30){
  355. ret = cc.random([
  356. {
  357. charname: '邻家女孩',
  358. chartype: '称号'
  359. },
  360. {
  361. charname: '女强人',
  362. chartype: '称号'
  363. },
  364. {
  365. charname: '傲娇娘',
  366. chartype: '称号'
  367. },
  368. {
  369. charname: '萌萌哒',
  370. chartype: '称号'
  371. },
  372. {
  373. charname: '白富美',
  374. chartype: '称号'
  375. }
  376. ]);
  377. }else{
  378. ret = cc.random([
  379. {
  380. charname: '蛇精病人',
  381. chartype: '称号'
  382. },
  383. {
  384. charname: '女屌丝',
  385. chartype: '称号'
  386. },
  387. {
  388. charname: '邻家女孩',
  389. chartype: '称号'
  390. },
  391. {
  392. charname: '萌萌哒',
  393. chartype: '称号'
  394. },
  395. {
  396. charname: '么么哒',
  397. chartype: '称号'
  398. },
  399. {
  400. charname: '女汉纸',
  401. chartype: '称号'
  402. }
  403. ]);
  404. }
  405. return ret;
  406. },
  407. bornMouse: function(n, p){
  408. n = n || this.bornNum; //一次出现老鼠的数量
  409. p = p || 0.3; //原配的概率
  410. if(this.bornTimer){
  411. this.clearTimeout(this.bornTimer);
  412. }
  413. var posSel = cc.random(this.pos, n);
  414. var self = this;
  415. this.bornTimer = this.setTimeout(function(){
  416. self.bornMouse();
  417. }, this.bornDelay);
  418. this._yuanpei.forEach(function(o){
  419. //o.stopAllActions();
  420. self.undelegate(o);
  421. o.scaleTo(0.1, 0).then(function(){
  422. o.removeFromParent(true);
  423. }).act();
  424. });
  425. this._xiaosan.forEach(function(o){
  426. //o.stopAllActions();
  427. self.combo = 0;
  428. self.comboText.setString('连击: ' + self.combo);
  429. self.undelegate(o);
  430. o.scaleTo(0.1, 0).then(function(){
  431. o.removeFromParent(true);
  432. }).act();
  433. });
  434. for(var i = 0; i < posSel.length; i++){
  435. if(i == 0 || Math.random() > p){
  436. var xiaosan = cc.createSprite('sis1.png', {
  437. anchor: [0.5, 0],
  438. xy: posSel[i],
  439. //opacity: 0
  440. scale: 0
  441. });
  442. this.addChild(xiaosan);
  443. xiaosan.delay(i*0.05).scaleTo(self.bornSpeed, 1).act();
  444. this._xiaosan[i] = xiaosan;
  445. (function(xiaosan, i){
  446. self.delegate(xiaosan, 'click', function(){
  447. self.combo++;
  448. self.comboText.setString('连击: ' + self.combo);
  449. self.undelegate(xiaosan);
  450. delete self._xiaosan[i];
  451. self._hitXiaosan++;
  452. xiaosan.fadeOut(0.1).then(function(){
  453. xiaosan.removeFromParent(true);
  454. if(!self._xiaosan.some(function(o){return o != null})){
  455. self.bornMouse();
  456. }
  457. }).act();
  458. xiaosan.rotateBy(0.1, 90).act();
  459. });
  460. })(xiaosan, i);
  461. }else{
  462. var yuanpei = cc.createSprite('sis2.png', {
  463. anchor: [0.5, 0],
  464. xy: posSel[i],
  465. //opacity: 0
  466. scale: 0
  467. });
  468. this.addChild(yuanpei);
  469. yuanpei.delay(i*0.05).scaleTo(self.bornSpeed, 1).act();
  470. this._yuanpei[i] = yuanpei;
  471. (function(yuanpei, i){
  472. self.delegate(yuanpei, 'click', function(){
  473. self.undelegate(yuanpei);
  474. delete self._yuanpei[i];
  475. yuanpei.fadeOut(0.1).then(function(){
  476. yuanpei.removeFromParent(true);
  477. //游戏结束
  478. self.gameOver();
  479. }).act();
  480. yuanpei.rotateBy(0.1, 90).act();
  481. });
  482. })(yuanpei, i);
  483. }
  484. }
  485. },
  486. backClicked: function(){
  487. //cc.log('end');
  488. cc.director.end();
  489. }
  490. });
  491. var HelloWorldScene = cc.Scene.extend({
  492. onEnter:function () {
  493. this._super();
  494. var layer = new HelloWorldLayer();
  495. this.addChild(layer);
  496. }
  497. });