jquery开发的数字相加游戏,我在一轮中玩了632分(如下图),你能玩几分,哈哈...

我要试一试

下面贡献下这款“数字相加游戏”的开发过程。

html部分:

  1. <div class="container">
  2. <div class="how-to-play">
  3. <h1>
  4. How to Play</h1>
  5. <p>
  6. 数字加法游戏-- 单击左侧的数字色块相加等于右上角的数字,当相等时,这几个色块消失。
  7. </p>
  8. <button id="got-it">
  9. OK, 开始!</button>
  10. </div>
  11. <div class="board">
  12. </div>
  13. <div class="right">
  14. <span class="sum-display"></span><span class="score-display"></span>
  15. <button id="restart">
  16. 重新开始</button>
  17. <a href="#!" class="how-to-play">游戏攻略</a>
  18. </div>
  19. </div>
  20. <div style="text-align: center; font-size: 12px;">
  21. <br />
  22. 来源:<a href="http://www.w2bc.com/shili">w2bc.com(爱编程)</a> 作者:拎壶充
  23. </div>

js脚本:

  1. var $tCount = 64;
  2. var $totalVal = 316;
  3. var $level = 1;
  4. var $score = 0;
  5. var $targetVal = 0;
  6.  
  7. var trackTotalVal = function (val) {
  8. $totalVal -= val;
  9. return $totalVal;
  10. };
  11.  
  12. // gameboard setup
  13. var $tiles = function () {
  14. return [1, 1, 1, 1, 1, 1, 1, 1,
  15. 2, 2, 2, 2, 2, 2, 2,
  16. 3, 3, 3, 3, 3, 3, 3,
  17. 4, 4, 4, 4, 4, 4, 4,
  18. 5, 5, 5, 5, 5, 5, 5,
  19. 6, 6, 6, 6, 6, 6, 6,
  20. 7, 7, 7, 7, 7, 7, 7,
  21. 8, 8, 8, 8, 8, 8, 8,
  22. 9, 9, 9, 9, 9, 9, 9];
  23. };
  24.  
  25. var $tilesShuffle = function (arr) {
  26. var $newArr = [];
  27. var $randomIndex;
  28. var $element;
  29. while (arr.length) {
  30. $randomIndex = Math.floor(Math.random() * arr.length);
  31. $element = arr.splice($randomIndex, 1);
  32. $newArr.push($element[0]);
  33. }
  34. return $newArr;
  35. };
  36.  
  37. var $makePieces = function (arr) {
  38. var $pieces = [];
  39. var $piece;
  40. while (arr.length) {
  41. $piece = '<div>' + arr.pop().toString() + '</div>';
  42. $pieces.push($piece);
  43. }
  44. return $pieces;
  45. };
  46.  
  47. var $makeBoard = function () {
  48. var $gameTiles = $makePieces($tilesShuffle($tiles()));
  49. while ($gameTiles.length) {
  50. $('div.board').append($gameTiles.pop());
  51. }
  52. };
  53.  
  54. var $clearBoard = function () {
  55. $('.board').empty();
  56. };
  57.  
  58. // generates # for player to make
  59. var $genSum = function (level) {
  60. var $maxVal = (level * 5) + 10;
  61. var $minVal = 10;
  62. if ($totalVal > $maxVal && $tCount > 10) {
  63. return Math.floor(Math.random() * ($maxVal - $minVal + 1) + $minVal);
  64. }
  65. else if ($tCount <= 10 && $totalVal > $maxVal) {
  66. return $genSumFailsafe($maxVal);
  67. }
  68. else if ($totalVal <= $maxVal) {
  69. return $totalVal;
  70. }
  71. };
  72.  
  73. // fixes the '$genSum generates # too big or not possible w/ available tiles' bug.
  74. var $genSumFailsafe = function (max) {
  75. var $max = max;
  76. var $liveTiles = [];
  77. var $l = 0;
  78. $('.board div').not('.dead').each(function () {
  79. $liveTiles.push(parseInt($(this).text()));
  80. });
  81. $liveTiles.sort(function (a, b) {
  82. return b - a;
  83. });
  84. for (i = 0; i < $liveTiles.length; i++) {
  85. for (j = 1; j < $liveTiles.length; j++) {
  86. $l = $liveTiles[i] + $liveTiles[j];
  87. if ($l <= $max) {
  88. return $l;
  89. }
  90. }
  91. }
  92. };
  93.  
  94. // displays expected # to player
  95. var $displaySum = function (val) {
  96. $('.sum-display').text(val.toString());
  97. };
  98.  
  99. // checks whether player exceeded or equaled the expected sum
  100. var $checkSum = function (val, targetVal) {
  101. if (val === targetVal) {
  102. return "=";
  103. }
  104. else if (val > targetVal) {
  105. return ">";
  106. }
  107. else {
  108. return "<";
  109. }
  110. };
  111.  
  112. // adds to and displays player's score
  113. var $displayScore = function (val) {
  114. $score += val * 2;
  115. $('.score-display').text($score.toString());
  116. };
  117.  
  118. // set up playing board
  119. var $setupBoard = function () {
  120. $clearBoard();
  121. $makeBoard();
  122. $tCount = 64;
  123. $totalVal = 316;
  124. $targetVal = $genSum($level);
  125. $displaySum($targetVal);
  126. $displayScore(0);
  127. };
  128.  
  129. // start game
  130. var $initGame = function () {
  131. $level = 1; // game initiates @ level one, score 0
  132. $score = 0;
  133. $setupBoard();
  134. };
  135.  
  136. $(function () {
  137. var $selectedTotal = 0;
  138. var $r; // variable to hold value of checkSum call
  139. var $t = 0; // variable for tracking # of live tiles
  140. var $this;
  141. $initGame();
  142. $(document).on('click', '.board div', function () { // activates when player clicks piece
  143. $this = $(this);
  144. if (!($this.hasClass('dead'))) {
  145. $this.toggleClass('selected');
  146. if ($this.hasClass('selected')) {
  147. $selectedTotal += parseInt($this.text());
  148. $r = $checkSum($selectedTotal, $targetVal);
  149. $t++;
  150. if ($r === "=") {
  151. $('.selected').empty().addClass('dead').removeClass('selected');
  152. $displayScore($selectedTotal);
  153. // tracking available tiles & pts left
  154. $tCount -= $t; // subtracts # of used tiles from $tCount
  155. $totalVal -= $selectedTotal;
  156. // reset and init for next move
  157. $t = 0;
  158. $selectedTotal = 0;
  159. // check to see whether player levels up
  160. if ($tCount === 0) {
  161. $setupBoard();
  162. }
  163. else {
  164. $targetVal = $genSum($level);
  165. $displaySum($targetVal);
  166. }
  167. }
  168. else if ($r === ">") {
  169. $('.selected').removeClass('selected');
  170. $selectedTotal = 0;
  171. $t = 0;
  172. }
  173. }
  174. else {
  175. $selectedTotal -= parseInt($this.html());
  176. $tCount++;
  177. }
  178. }
  179. });
  180. $('#restart').click(function () {
  181. $initGame();
  182. });
  183. $('a.how-to-play').click(function () {
  184. $('div.how-to-play').addClass('displayed');
  185. });
  186. $('#got-it').click(function () {
  187. $('.how-to-play').removeClass('displayed');
  188. });
  189. });

css代码:

  1. body {
  2. font-family: "Arvo";
  3. }
  4.  
  5. small {
  6. display: block;
  7. width: 700px;
  8. margin: 10px auto;
  9. text-align: center;
  10. color: #9ec7b3;
  11. }
  12.  
  13. a {
  14. color: #9ec7b3;
  15. }
  16. a:hover {
  17. color: #5dbc8e;
  18. }
  19.  
  20. span {
  21. display: inline-block;
  22. width: 130px;
  23. text-align: center;
  24. border-radius: 2px;
  25. }
  26.  
  27. button {
  28. display: inline-block;
  29. width: 140px;
  30. height: 40px;
  31. margin-top: 10px;
  32. padding: 10px;
  33. text-align: center;
  34. font-family: "Arvo";
  35. font-weight:;
  36. font-size: 120%;
  37. color: #fff;
  38. border: none;
  39. outline: none;
  40. border-radius: 2px;
  41. background-color: #9ec7b3;
  42. }
  43. button:hover {
  44. background-color: #5dbc8e;
  45. cursor: pointer;
  46. }
  47.  
  48. .container {
  49. width: 700px;
  50. height: 540px;
  51. margin: 0 auto;
  52. padding: 20px;
  53. background-color: #dfdfdf;
  54. border-radius: 2px;
  55. }
  56.  
  57. .right {
  58. width: 150px;
  59. height: 528px;
  60. float: right;
  61. text-align: center;
  62. }
  63.  
  64. .sum-display {
  65. height: 70px;
  66. padding: 5px;
  67. font-weight:;
  68. font-size: 3.5em;
  69. color: #fff;
  70. background-color: #303c36;
  71. }
  72.  
  73. .score-display {
  74. height: 40px;
  75. margin-top: 10px;
  76. padding: 15px 5px 0 5px;
  77. background-color: #fff;
  78. color: #303c36;
  79. }
  80. .score-display::before {
  81. content: "Score: ";
  82. font-weight:;
  83. }
  84.  
  85. .board {
  86. width: 528px;
  87. height: 528px;
  88. float: left;
  89. padding: 5px;
  90. background-color: #5dbc8e;
  91. border-radius: 2px;
  92. }
  93. .board:hover {
  94. cursor: pointer;
  95. }
  96.  
  97. .board div {
  98. display: block;
  99. height: 40px;
  100. width: 40px;
  101. float: left;
  102. margin: 2px;
  103. padding: 15px 10px 5px 10px;
  104. text-align: center;
  105. font-size: 150%;
  106. font-weight:;
  107. color: #5dbc8e;
  108. border: 1px solid #5dbc8e;
  109. border-radius: 2px;
  110. background-color: #fff;
  111. }
  112. .board div:hover {
  113. background-color: #dfdfdf;
  114. }
  115.  
  116. .board .selected {
  117. background-color: #303c36;
  118. }
  119. .board .selected:hover {
  120. background-color: #303c36;
  121. }
  122.  
  123. .board .dead {
  124. background-color: #9ec7b3;
  125. }
  126. .board .dead:hover {
  127. cursor: default;
  128. background-color: #9ec7b3;
  129. }
  130.  
  131. div.how-to-play {
  132. display: none;
  133. position: absolute;
  134. width: 700px;
  135. height: 540px;
  136. margin: 0 auto;
  137. padding: 10px;
  138. background-color: rgba(255, 255, 255, 0.8);
  139. color: #303c36;
  140. z-index:;
  141. }
  142. div.how-to-play.displayed {
  143. display: block;
  144. }
  145. div.how-to-play p {
  146. width: 60%;
  147. }
  148.  
  149. a.how-to-play {
  150. display: block;
  151. margin-top: 10px;
  152. }

转载请注明原文地址:http://www.cnblogs.com/liaohuolin/p/3920930.html

jquery开发的数字相加游戏(你能玩几分)的更多相关文章

  1. Cocos2d-x-Lua 开发一个简单的游戏(记数字步进白色块状)

    Cocos2d-x-Lua 开发一个简单的游戏(记数字步进白色块状) 本篇博客来给大家介绍怎样使用Lua这门语言来开发一个简单的小游戏-记数字踩白块. 游戏的流程是这种:在界面上生成5个数1~5字并显 ...

  2. JQuery变量数字相加的研究

    在 jquery中,一个变量和一个数字相加,期望得到1+2=3但是: eg: <input type="text" class="input_Num" i ...

  3. 使用HTML5开发Kinect体感游戏

    一.简介 我们要做的是怎样一款游戏? 在前不久成都TGC2016展会上,我们开发了一款<火影忍者手游>的体感游戏,主要模拟手游章节<九尾袭来 >,用户化身四代,与九尾进行对决, ...

  4. 洛谷P1118 数字三角形游戏

    洛谷1118 数字三角形游戏 题目描述 有这么一个游戏: 写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直 ...

  5. 一款纯css3实现的数字统计游戏

    今天给大家分享一款纯css3实现的数字统计游戏.这款游戏的规则的是将所有的数字相加等于72.这款游戏的数字按钮做得很美观,需要的时候可以借用下.一起看下效果图: 在线预览   源码下载 实现的代码. ...

  6. LeetCode.2-两个数字相加(Add Two Numbers)

    这是悦乐书的第340次更新,第364篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第1题(顺位题号是2).给定两个非空链表,表示两个非负整数. 数字以相反的顺序存储, ...

  7. JAVA开发类似冒险岛的游戏Part1

    JAVA开发类似冒险岛的游戏Part1 一.总结 二.JAVA开发类似冒险岛的游戏Part1 初学嘛) ,不过总的来说这个程序还是很有意思的.这里我重新再整理了一下,希望能帮助到其他想要开发类似程序的 ...

  8. Flask开发成语接龙游戏,闲来无事手机玩玩自己写的游戏吧!

    英语单词学习应用 周五发布的文章Flask开发天气查询软件,带你掌握pipenv的使用与手机Termux下的部署发布后,看到喜欢的人比较多.本来周末打算照着扇贝/极光单词,写一个英语单词自测工具.但苦 ...

  9. [LeetCode] Add Two Numbers 两个数字相加

    You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...

随机推荐

  1. C#文件夹权限操作工具类

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Sec ...

  2. 【Linux】字符转换命令expand

    这命令就是在将 [tab] 按键转成空格键: [root@www ~]# expand [-t] file 选项与参数: -t :后面可以接数字.一般来说,一个 tab 按键可以用 个空格键取代. 我 ...

  3. css ::selection 的妙用

    1.选中页面文字和元素时的背景颜色 ::selection { background: #25b864; color: #fff; } 2.不能选择页面内容(但可以拖拽内容进行复制.挺好玩的) ::s ...

  4. JQuery Tree插件——zTree

    Demo:点击下载 zTree 在线操作演示:http://www.ztree.me/v3/demo.php#_101

  5. apiDoc自动生成api文档

    在自定生成api文档方面以前都是使用swagger.json结合swagger工具来生成文档,偶然发现了apidoc这个生成api的工具,发现使用起来比swagger更加简单,下面整理一下使用过程: ...

  6. java方法的继承,覆盖与重载

    java中的继承使用extends关键字,在子类继承了父类之后将会获得父类的全部属性与方法(父类的构造器除外).如果在定义java类时没有显示定义她的父类,那么这个类默认将扩展java.lang.Ob ...

  7. js页面加载完后执行(document.onreadystatechange 和 document.readyState)

    js页面加载完后执行javascript(document.onreadystatechange 和 document.readyState) document.onreadystatechange ...

  8. vmware磁盘文件(vmdk)迁移

    原因:由于虚拟机安装时硬盘分配20G,随着虚拟机数据增多,磁盘占用也增多.磁盘总可用空间不能满足虚拟机数据增多.虽然虚拟机数据还没到20G,但磁盘总可用空间小,导致虚拟机继续运行时报空间不足. 解决办 ...

  9. 用bundler安装jeklly

    为什么要写这篇文章呢?因为官方的安装文档里,ruby的很多库没有说明怎么安装.所以需要重点说明一下.1.我的安装环境是vultr的16.04版的ubuntu.2.因为ruby的扩展库好多都是Gcc编译 ...

  10. Atitit 面试问题总结

    Atitit 面试问题总结 1. 面试约人阶段可以预先1俩分钟大概问下情况1 2. 自我介绍阶段1 3. 技术方面2 3.1. 界面方面2 3.2. Java 本身   了解spring mybati ...