zoukankan      html  css  js  c++  java
  • 单Js 的重力游戏开发

      最近在用看cocos的时候萌生的想法,单纯js实现重力原理。然后就做了一个这样的小游戏。姑且命名为《超级玛丽》!

      因为之前有人要我做超级玛丽。哈哈哈哈哈哈!这也算完成任务了吧。

      先说一下原理吧。原理就是嗖~嗖~嗖~。

      好了正经的说下:

      是否处于跳跃中

    self.isJump = false; 

    是否在地板上
    self.canJump = false;

    挑起的时间,时间越久上升速度越慢
    self.JumpTimes = 0;

    下降的时间,时间越久下降速度越块
    self.downTimes = 0;

    游戏运行时间周期(0~10)。判断地板块位置

    self.times = 0;
    //重力加速度大小 范围1~10,越大下降越快。挑起小
    self.d2 = 2;
    // 预设 地板块。可通过自定义函数设置
    self.floorArry = [100, 0, 50, 100, 170, 0, 100, 50, 50, 0, 100, 200, 150, 0, 75];

    跳: window.d2.jump 

    开始游戏:self.srartGame 

    结束游戏:self.endGame

    设置地板快生成函数: self.setFloorFunc

    开发者函数体 window.d2Init

     

    示例代码:

      1 <!DOCTYPE html>
      2 <html>
      3 
      4     <head>
      5         <meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
      6         <title>SupperML</title>
      7         <style type="text/css">
      8             body {
      9                 margin-right: auto;
     10                 margin-left: auto;
     11                 padding-left: auto;
     12                 padding-right: auto;
     13                 width: 500px;
     14                 height: 300px;
     15                 z-index: 1;
     16             }
     17             
     18             .floor {
     19                 width: 10px;
     20                 height: 10px;
     21                 float: left;
     22                 margin: 0;
     23                 z-index: 4;
     24                 background-color: darkgreen;
     25             }
     26             
     27             .WFloor {
     28                 width: 10px;
     29                 height: 10px;
     30                 float: left;
     31                 margin: 0;
     32                 z-index: 4;
     33             }
     34             
     35             #game_area {
     36                 margin-left: auto;
     37                 margin-right: auto;
     38                 position: absolute;
     39                 width: 500px;
     40                 height: 300px;
     41                 z-index: 3;
     42                 overflow: hidden;
     43             }
     44         </style>
     45         <script type="text/javascript">
     46             window.onload = function() {
     47                 var self = {};
     48                 //is jump;
     49                 self.isJump = false;
     50                 //gameObj on the floor;
     51                 self.canJump = false;
     52                 //jump time <14
     53                 self.JumpTimes = 0;
     54                 //down times 
     55                 self.downTimes = 0;
     56                 //down times 
     57                 self.times = 0;
     58                 //重力加速度
     59                 self.d2 = 2;
     60                 //width 10px*10,   array length 6,  0:no floor show:5 
     61                 self.floorArry = [100, 0, 50, 100, 170, 0, 100, 50, 50, 0, 100, 200, 150, 0, 75];
     62                 //strat game
     63                 var _Srart = function() {
     64                         _SetFloorElem();
     65                     },
     66                     //重力模拟
     67                     _D2Weight = function() {
     68                         var gameObj = document.getElementById('game_obj');
     69                         var floorObj1 = document.getElementById('2xy5');
     70                         var floorObj2 = document.getElementById('2xy6');
     71                         if (!self.isJump) {
     72                             if ((Math.abs((parseInt(gameObj.style.marginTop) + parseInt(gameObj.style.height)) - parseInt(floorObj1.style.marginTop)) < 10 + (2 * self.d2))) {
     73                                 self.canJump = true;
     74                                 self.downTimes = 0;
     75                                 gameObj.style.marginTop = parseInt(floorObj1.style.marginTop) - parseInt(gameObj.style.height) + "px";
     76                             } else {
     77                                 self.canJump = false;
     78                                 self.downTimes++;
     79                                 gameObj.style.marginTop = parseInt(gameObj.style.marginTop) + self.downTimes * self.d2 + 'px';
     80                                 if (parseInt(gameObj.style.marginTop) > 500) {
     81                                     self.endGame();
     82                                 }
     83                             }
     84                         } else {
     85                             if (20 < self.JumpTimes * self.d2) {
     86                                 self.JumpTimes = 0;
     87                                 self.isJump = false;
     88                                 self.downTimes = 0;
     89                                 return;
     90                             }
     91                             if (Math.abs(parseInt(floorObj1.style.marginTop) + 10 - parseInt(gameObj.style.marginTop)) < 5) {
     92                                 self.JumpTimes = 0;
     93                                 self.isJump = false;
     94                                 self.canJump = false;
     95                             } else {
     96                                 self.JumpTimes++;
     97                                 self.canJump = false;
     98                                 gameObj.style.marginTop = parseInt(gameObj.style.marginTop) - 20 + self.JumpTimes * self.d2 + 'px';
     99                             }
    100                         }
    101                     },
    102                     //设置地板元素
    103                     _SetFloorElem = function() {
    104                         self.times += 1;
    105                         if (self.times == 10) {
    106                             self.times = 0;
    107                         }
    108                         var index = 0;
    109                         for (var i2 = 0; i2 < 5; i2++) {
    110                             for (var j2 = 0; j2 < 10; j2++) {
    111                                 var oLi = document.getElementById(i2 + "xy" + j2);
    112                                 if (self.times + j2 < 10) {
    113                                     index = i2;
    114                                 } else {
    115                                     index = i2 + 1;
    116                                 }
    117                                 if (self.floorArry[index]) {
    118                                     oLi.style.display = "floor";
    119                                     oLi.style.marginTop = self.floorArry[index] + "px";
    120                                 } else {
    121                                     oLi.style.className = "WFloor";
    122                                     oLi.style.marginTop = 5000 + "px";
    123                                 }
    124                             }
    125                         }
    126                     },
    127                     //初始化游戏元素
    128                     _InitGame = function() {
    129                         var oFrag = document.createDocumentFragment();
    130                         for (var i = 0; i < 5; i++) {
    131                             for (var j = 0; j < 10; j++) {
    132                                 var oLi = document.createElement("div");
    133                                 oLi.id = i + "xy" + j;
    134                                 oLi.className = 'floor';
    135                                 //oLi.style.marginLeft = i * 100 + j*10 + "px";
    136                                 oFrag.appendChild(oLi);
    137                             }
    138                         }
    139                         document.getElementById("game_area").appendChild(oFrag);
    140                         document.onkeyup = function(event) {
    141                             var e = event || window.event;
    142                             var keyCode = e.keyCode || e.which;
    143                             switch (keyCode) {
    144                                 case 32:
    145                                     self.jump();
    146                                     break;
    147                                 default:
    148                                     break;
    149                             }
    150                         }
    151                         setInterval(_setFloor, 1000);
    152                     },
    153                     //设置地板位置
    154                     _setFloor = function() {
    155                         var top = self.func ? self.func() : 200;
    156                         if (top != 0 && ((self.floorArry[19] - self.floorArry) > 200 / self.d2)) {
    157                             top = self.floorArry[19] - 200 / self.d2;
    158                         }
    159                         self.floorArry.splice(0, 1);
    160                         self.floorArry.push(top);
    161                     };
    162                 var gameRole = document.getElementsByClassName('gameObj');
    163                 //
    164                 self.jump = function() {
    165                         if (self.canJump) {
    166                             self.isJump = true;
    167                             self.JumpTimes = 0;
    168                         }
    169                     }
    170                     //开始游戏
    171                 self.srartGame = function() {
    172                         if (self.timer) {
    173                             return;
    174                         }
    175                         _InitGame();
    176                         self.sTime = new Date();
    177                         self.timer = setInterval(_Srart, 100);
    178                         self.D2Weight = setInterval(_D2Weight, 100);
    179 
    180                     }
    181                     //游戏结束
    182                 self.endGame = function() {
    183                         alert((Date.now() - self.sTime.getTime()) / 1000 + 's');
    184                         self.sTime
    185                         clearInterval(self.timer);
    186                         clearInterval(self.D2Weight);
    187                         location.reload();
    188                     }
    189                     //设置地板数据生成函数
    190                 self.setFloorFunc = function(func) {
    191                     self.func = func;
    192                 }
    193                 document.getElementById('jump').onclick = self.jump;
    194                 document.getElementById('start').onclick = self.srartGame;
    195                 window.d2 = self;
    196                 window.d2Init && window.d2Init();
    197             };
    198         </script>
    199     </head>
    200 
    201     <body>
    202         <div id="game_area">
    203             <div id="game_obj" style="margin-left: 250px; margin-top:10px; position: absolute; z-index: 1;  17px; height: 20px; background-color: blueviolet;">69</div>
    204             <button id="start" style="margin-left: 50px; margin-top:200px; position: absolute; z-index: 1;">Start</button>
    205             <button id="jump" style="margin-left: 400px; margin-top:200px; position: absolute; z-index: 1;">Jump</button>
    206         </div>
    207     </body>
    208     <script type="text/javascript">
    209         window.d2Init = function() {
    210             window.d2.setFloorFunc(
    211                 function() {
    212                     return window.d2.floorArry[0];
    213                 }
    214             )
    215 
    216         }
    217     </script>
    218 
    219 </html>
    View Code

      

    一个鸡蛋去茶馆喝茶,结果它变成了茶叶蛋;
    一个鸡蛋跑去松花江游泳,结果它变成了松花蛋;
    一有个鸡蛋跑到了山东,结果变成了鲁(卤)蛋;
    一个鸡蛋无家可归,结果它变成了野鸡蛋;
    一个鸡蛋在路上不小心摔了一跤,倒在地上,结果变成了导弹;
    一个鸡蛋跑到人家院子里去了,结果变成了原子弹;
    一个鸡蛋跑到青藏高原,结果变成了氢弹;
    一个鸡蛋生病了,结果变成了坏蛋;
    一个鸡蛋嫁人了,结果变成了混蛋;
    一个鸡蛋跑到河里游泳,结果变成了核弹;
    一个鸡蛋跑到花丛中去了,结果变成了花旦;
    一个鸡蛋骑着一匹马,拿着一把刀,原来他是刀马旦;
    一个鸡蛋是母的,长的很丑,结果就变成了恐龙蛋;
    一个鸡蛋是公的,他老婆在外面和别的鸡蛋通*,结果他变成了王八蛋;
    一个鸡蛋……
    哈....哈哈.....哈哈哈........哈哈哈哈.....
  • 相关阅读:
    ABAP语法篇1 DATA新用法
    SAP RFC和BAPI
    SAP标准屏幕中字段描述增强
    HoloLens开发手记 - 使用Windows设备控制台 Using Windows Device Portal
    HoloLens开发手记
    HoloLens开发手记
    HoloLens开发手记
    HoloLens开发手记
    HoloLens开发手记
    HoloLens开发手记
  • 原文地址:https://www.cnblogs.com/zwcai/p/6781650.html
Copyright © 2011-2022 走看看