zoukankan      html  css  js  c++  java
  • 《HTML5经典坦克大战》游戏(代码)

      前几天粗略地学了HTML5,然后就用它写了一个《经典坦克大战》游戏。

      现在想分享一下我写的代码,写得不好请大家多多指教。

      给大家推荐一个网站,这个网站是为大学生而做,为方便学习编程的同学而做的。(淘课学院)http://www.taokeschool.com/

      

    《经典坦克大战》游戏截图

     1 <!DOCTYPE html>
     2 <html xmlns="http://www.w3.org/1999/xhtml">
     3 <head>
     4     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     5     <meta charset="utf-8" />
     6     <title>HTML5经典坦克大战</title>
     7     <script src="jquery-1.10.2.min.js"></script>
     8     <style type="text/css">
     9         body {
    10             margin: 0px 0px;
    11             padding: 0px 0px;
    12         }
    13         .con {
    14             margin-left: auto;
    15             margin-right: auto;
    16             width: 650px;
    17         }
    18     </style>
    19 </head>
    20 <body onkeydown="getCommand()">
    21     <div class="con">
    22         <h1>HTML5——经典坦克大战</h1>
    23 
    24         <canvas id="tankmap" width="600" height="500" style="background-color:#000;"></canvas>
    25         <div style="margin-top:20px;font-weight:bolder;font-size:20px;color:red;">
    26             W、S、A、D分别控制:上、下、左、右;J是发子弹。暂时不支持Firefox浏览器。
    27         </div>
    28     </div>
    29 
    30     <script type="text/javascript">
    31         var gameover = false;
    32         var verygood = false;
    33         var canH = document.getElementById("tankmap");
    34         var cxt = canH.getContext("2d");
    35 
    36         var bomb3 = new Image();
    37         bomb3.src = "images/bomb_3.gif";
    38         var bomb2 = new Image();
    39         bomb2.src = "images/bomb_2.gif";
    40         var bomb1 = new Image();
    41         bomb1.src = "images/bomb_1.gif";
    42 
    43         var born1 = new Image();
    44         born1.src = "images/born1.gif";
    45         var born2 = new Image();
    46         born2.src = "images/born2.gif";
    47         var born3 = new Image();
    48         born3.src = "images/born3.gif";
    49         var born4 = new Image();
    50         born4.src = "images/born4.gif";
    51 
    52         var buBoImg = new Image();
    53         buBoImg.src = "images/blast1.gif";
    54 
    55         var base1 = new Image();
    56         base1.src = "images/symbol.gif";
    57         var base2 = new Image();
    58         base2.src = "images/destory.gif";
    59 
    60     </script>
    61     <script src="Draw.js"></script>
    62     <script src="opera_js.js"></script>
    63 </body>
    64 </html>
    65 
    66 HTML页
    HTML页
       1 ///玩家坦克颜色(机身颜色,盖子颜色)
       2 var heroColor1 = new Array("#ba9658", "#fef26e");
       3 var heroColor2 = new Array("#00a2b5", "#00fefe");
       4 
       5 ///敌人坦克颜色(机身颜色,盖子颜色)
       6 var enemyColor1 = new Array("#006f43", "#43b387");
       7 var enemyColor2 = new Array("#f00", "#e34444");
       8 var enemyColor3 = new Array("#fa02e6", "#d45bca");
       9 var enemyColor4 = new Array("#0600fd", "#3531c4");
      10 
      11 
      12 ///敌人子弹数组
      13 var enemyBullets = new Array(null, null, null, null, null, null, null, null, null, null,
      14                              null, null, null, null, null, null, null, null, null, null);
      15 ///敌人子弹爆炸数组
      16 var enemyBulletBombs = new Array(null, null, null, null, null, null, null, null, null, null,
      17                              null, null, null, null, null, null, null, null, null, null);
      18 ///定义玩家子弹数组
      19 var hero1bullet = null;
      20 var hero1bulletBomb = null;
      21 
      22 ////出身效果
      23 function Born(x, y) {
      24     this.x = x;
      25     this.y = y;
      26     this.time = 0;
      27     this.born = true;
      28 
      29 
      30     this.drawBorn = function drawBorn() {
      31         if (this.time <= 1) {
      32             cxt.drawImage(born1, this.x, this.y, 50, 50);
      33         }
      34         if (this.time > 1 && this.time <= 3) {
      35             cxt.drawImage(born2, this.x, this.y, 50, 50);
      36         }
      37         if (this.time >= 4 && this.time <= 5) {
      38             cxt.drawImage(born3, this.x, this.y, 50, 50);
      39         }
      40         if (this.time >= 6 && this.time <= 7) {
      41             cxt.drawImage(born4, this.x, this.y, 50, 50);
      42         }
      43         if (this.time >= 8 && this.time <= 9) {
      44             cxt.drawImage(born2, this.x, this.y, 50, 50);
      45         }
      46         if (this.time >= 10 && this.time <= 11) {
      47             cxt.drawImage(born3, this.x, this.y, 50, 50);
      48         }
      49         if (this.time >= 12 && this.time <= 13) {
      50             cxt.drawImage(born4, this.x, this.y, 50, 50);
      51         }
      52 
      53         this.time++;
      54         if (this.time >= 13) {
      55             this.born = false;
      56             this.time = 0;
      57         }
      58     }
      59 }
      60 
      61 ////坦克类
      62 function Tank(x, y, speed, direct, tankcolor, islive)
      63 {
      64     this.x = x;
      65     this.y = y;
      66     this.speed = speed;
      67     this.direct = direct;
      68     this.tankcolor = tankcolor;
      69     this.islive = islive;
      70 
      71     this.moveUp = function ()
      72     {
      73         this.y = this.y - this.speed;
      74         if (this.y <= 0)
      75         {
      76             this.y = 0;
      77         }
      78         this.direct = 0;
      79     }
      80     this.moveDown = function ()
      81     {
      82         this.y = this.y + this.speed;
      83         if (this.y >= 450)
      84         {
      85             this.y = 450;
      86         }
      87         this.direct = 2;
      88     }
      89     this.moveLeft = function ()
      90     {
      91         this.x = this.x - this.speed;
      92         if (this.x <= 0)
      93         {
      94             this.x = 0;
      95         }
      96         this.direct = 3;
      97     }
      98     this.moveRight = function ()
      99     {
     100         this.x = this.x + this.speed;
     101         if (this.x >= 550)
     102         {
     103             this.x = 550;
     104         }
     105         this.direct = 1;
     106     }
     107 }
     108 
     109 ///玩家坦克类,继承于坦克类(Tank)
     110 function Hero(x, y, speed, direct, tankcolor, islive)
     111 {
     112     this.tank = Tank;
     113     this.tank(x, y, speed, direct, tankcolor, islive);
     114 
     115 
     116 
     117     this.attackEnemy = function ()
     118     {
     119         if (hero1bullet != null)
     120         {
     121             return;
     122         }
     123         switch (this.direct)
     124         {
     125             case 0:
     126                 hero1bullet = new Bullet(this.x + 24, this.y, 4, 0);
     127                 break;
     128             case 1:
     129                 hero1bullet = new Bullet(this.x + 50, this.y + 24, 4, 1);
     130                 break;
     131             case 2:
     132                 hero1bullet = new Bullet(this.x + 24, this.y + 50, 4, 2);
     133                 break;
     134             case 3:
     135                 hero1bullet = new Bullet(this.x, this.y + 24, 4, 3);
     136                 break;
     137         }
     138         hero1bullet.time = window.setInterval("hero1bullet.run('h')", 20);
     139     }
     140 }
     141 ///敌人坦克类,继承坦克类(Tank)
     142 function Enemy(x, y, speed, direct, tankcolor, islive)
     143 {
     144     this.tank = Tank;
     145     this.tank(x, y, speed, direct, tankcolor, islive);
     146     ///敌人移动
     147     this.run = function ()
     148     {
     149         if (this.islive == 0)
     150         {
     151             return;
     152         }
     153         this.changeDir();
     154         switch (this.direct)
     155         {
     156             case 0:
     157                 if (this.y <= 0)
     158                 {
     159                     this.beyondChange();
     160                 }
     161                 if (!this.enemyTankCollision(this)) {
     162                     this.moveUp();
     163                 }
     164                 break;
     165             case 1:
     166                 if (this.x >= 550)
     167                 {
     168                     this.beyondChange();
     169                 }
     170                 if (!this.enemyTankCollision(this))
     171                 {
     172                     this.moveRight();
     173                 }
     174                 break;
     175             case 2:
     176                 if (this.y >= 450)
     177                 {
     178                     this.beyondChange();
     179                 }
     180                 if (!this.enemyTankCollision(this)) {
     181                     this.moveDown();
     182                 }
     183                 break;
     184             case 3:
     185                 if (this.x <= 0)
     186                 {
     187                     this.beyondChange();
     188                 }
     189                 if (!this.enemyTankCollision(this)) {
     190                     this.moveLeft();
     191                 }
     192                 break;
     193         }
     194     }
     195     this.changeDir = function ()
     196     {
     197         var dri_num = Math.round(Math.random() * 99);
     198         if (dri_num < 4) {
     199             this.direct = Math.round(Math.random() * 3);
     200         }
     201     }
     202     this.beyondChange = function () {
     203         this.direct = Math.round(Math.random() * 3);
     204     }
     205 
     206     ///敌人攻击
     207     this.attackEnemy = function (en)
     208     {
     209         if (enemyBullets[en] != null)
     210         {
     211             return;
     212         }
     213         if ((Math.round(Math.random() * 99)) < 4)
     214         {
     215             switch (this.direct) {
     216                 case 0:
     217                     enemyBullets[en] = new Bullet(this.x + 24, this.y, 4, 0);
     218                     break;
     219                 case 1:
     220                     enemyBullets[en] = new Bullet(this.x + 50, this.y + 24, 4, 1);
     221                     break;
     222                 case 2:
     223                     enemyBullets[en] = new Bullet(this.x + 24, this.y + 50, 4, 2);
     224                     break;
     225                 case 3:
     226                     enemyBullets[en] = new Bullet(this.x, this.y + 24, 4, 3);
     227                     break;
     228             }
     229 
     230             enemyBullets[en].time = window.setInterval("enemyBullets[" + en + "].run(" + en + ")", 20);
     231         }
     232     }
     233     ///敌人坦克碰撞
     234     this.enemyTankCollision = function (enemy1)
     235     {
     236 
     237         var enemy2 = null;
     238         {
     239             for (var en2 = 0; en2 < enemys.length; en2++)
     240             {
     241                 enemy2 = enemys[en2];
     242                 if (enemy2 != null && enemy2.islive != 0)
     243                 {
     244                     switch (enemy1.direct) {
     245                         case 0:
     246                             if ((hero1 != null && hero1.islive != 0) && (enemy1.x > hero1.x - 50) && (enemy1.x < hero1.x + 50) &&
     247                                 ((enemy1.y == hero1.y + 47) || (enemy1.y == hero1.y + 50) || (enemy1.y == hero1.y + 49) || (enemy1.y == hero1.y + 48))) {
     248                                 return true;
     249                             }
     250                             if ((enemy1.x > enemy2.x - 50) && (enemy1.x < enemy2.x + 50) &&
     251                                 ((enemy1.y == enemy2.y + 47) || (enemy1.y == enemy2.y + 50) || (enemy1.y == enemy2.y + 49) || (enemy1.y == enemy2.y + 48))) {
     252                                 return true;
     253                             }
     254 
     255                             break;
     256                         case 1:
     257                             if ((hero1 != null && hero1.islive != 0) && (enemy1.y > hero1.y - 50) && (enemy1.y < hero1.y + 50) &&
     258                                 ((enemy1.x + 47 == hero1.x) || (enemy1.x + 50 == hero1.x) || (enemy1.x + 49 == hero1.x) || (enemy1.x + 48 == hero1.x))) {
     259                                 return true;
     260                             }
     261                             if ((enemy1.y > enemy2.y - 50) && (enemy1.y < enemy2.y + 50) &&
     262                                 ((enemy1.x + 47 == enemy2.x) || (enemy1.x + 50 == enemy2.x) || (enemy1.x + 49 == enemy2.x) || (enemy1.x + 48 == enemy2.x))) {
     263                                 return true;
     264                             }
     265                             break;
     266                         case 2:
     267                             if ((hero1 != null && hero1.islive != 0) && (enemy1.x > hero1.x - 50) && (enemy1.x < hero1.x + 50) &&
     268                                 ((enemy1.y == hero1.y - 47) || (enemy1.y == hero1.y - 50) || (enemy1.y == hero1.y - 49) || (enemy1.y == hero1.y - 48))) {
     269                                 return true;
     270                             }
     271                             if ((enemy1.x > enemy2.x - 50) && (enemy1.x < enemy2.x + 50) &&
     272                                 ((enemy1.y == enemy2.y - 47) || (enemy1.y == enemy2.y - 50) || (enemy1.y == enemy2.y - 49) || (enemy1.y == enemy2.y - 48))) {
     273                                 return true;
     274                             }
     275                             break;
     276                         case 3:
     277                             if ((hero1 != null && hero1.islive != 0) && (enemy1.y > hero1.y - 50) && (enemy1.y < hero1.y + 50) &&
     278                                 ((enemy1.x - 47 == hero1.x) || (enemy1.x - 50 == hero1.x) || (enemy1.x - 49 == hero1.x) || (enemy1.x - 48 == hero1.x))) {
     279                                 return true;
     280                             }
     281                             if ((enemy1.y > enemy2.y - 50) && (enemy1.y < enemy2.y + 50) &&
     282                                 ((enemy1.x - 47 == enemy2.x) || (enemy1.x - 50 == enemy2.x) || (enemy1.x - 49 == enemy2.x) || (enemy1.x - 48 == enemy2.x))) {
     283                                 return true;
     284                             }
     285                             break;
     286                     }
     287                 }
     288             }
     289         }
     290 
     291         ///敌人坦克与阻碍物之间碰撞
     292         var hamper = null;
     293         for (var ha = 0; ha < hampers.length; ha++)
     294         {
     295             hamper = hampers[ha];
     296             if (hamper != null)
     297             {
     298                 switch (hampers[ha].style) {
     299                     case 1:
     300                         switch (enemy1.direct) {
     301                             case 0:
     302                                 if ((enemy1.x >= hamper.x - 50) && (enemy1.x <= hamper.x + 17) &&
     303                                     ((enemy1.y == hamper.y + 7) || (enemy1.y == hamper.y + 8) || (enemy1.y == hamper.y + 9) || (enemy1.y == hamper.y + 10))) {
     304                                     return true;
     305                                 }
     306                                 break;
     307                             case 1:
     308                                 if ((enemy1.y > hamper.y - 50) && (enemy1.y < hamper.y + 10) &&
     309                                     ((enemy1.x + 50 == hamper.x) || (enemy1.x + 49 == hamper.x) || (enemy1.x + 48 == hamper.x) || (enemy1.x + 47 == hamper.x))) {
     310                                     return true;
     311                                 }
     312                                 break;
     313                             case 2:
     314                                 if ((enemy1.x > hamper.x - 50) && (enemy1.x < hamper.x + 17) &&
     315                                     ((enemy1.y + 50 == hamper.y) || (enemy1.y + 49 == hamper.y) || (enemy1.y + 48 == hamper.y) || (enemy1.y + 47 == hamper.y))) {
     316                                     return true;
     317                                 }
     318                                 break;
     319                             case 3:
     320                                 if ((enemy1.y > hamper.y - 50) && (enemy1.y < hamper.y + 10) &&
     321                                     ((enemy1.x == hamper.x + 17) || (enemy1.x == hamper.x + 16) || (enemy1.x == hamper.x + 15) || (enemy1.x == hamper.x + 14))) {
     322                                     return true;
     323                                 }
     324                                 break;
     325                         }
     326                         break;
     327                     case 2:
     328                         switch (enemy1.direct) {
     329                             case 0:
     330                                 if ((enemy1.x >= hamper.x - 50) && (enemy1.x <= hamper.x + 17) &&
     331                                     ((enemy1.y == hamper.y + 14) || (enemy1.y == hamper.y + 15) || (enemy1.y == hamper.y + 16) || (enemy1.y == hamper.y + 17))) {
     332                                     return true;
     333                                 }
     334                                 break;
     335                             case 1:
     336                                 if ((enemy1.y > hamper.y - 50) && (enemy1.y < hamper.y + 10) &&
     337                                     ((enemy1.x + 50 == hamper.x) || (enemy1.x + 49 == hamper.x) || (enemy1.x + 48 == hamper.x) || (enemy1.x + 47 == hamper.x))) {
     338                                     return true;
     339                                 }
     340                                 break;
     341                             case 2:
     342                                 if ((enemy1.x > hamper.x - 50) && (enemy1.x < hamper.x + 17) &&
     343                                     ((enemy1.y + 50 == hamper.y) || (enemy1.y + 49 == hamper.y) || (enemy1.y + 48 == hamper.y) || (enemy1.y + 47 == hamper.y))) {
     344                                     return true;
     345                                 }
     346                                 break;
     347                             case 3:
     348                                 if ((enemy1.y > hamper.y - 50) && (enemy1.y < hamper.y + 10) &&
     349                                     ((enemy1.x == hamper.x + 17) || (enemy1.x == hamper.x + 16) || (enemy1.x == hamper.x + 15) || (enemy1.x == hamper.x + 14))) {
     350                                     return true;
     351                                 }
     352                                 break;
     353                         }
     354                         break;
     355                     case 3:
     356                         break;
     357                     case 4:
     358                         break;
     359                 }
     360             }
     361         }
     362 
     363     }
     364 
     365 }
     366 
     367 ///子弹类
     368 function Bullet(x, y, speed, direct)
     369 {
     370     this.x = x;
     371     this.y = y;
     372     this.speed = speed;
     373     this.direct = direct;
     374     this.time = null;
     375     this.islive = true;
     376     this.run = function run(whotank)
     377     {
     378         //$("#tx").html(heroBullets[0].x);
     379         //$("#ty").html(heroBullets[0].y);
     380 
     381         if ((this.x >= 600 || this.x <= 0 || this.y >= 500 || this.y <= 0) && this.islive) {
     382             window.clearInterval(this.time);
     383             this.islive = false;
     384             if (whotank == "h") {
     385                 hero1bullet = null;
     386                 switch (this.direct) {
     387                     case 0:
     388                         hero1bulletBomb = new bulletBomb(this.x - 68, this.y - 50);
     389                         break;
     390                     case 1:
     391                         hero1bulletBomb = new bulletBomb(this.x - 68, this.y - 54);
     392                         break;
     393                     case 2:
     394                         hero1bulletBomb = new bulletBomb(this.x - 68, this.y - 54);
     395                         break;
     396                     case 3:
     397                         hero1bulletBomb = new bulletBomb(this.x - 68, this.y - 52);
     398                         break;
     399                 }
     400                 //alert("00");
     401             }
     402             else {
     403                 enemyBullets[whotank] = null;
     404                 switch (this.direct)
     405                 {
     406                     case 0:
     407                         enemyBulletBombs[whotank] = new bulletBomb(this.x - 68, this.y - 50);
     408                         break;
     409                     case 1:
     410                         enemyBulletBombs[whotank] = new bulletBomb(this.x - 68, this.y - 54);
     411                         break;
     412                     case 2:
     413                         enemyBulletBombs[whotank] = new bulletBomb(this.x - 68, this.y - 54);
     414                         break;
     415                     case 3:
     416                         enemyBulletBombs[whotank] = new bulletBomb(this.x - 68, this.y - 52);
     417                         break;
     418                 }
     419                 
     420             }
     421 
     422         }
     423         else {
     424             switch (this.direct) {
     425                 case 0:
     426                     this.y = this.y - this.speed;
     427                     break;
     428                 case 1:
     429                     this.x = this.x + this.speed;
     430                     break;
     431                 case 2:
     432                     this.y = this.y + this.speed;
     433                     break;
     434                 case 3:
     435                     this.x = this.x - this.speed;
     436                     break;
     437             }
     438         }
     439 
     440     }
     441 }
     442 
     443 ////画坦克函数
     444 function DrawTank(tank)
     445 {
     446     switch (tank.direct)
     447     {
     448         case 0:
     449         case 2:
     450             ///画玩家坦克,坦克尺寸为50*50
     451             cxt.beginPath();
     452             cxt.fillStyle = tank.tankcolor[0];
     453             cxt.fillRect(tank.x, tank.y, 11, 50);                     //画玩家坦克轮子
     454             cxt.fillRect(tank.x + 12, tank.y + 10, 26, 30);           //中间部分
     455             cxt.fillRect(tank.x + 39, tank.y, 11, 50);              //画玩家坦克轮子
     456             ///画坦克盖子
     457             cxt.fillStyle = tank.tankcolor[1];
     458             cxt.arc(tank.x + 25, tank.y + 25, 10, 360, 0, true);
     459             cxt.fill();
     460             cxt.closePath();
     461             ////画炮口(炮口2px)
     462             cxt.beginPath();                                    //开始一条新的路径,或重置当前的路径。
     463             cxt.strokeStyle = tank.tankcolor[1];                        //线条的颜色
     464             cxt.lineWidth = 2;                                  //线条的宽度(炮口2px)
     465             cxt.moveTo(tank.x + 25, tank.y + 25);                 //炮口开始位置
     466             if (tank.direct == 0) {
     467                 cxt.lineTo(tank.x + 25, tank.y + 0);                  //炮口结束位置
     468             }
     469             else if (tank.direct == 2) {
     470                 cxt.lineTo(tank.x + 25, tank.y + 50);                  //炮口结束位置
     471             }
     472 
     473             cxt.closePath();                                    //创建从当前点到开始点的路径。
     474             cxt.stroke();                                       //画线
     475             break;
     476         case 1:
     477         case 3:
     478             ///画玩家坦克,坦克尺寸为50*50
     479             cxt.beginPath();
     480             cxt.fillStyle = tank.tankcolor[0];
     481             cxt.fillRect(tank.x, tank.y, 50, 11);                     //画玩家坦克轮子
     482             cxt.fillRect(tank.x + 10, tank.y + 12, 30, 26);           //中间部分
     483             cxt.fillRect(tank.x, tank.y + 39, 50, 11);              //画玩家坦克轮子
     484             ///画坦克盖子
     485             cxt.fillStyle = tank.tankcolor[1];
     486             cxt.arc(tank.x + 25, tank.y + 25, 10, 360, 0, true);
     487             cxt.fill();
     488             cxt.closePath();
     489             ////画炮口(炮口2px)
     490             cxt.beginPath();                                    //开始一条新的路径,或重置当前的路径。
     491             cxt.strokeStyle = tank.tankcolor[1];                        //线条的颜色
     492             cxt.lineWidth = 2;                                  //线条的宽度(炮口2px)
     493             cxt.moveTo(tank.x + 25, tank.y + 25);                 //炮口开始位置
     494             if (tank.direct == 1) {
     495                 cxt.lineTo(tank.x + 50, tank.y + 25);                  //炮口结束位置
     496             }
     497             else if (tank.direct == 3) {
     498                 cxt.lineTo(tank.x, tank.y + 25);                  //炮口结束位置
     499             }
     500             cxt.closePath();                                    //创建从当前点到开始点的路径。
     501             cxt.stroke();                                       //画线
     502             break;
     503     }
     504 }
     505 ///画出阻碍物(地图)、(style有4个值,1表示砖头、2表示钢铁、3表示草地、4表示河流)
     506 function Hamper(x, y, style)
     507 {
     508     this.x = x;
     509     this.y = y;
     510     this.style = style;
     511     //this.islive = true;
     512     this.Draw = function ()
     513     {
     514         switch (this.style)
     515         {
     516             case 1:
     517                 cxt.fillStyle = "#bc5018";
     518                 cxt.fillRect(this.x, this.y, 17, 10);
     519                 break;
     520             case 2:
     521                 cxt.fillStyle = "#ffffff";
     522                 cxt.fillRect(this.x, this.y, 17, 17);
     523                 break;
     524             case 3:
     525                 break;
     526             case 4:
     527                 break;
     528         }
     529     }
     530 }
     531 
     532 ///画出子弹
     533 function DrawBullet()
     534 {
     535     var enemyBullet = null;
     536     cxt.fillStyle = "#ba9658";
     537     for (var en = 0; en < enemyBullets.length; en++) {
     538         enemyBullet = enemyBullets[en];
     539         if (enemyBullet != null && enemyBullet.islive) {
     540             switch (enemyBullet.direct) {
     541                 case 0:
     542                 case 2:
     543                     cxt.fillRect(enemyBullet.x, enemyBullet.y, 2, 3);
     544                     break;
     545                 case 1:
     546                 case 3:
     547                     cxt.fillRect(enemyBullet.x, enemyBullet.y, 3, 2);
     548                     break;
     549             }
     550         }
     551     }
     552     if (hero1bullet != null && hero1bullet.islive) {
     553         switch (hero1bullet.direct) {
     554             case 0:
     555             case 2:
     556                 cxt.fillRect(hero1bullet.x, hero1bullet.y, 2, 3);
     557                 break;
     558             case 1:
     559             case 3:
     560                 cxt.fillRect(hero1bullet.x, hero1bullet.y, 3, 2);
     561                 break;
     562         }
     563     }
     564 
     565 }
     566 
     567 ////画出基地
     568 function DrawSymbol()
     569 {
     570     cxt.beginPath();
     571     if (gameover) {
     572         cxt.drawImage(base2, 280, 450, 50, 50);
     573     }
     574     else {
     575         cxt.drawImage(base1, 280, 450, 50, 50);
     576     }
     577     cxt.closePath();
     578 }
     579 
     580 ////判断子弹是否打中坦克
     581 function hitTank()
     582 {
     583     ////敌人子弹是否打中玩家坦克
     584     for (var eb = 0; eb < enemyBullets.length; eb++)
     585     {
     586         if (hero1 != null && hero1.islive != 0 && enemyBullets[eb] != null) {
     587             switch (enemyBullets[eb].direct) {
     588                 case 0:
     589                     if ((enemyBullets[eb].x + 2 >= hero1.x) && (enemyBullets[eb].x + 2 <= hero1.x + 50) && (enemyBullets[eb].y + 3 <= hero1.y + 50) && (enemyBullets[eb].y + 3 >= hero1.y)) {
     590                         enemyBullets[eb].islive = false;
     591                         window.clearInterval(enemyBullets[eb].time);
     592                         enemyBullets[eb] = null;
     593                         hero1.islive--;
     594                     }
     595                     break;
     596                 case 1:
     597                     if ((enemyBullets[eb].x + 3 >= hero1.x) && (enemyBullets[eb].x + 3 <= hero1.x + 50) && (enemyBullets[eb].y + 2 >= hero1.y) && (enemyBullets[eb].y + 2 <= hero1.y + 50)) {
     598                         enemyBullets[eb].islive = false;
     599                         window.clearInterval(enemyBullets[eb].time);
     600                         enemyBullets[eb] = null;
     601                         hero1.islive--;
     602                     }
     603                     break;
     604                 case 2:
     605                     if ((enemyBullets[eb].x + 2 >= hero1.x) && (enemyBullets[eb].x + 2 <= hero1.x + 50) && (enemyBullets[eb].y + 3 <= hero1.y + 50) && (enemyBullets[eb].y + 3 >= hero1.y)) {
     606                         enemyBullets[eb].islive = false;
     607                         window.clearInterval(enemyBullets[eb].time);
     608                         enemyBullets[eb] = null;
     609                         hero1.islive--;
     610                     }
     611                     break;
     612                 case 3:
     613                     if ((enemyBullets[eb].x <= hero1.x + 50) && (enemyBullets[eb].x >= hero1.x) && (enemyBullets[eb].y + 2 >= hero1.y) && (enemyBullets[eb].y + 2 <= hero1.y + 50)) {
     614                         enemyBullets[eb].islive = false;
     615                         window.clearInterval(enemyBullets[eb].time);
     616                         enemyBullets[eb] = null;
     617                         hero1.islive--;
     618                     }
     619                     break;
     620             }
     621             if (hero1.islive == 0) {
     622                 var tankbomb = new TankBomb(hero1.x, hero1.y);
     623                 tankbombs.push(tankbomb);
     624                 hero1 = null;
     625                 if (hero1 == null) {
     626                     gameover = true;
     627                 }
     628             }
     629         }
     630     }
     631     ////敌人子弹是否打中阻碍物
     632     var enemybullet = null;
     633     var hamper = null;
     634     for (var eb = 0; eb < enemyBullets.length; eb++)
     635     {
     636         enemybullet = enemyBullets[eb];
     637         if (enemybullet != null)
     638         {
     639             for (var ha = 0; ha < hampers.length; ha++) {
     640                 hamper = hampers[ha];
     641                 if (hamper != null && enemybullet != null) {
     642                     switch (enemybullet.direct) {
     643                         case 0:
     644                             switch (hamper.style) {
     645                                 case 1:
     646                                     if ((enemybullet.x >= hamper.x - 1) && (enemybullet.x <= hamper.x + 17) &&
     647                                         (enemybullet.y <= hamper.y + 10) && (enemybullet.y >= hamper.y)) {
     648                                         enemyBullets[eb].islive = false;
     649                                         window.clearInterval(enemyBullets[eb].time);
     650                                         enemyBulletBombs[eb] = new bulletBomb(enemybullet.x - 68, enemybullet.y - 50);
     651                                         enemyBullets[eb] = null;
     652                                         hampers[ha] = null;
     653                                     }
     654                                     break;
     655                                 case 2:
     656                                     if ((enemybullet.x >= hamper.x - 1) && (enemybullet.x <= hamper.x + 17) &&
     657                                         (enemybullet.y <= hamper.y + 20) && (enemybullet.y >= hamper.y)) {
     658                                         enemyBullets[eb].islive = false;
     659                                         window.clearInterval(enemyBullets[eb].time);
     660                                         enemyBulletBombs[eb] = new bulletBomb(enemybullet.x - 68, enemybullet.y - 50);
     661                                         enemyBullets[eb] = null;
     662                                     }
     663                                     break;
     664 
     665                             }
     666 
     667                             break;
     668                         case 1:
     669                             switch (hamper.style) {
     670                                 case 1:
     671                                     if ((enemybullet.x >= hamper.x) && (enemybullet.x <= hamper.x + 17) &&
     672                                         (enemybullet.y <= hamper.y + 10) && (enemybullet.y >= hamper.y - 1)) {
     673                                         enemyBullets[eb].islive = false;
     674                                         window.clearInterval(enemyBullets[eb].time);
     675                                         enemyBulletBombs[eb] = new bulletBomb(enemybullet.x - 68, enemybullet.y - 50);
     676                                         enemyBullets[eb] = null;
     677                                         hampers[ha] = null;
     678                                     }
     679                                     break;
     680                                 case 2:
     681                                     if ((enemybullet.x >= hamper.x) && (enemybullet.x <= hamper.x + 17) &&
     682                                         (enemybullet.y <= hamper.y + 17) && (enemybullet.y >= hamper.y - 1)) {
     683                                         enemyBullets[eb].islive = false;
     684                                         window.clearInterval(enemyBullets[eb].time);
     685                                         enemyBulletBombs[eb] = new bulletBomb(enemybullet.x - 68, enemybullet.y - 50);
     686                                         enemyBullets[eb] = null;
     687                                     }
     688                                     break;
     689 
     690                             }
     691                             break;
     692                         case 2:
     693                             switch (hamper.style) {
     694                                 case 1:
     695                                     if ((enemybullet.x >= hamper.x - 1) && (enemybullet.x <= hamper.x + 17) &&
     696                                         (enemybullet.y + 2 <= hamper.y + 10) && (enemybullet.y + 2 >= hamper.y)) {
     697                                         enemyBullets[eb].islive = false;
     698                                         window.clearInterval(enemyBullets[eb].time);
     699                                         enemyBulletBombs[eb] = new bulletBomb(enemybullet.x - 68, enemybullet.y - 50);
     700                                         enemyBullets[eb] = null;
     701                                         hampers[ha] = null;
     702                                     }
     703                                     break;
     704                                 case 2:
     705                                     if ((enemybullet.x >= hamper.x - 1) && (enemybullet.x <= hamper.x + 17) &&
     706                                         (enemybullet.y + 2 <= hamper.y + 17) && (enemybullet.y + 2 >= hamper.y)) {
     707                                         enemyBullets[eb].islive = false;
     708                                         window.clearInterval(enemyBullets[eb].time);
     709                                         enemyBulletBombs[eb] = new bulletBomb(enemybullet.x - 68, enemybullet.y - 50);
     710                                         enemyBullets[eb] = null;
     711                                     }
     712                                     break;
     713                             }
     714                             break;
     715                         case 3:
     716                             switch (hamper.style) {
     717                                 case 1:
     718                                     if ((enemybullet.x >= hamper.x) && (enemybullet.x <= hamper.x + 17) &&
     719                                         (enemybullet.y + 1 <= hamper.y + 10) && (enemybullet.y + 1 >= hamper.y)) {
     720                                         enemyBullets[eb].islive = false;
     721                                         window.clearInterval(enemyBullets[eb].time);
     722                                         enemyBulletBombs[eb] = new bulletBomb(enemybullet.x - 68, enemybullet.y - 50);
     723                                         enemyBullets[eb] = null;
     724                                         hampers[ha] = null;
     725                                     }
     726                                     break;
     727                                 case 2:
     728                                     if ((enemybullet.x >= hamper.x) && (enemybullet.x <= hamper.x + 17) &&
     729                                         (enemybullet.y + 1 <= hamper.y + 20) && (enemybullet.y + 1 >= hamper.y)) {
     730                                         enemyBullets[eb].islive = false;
     731                                         window.clearInterval(enemyBullets[eb].time);
     732                                         enemyBulletBombs[eb] = new bulletBomb(enemybullet.x - 68, enemybullet.y - 50);
     733                                         enemyBullets[eb] = null;
     734                                     }
     735                                     break;
     736 
     737                             }
     738                             break;
     739                     }
     740                 }
     741             }
     742 
     743         }
     744     }
     745     ////玩家子弹是否打中敌人坦克
     746     ////是否打中阻碍物
     747     if (hero1bullet != null)
     748     {
     749         for (var en = 0; en < enemys.length; en++) {
     750             if (enemys[en] != null && enemys[en].islive != 0 && hero1bullet != null) {
     751                 switch (hero1bullet.direct) {
     752                     case 0:
     753                         if ((hero1bullet.x + 2 >= enemys[en].x) && (hero1bullet.x + 2 <= enemys[en].x + 50) && (hero1bullet.y + 3 <= enemys[en].y + 50) && (hero1bullet.y + 3 >= enemys[en].y)) {
     754                             hero1bullet.islive = false;
     755                             window.clearInterval(hero1bullet.time);
     756                             hero1bullet = null;
     757                             enemys[en].islive--;
     758                         }
     759                         break;
     760                     case 1:
     761                         if ((hero1bullet.x + 3 >= enemys[en].x) && (hero1bullet.x + 3 <= enemys[en].x + 50) && (hero1bullet.y + 2 >= enemys[en].y) && (hero1bullet.y + 2 <= enemys[en].y + 50)) {
     762                             hero1bullet.islive = false;
     763                             window.clearInterval(hero1bullet.time);
     764                             hero1bullet = null;
     765                             enemys[en].islive--;
     766                         }
     767                         break;
     768                     case 2:
     769                         if ((hero1bullet.x + 2 >= enemys[en].x) && (hero1bullet.x + 2 <= enemys[en].x + 50) && (hero1bullet.y + 3 <= enemys[en].y + 50) && (hero1bullet.y + 3 >= enemys[en].y)) {
     770                             hero1bullet.islive = false;
     771                             window.clearInterval(hero1bullet.time);
     772                             hero1bullet = null;
     773                             enemys[en].islive--;
     774                         }
     775                         break;
     776                     case 3:
     777                         if ((hero1bullet.x <= enemys[en].x + 50) && (hero1bullet.x >= enemys[en].x) && (hero1bullet.y + 2 >= enemys[en].y) && (hero1bullet.y + 2 <= enemys[en].y + 50)) {
     778                             hero1bullet.islive = false;
     779                             window.clearInterval(hero1bullet.time);
     780                             hero1bullet = null;
     781                             enemys[en].islive--;
     782                         }
     783                         break;
     784                 }
     785                 if (enemys[en].islive == 0) {
     786                     var tankbomb = new TankBomb(enemys[en].x, enemys[en].y);
     787                     tankbombs.push(tankbomb);
     788                     enemys[en] = null;
     789                 }
     790             }
     791         }
     792         var hamper = null;
     793         for (var ha = 0; ha < hampers.length; ha++)
     794         {
     795             hamper = hampers[ha];
     796             if (hamper != null && hero1bullet!=null)
     797             {
     798                 switch (hero1bullet.direct) {
     799                     case 0:
     800                         switch (hamper.style)
     801                         {
     802                             case 1:
     803                                 if ((hero1bullet.x >= hamper.x - 1) && (hero1bullet.x <= hamper.x + 17) &&
     804                                     (hero1bullet.y <= hamper.y + 10) && (hero1bullet.y >= hamper.y)) {
     805                                     hero1bullet.islive = false;
     806                                     window.clearInterval(hero1bullet.time);
     807                                     hero1bulletBomb = new bulletBomb(hero1bullet.x - 68, hero1bullet.y - 50);
     808                                     hero1bullet = null;
     809                                     hampers[ha] = null;
     810                                 }
     811                                 break;
     812                             case 2:
     813                                 if ((hero1bullet.x >= hamper.x - 1) && (hero1bullet.x <= hamper.x + 17) &&
     814                                     (hero1bullet.y <= hamper.y + 20) && (hero1bullet.y >= hamper.y)) {
     815                                     hero1bullet.islive = false;
     816                                     window.clearInterval(hero1bullet.time);
     817                                     hero1bulletBomb = new bulletBomb(hero1bullet.x - 68, hero1bullet.y - 50);
     818                                     hero1bullet = null;
     819                                 }
     820                                 break;
     821 
     822                         }
     823                         
     824                         break;
     825                     case 1:
     826                         switch (hamper.style) {
     827                             case 1:
     828                                 if ((hero1bullet.x >= hamper.x) && (hero1bullet.x <= hamper.x + 17) &&
     829                                     (hero1bullet.y <= hamper.y + 10) && (hero1bullet.y >= hamper.y-1)) {
     830                                     hero1bullet.islive = false;
     831                                     window.clearInterval(hero1bullet.time);
     832                                     hero1bulletBomb = new bulletBomb(hero1bullet.x - 68, hero1bullet.y - 50);
     833                                     hero1bullet = null;
     834                                     hampers[ha] = null;
     835                                 }
     836                                 break;
     837                             case 2:
     838                                 if ((hero1bullet.x >= hamper.x) && (hero1bullet.x <= hamper.x + 17) &&
     839                                     (hero1bullet.y <= hamper.y + 17) && (hero1bullet.y >= hamper.y-1)) {
     840                                     hero1bullet.islive = false;
     841                                     window.clearInterval(hero1bullet.time);
     842                                     hero1bulletBomb = new bulletBomb(hero1bullet.x - 68, hero1bullet.y - 50);
     843                                     hero1bullet = null;
     844                                 }
     845                                 break;
     846 
     847                         }
     848                         break;
     849                     case 2:
     850                         switch (hamper.style) {
     851                             case 1:
     852                                 if ((hero1bullet.x >= hamper.x - 1) && (hero1bullet.x <= hamper.x + 17) &&
     853                                     (hero1bullet.y + 2 <= hamper.y + 10) && (hero1bullet.y + 2 >= hamper.y)) {
     854                                     hero1bullet.islive = false;
     855                                     window.clearInterval(hero1bullet.time);
     856                                     hero1bulletBomb = new bulletBomb(hero1bullet.x - 68, hero1bullet.y - 50);
     857                                     hero1bullet = null;
     858                                     hampers[ha] = null;
     859                                 }
     860                                 break;
     861                             case 2:
     862                                 if ((hero1bullet.x >= hamper.x - 1) && (hero1bullet.x <= hamper.x + 17) &&
     863                                     (hero1bullet.y+2 <= hamper.y + 17) && (hero1bullet.y+2 >= hamper.y)) {
     864                                     hero1bullet.islive = false;
     865                                     window.clearInterval(hero1bullet.time);
     866                                     hero1bulletBomb = new bulletBomb(hero1bullet.x - 68, hero1bullet.y - 50);
     867                                     hero1bullet = null;
     868                                 }
     869                                 break;
     870                         }
     871                         break;
     872                     case 3:
     873                         switch (hamper.style) {
     874                             case 1:
     875                                 if ((hero1bullet.x >= hamper.x) && (hero1bullet.x <= hamper.x + 17) &&
     876                                     (hero1bullet.y+1 <= hamper.y + 10) && (hero1bullet.y+1 >= hamper.y)) {
     877                                     hero1bullet.islive = false;
     878                                     window.clearInterval(hero1bullet.time);
     879                                     hero1bulletBomb = new bulletBomb(hero1bullet.x - 68, hero1bullet.y - 50);
     880                                     hero1bullet = null;
     881                                     hampers[ha] = null;
     882                                 }
     883                                 break;
     884                             case 2:
     885                                 if ((hero1bullet.x >= hamper.x) && (hero1bullet.x <= hamper.x + 17) &&
     886                                     (hero1bullet.y+1 <= hamper.y + 20) && (hero1bullet.y+1 >= hamper.y)) {
     887                                     hero1bullet.islive = false;
     888                                     window.clearInterval(hero1bullet.time);
     889                                     hero1bulletBomb = new bulletBomb(hero1bullet.x - 68, hero1bullet.y - 50);
     890                                     hero1bullet = null;
     891                                 }
     892                                 break;
     893 
     894                         }
     895                         break;
     896                 }
     897             }
     898         }
     899 
     900     }
     901 }
     902 
     903 ///坦克爆炸类
     904 function TankBomb(x, y) {
     905     this.x = x;
     906     this.y = y;
     907     this.time = 0;
     908     this.imgsrc = "";
     909     this.isLive = true;
     910     
     911 
     912     this.drawBomb = function drawBomb() {
     913         if (this.time <= 2) {
     914             cxt.drawImage(bomb3, this.x, this.y, 50, 50);
     915         }
     916         if (this.time > 2 && this.time <= 5) {
     917             cxt.drawImage(bomb2, this.x, this.y, 50, 50);
     918         }
     919         if (this.time >= 6 && this.time <= 9) {
     920             cxt.drawImage(bomb1, this.x, this.y, 50, 50);
     921         }
     922         if (this.time >= 10 && this.time <= 12)
     923         {
     924             cxt.drawImage(bomb2, this.x, this.y, 50, 50);
     925         }
     926         if (this.time >= 13 && this.time <= 15)
     927         {
     928             cxt.drawImage(bomb3, this.x, this.y, 50, 50);
     929         }
     930         this.time++;
     931         if (this.time >= 15) {
     932             this.isLive = false;
     933             this.time = 0;
     934         }
     935     };
     936 }
     937 ///子弹爆炸类
     938 function bulletBomb(x, y)
     939 {
     940     this.x = x;
     941     this.y = y;
     942 
     943     this.drawBomb = function ()
     944     {
     945         cxt.drawImage(buBoImg, this.x, this.y);
     946         
     947     }
     948 }
     949 ///判断基地是否被打中
     950 function hitBase() {
     951     if (gameover) {
     952         return;
     953     }
     954     var enemybullet = null;
     955     for (var en = 0; en < enemyBullets.length; en++) {
     956         enemybullet = enemyBullets[en];
     957         if (enemybullet != null) {
     958             switch (enemybullet.direct) {
     959                 case 0:
     960                     break;
     961                 case 1:
     962                     if ((enemybullet.x >= 280) && (enemybullet.x <= 330) &&
     963                         (enemybullet.y + 1 >= 450) && (enemybullet.y <= 500)) {
     964                         gameover = true;
     965                         enemyBullets[en] = null;
     966                     }
     967                     break;
     968                 case 2:
     969                     if ((enemybullet.x + 1 >= 280) && (enemybullet.x <= 330) &&
     970                         (enemybullet.y + 2 >= 450) && (enemybullet.y + 2 <= 500)) {
     971                         gameover = true;
     972                         enemyBullets[en] = null;
     973                     }
     974                     break;
     975                 case 3:
     976                     if ((enemybullet.x >= 280) && (enemybullet.x <= 330) &&
     977                         (enemybullet.y + 1 >= 450) && (enemybullet.y <= 500)) {
     978                         gameover = true;
     979                         enemyBullets[en] = null;
     980                     }
     981                     break;
     982             }
     983         }
     984     }
     985     if (hero1bullet != null) {
     986         switch (hero1bullet.direct) {
     987             case 0:
     988                 break;
     989             case 1:
     990                 if ((hero1bullet.x >= 280) && (hero1bullet.x <= 330) &&
     991                     (hero1bullet.y + 1 >= 450) && (hero1bullet.y <= 500)) {
     992                     gameover = true;
     993                     window.clearInterval(hero1bullet.time);
     994                     hero1bullet = null;
     995                 }
     996                 break;
     997             case 2:
     998                 if ((hero1bullet.x + 1 >= 280) && (hero1bullet.x <= 330) &&
     999                     (hero1bullet.y + 2 >= 450) && (hero1bullet.y + 2 <= 500)) {
    1000                     gameover = true;
    1001                     window.clearInterval(hero1bullet.time);
    1002                     hero1bullet = null;
    1003                 }
    1004                 break;
    1005             case 3:
    1006                 if ((hero1bullet.x >= 280) && (hero1bullet.x <= 330) &&
    1007                     (hero1bullet.y + 1 >= 450) && (hero1bullet.y <= 500)) {
    1008                     gameover = true;
    1009                     window.clearInterval(hero1bullet.time);
    1010                     hero1bullet = null;
    1011                 }
    1012                 break;
    1013         }
    1014     }
    1015 }
    1016 
    1017 ///画出GAMEOVER
    1018 var gameY = 500;
    1019 function GameOver()
    1020 {
    1021     if (gameY > 193) {
    1022         gameY = gameY - 4;
    1023     }
    1024     if (verygood)
    1025     {
    1026         cxt.beginPath();
    1027         cxt.fillStyle = "#CCCCCC";
    1028         cxt.fillRect(190, gameY, 215, 115)
    1029         cxt.closePath();
    1030         cxt.beginPath();
    1031         cxt.fillStyle = "#ff0000";
    1032         cxt.font = "35px Engravers MT";
    1033         cxt.fillText("V E R Y", 212, gameY + 57);
    1034         cxt.fillText("G O O D", 212, gameY + 90);
    1035         cxt.closePath();
    1036         return;
    1037     }
    1038     if (gameover)
    1039     {
    1040         cxt.beginPath();
    1041         cxt.fillStyle = "#CCCCCC";
    1042         cxt.fillRect(190, gameY, 215, 115)
    1043         cxt.closePath();
    1044         cxt.beginPath();
    1045         cxt.fillStyle = "#ff0000";
    1046         cxt.font = "35px Engravers MT";
    1047         cxt.fillText("G A M E", 212, gameY + 57);
    1048         cxt.fillText("O V E  R", 212, gameY + 90);
    1049         cxt.closePath();
    1050     }
    1051     
    1052 }
    Draw.js
      1 ////阻碍物 Hamper类参数:x,y,style
      2 var hampers = new Array();
      3 ///画出保存基地的墙(一个20块砖头)
      4 var basehamX = 260;
      5 var basehamY = 490;
      6 for (var ham = 0; ham < 20; ham++) {
      7     if (ham < 7) {
      8         hampers[ham] = new Hamper(basehamX, basehamY - ham * 11, 1);
      9     }
     10     if (ham >= 7 && ham < 10) {
     11         hampers[ham] = new Hamper(basehamX + (ham - 6) * 18, basehamY - 5 * 11, 1);
     12     }
     13     if (ham >= 10 && ham < 13) {
     14         hampers[ham] = new Hamper(basehamX + (ham - 9) * 18, basehamY - 6 * 11, 1);
     15     }
     16     if (ham >= 13) {
     17         hampers[ham] = new Hamper(basehamX + 4 * 18, basehamY - (ham - 13) * 11, 1)
     18     }
     19 }
     20 $.getScript("script/js/map1.js");
     21 
     22 ///定义玩家1坦克
     23 var hero1born = new Born(180, 450);
     24 var hero1 = null;
     25 
     26 //敌人坦克出生数组
     27 var enemyborns = new Array();
     28 
     29 enemyborns[0] = new Born(0, 0);
     30 enemyborns[1] = new Born(275, 0);
     31 enemyborns[2] = new Born(550, 0);
     32 
     33 ///定义敌人数组
     34 var enemys = new Array();
     35 
     36 ///判断屏幕是否有5个敌人坦克,如果少于5个,则生产一个
     37 var enemy_loca = 1;
     38 function enemyBorn() {
     39     var enemynum = 0;
     40     for (var en = 0; en < enemys.length; en++) {
     41         if (enemys[en] != null) {
     42             enemynum++;
     43         }
     44     }
     45     if (enemynum < 5 && enemys.length < 20) {
     46         var enemyborn = null;
     47         switch (enemy_loca) {
     48             case 1:
     49                 enemyborn = new Born(0, 0);
     50                 enemy_loca = 2;
     51                 break;
     52             case 2:
     53                 enemyborn = new Born(275, 0);
     54                 enemy_loca = 3;
     55                 break;
     56             case 3:
     57                 enemyborn = new Born(550, 0);
     58                 enemy_loca = 1;
     59                 break;
     60             default:
     61                 enemyborn = new Born(0, 0);
     62                 break;
     63         }
     64 
     65         enemyborns.push(enemyborn);
     66     }
     67     if (enemynum <= 0 && enemys.length >= 20) {
     68         verygood = true;
     69     }
     70 
     71 }
     72 window.setInterval("enemyBorn()", 3000);
     73 
     74 ////爆炸
     75 var tankbombs = new Array();
     76 
     77 ///敌人坦克移动
     78 function moveEnemyTank() {
     79     for (var e = 0; e < enemys.length; e++) {
     80         if (enemys[e] != null && enemys[e].islive != 0) {
     81             enemys[e].run();
     82             enemys[e].attackEnemy(e);
     83         }
     84     }
     85 }
     86 window.setInterval("moveEnemyTank()", 100);
     87 
     88 function flashTankMap() {
     89     cxt.clearRect(0, 0, 600, 500);
     90     ///画出阻碍物
     91     for (var ha = 0; ha < hampers.length; ha++) {
     92         if (hampers[ha] != null) {
     93             hampers[ha].Draw();
     94         }
     95     }
     96     ///
     97 
     98     //画出玩家坦克
     99     if (hero1born != null) {
    100         if (hero1born.born) {
    101             hero1born.drawBorn();
    102         }
    103         else {
    104             hero1 = new Hero(hero1born.x, hero1born.y, 2, 0, heroColor1, 4);
    105             hero1born = null;
    106         }
    107     }
    108     if (hero1 != null && hero1.islive != 0) {
    109         DrawTank(hero1);
    110     }
    111     ///画出子弹
    112     DrawBullet();
    113     ///判断子弹是否打中坦克
    114     ///画出敌人坦克
    115     for (var bo = 0; bo < enemyborns.length; bo++) {
    116         if (enemyborns[bo] != null) {
    117             if (enemyborns[bo].born) {
    118                 enemyborns[bo].drawBorn();
    119             }
    120             else {
    121                 var enemy = null;
    122                 switch (Math.round(Math.random() * 3)) {
    123                     case 0:
    124                         enemy = new Enemy(enemyborns[bo].x, enemyborns[bo].y, 3, 2, enemyColor1, 1);
    125                         break;
    126                     case 1:
    127                         enemy = new Enemy(enemyborns[bo].x, enemyborns[bo].y, 3, 2, enemyColor2, 1);
    128                         break;
    129                     case 2:
    130                         enemy = new Enemy(enemyborns[bo].x, enemyborns[bo].y, 3, 2, enemyColor3, 1);
    131                         break;
    132                     case 3:
    133                         enemy = new Enemy(enemyborns[bo].x, enemyborns[bo].y, 3, 2, enemyColor4, 1);
    134                         break;
    135                 }
    136                 if (enemy != null) {
    137                     enemys.push(enemy);
    138                 }
    139                 enemyborns[bo] = null;
    140             }
    141         }
    142     }
    143     for (var e = 0; e < enemys.length; e++) {
    144         if (enemys[e] != null && enemys[e].islive != 0) {
    145             DrawTank(enemys[e]);
    146         }
    147     }
    148     ///画出爆炸效果
    149     for (var bo = 0; bo < tankbombs.length; bo++) {
    150         if (tankbombs[bo].isLive) {
    151             tankbombs[bo].drawBomb();
    152         }
    153     }
    154     ////子弹爆炸
    155     for (var bubo = 0; bubo < enemyBulletBombs.length; bubo++) {
    156         if (enemyBulletBombs[bubo] != null) {
    157             enemyBulletBombs[bubo].drawBomb();
    158         }
    159         enemyBulletBombs[bubo] = null;
    160     }
    161     if (hero1bulletBomb != null) {
    162         hero1bulletBomb.drawBomb();
    163         hero1bulletBomb = null;
    164     }
    165     ///画出基地
    166     DrawSymbol();
    167     ///调用判断基地是否被打中的函数
    168     hitBase();
    169     ///
    170     GameOver();
    171 }
    172 flashTankMap();
    173 
    174 ///判断按键
    175 var lastcode = 87;
    176 function getCommand() {
    177     if (hero1 == null || hero1.islive == 0 || gameover) {
    178         return;
    179     }
    180     var keycode = event.keyCode;
    181     switch (keycode) {
    182         case 87:///上
    183             if (lastcode == 87) {
    184                 if (!heroTankCollision()) {
    185                     hero1.moveUp();
    186                 }
    187             }
    188             else {
    189                 lastcode = 87;
    190                 hero1.direct = 0;
    191             }
    192             break;
    193         case 68:///右
    194             if (lastcode == 68) {
    195                 if (!heroTankCollision()) {
    196                     hero1.moveRight();
    197                 }
    198             }
    199             else {
    200                 lastcode = 68;
    201                 hero1.direct = 1;
    202             }
    203             break;
    204         case 83:////下
    205             if (lastcode == 83) {
    206                 if (!heroTankCollision()) {
    207                     hero1.moveDown();
    208                 }
    209             }
    210             else {
    211                 lastcode = 83;
    212                 hero1.direct = 2;
    213             }
    214             break;
    215         case 65:///左
    216             if (lastcode == 65) {
    217                 if (!heroTankCollision()) {
    218                     hero1.moveLeft();
    219                 }
    220             }
    221             else {
    222                 lastcode = 65;
    223                 hero1.direct = 3;
    224             }
    225             break;
    226         case 74:////开炮
    227             //hero1.tankbullet = "1";
    228             hero1.attackEnemy();
    229             break;
    230         case 66:
    231             break;
    232         default:
    233             break;
    234     }
    235     flashTankMap();
    236 }
    237 window.setInterval("flashTankMap()", 100);
    238 window.setInterval("hitTank()", 20);
    239 //玩家坦克与敌人坦克、阻碍物之间的碰撞
    240 function heroTankCollision() {
    241     //玩家坦克与敌人坦克之间的碰撞
    242     var enemy = null;
    243     for (var en = 0; en < enemys.length; en++) {
    244         enemy = enemys[en];
    245         if (enemy != null && enemy.islive != 0) {
    246             switch (hero1.direct) {
    247                 case 0:
    248                     if ((hero1.x > enemy.x - 50) && (hero1.x < enemy.x + 50) &&
    249                         ((hero1.y == enemy.y + 47) || (hero1.y == enemy.y + 48) || (hero1.y == enemy.y + 49) || (hero1.y == enemy.y + 50))) {
    250                         return true;
    251                     }
    252                     //else {
    253                     //    return false;
    254                     //}
    255                     break;
    256                 case 1:
    257                     if ((hero1.y > enemy.y - 50) && (hero1.y < enemy.y + 50) &&
    258                         ((hero1.x + 47 == enemy.x) || (hero1.x + 50 == enemy.x) || (hero1.x + 49 == enemy.x) || (hero1.x + 48 == enemy.x))) {
    259                         return true;
    260                     }
    261 
    262                     break;
    263                 case 2:
    264                     if ((hero1.x > enemy.x - 50) && (hero1.x < enemy.x + 50) &&
    265                         ((hero1.y + 47 == enemy.y) || (hero1.y + 50 == enemy.y) || (hero1.y + 49 == enemy.y) || (hero1.y + 48 == enemy.y))) {
    266                         return true;
    267                     }
    268 
    269                     break;
    270                 case 3:
    271                     if ((hero1.y > enemy.y - 50) && (hero1.y < enemy.y + 50) &&
    272                         ((hero1.x == enemy.x + 47) || (hero1.x == enemy.x + 50) || (hero1.x == enemy.x + 49) || (hero1.x == enemy.x + 48))) {
    273                         return true;
    274                     }
    275 
    276                     break;
    277             }
    278         }
    279     }
    280     //玩家坦克与阻碍物之间的碰撞
    281     var hamper = null;
    282     for (var ha = 0; ha < hampers.length; ha++) {
    283         hamper = hampers[ha];
    284         if (hamper != null) {
    285             switch (hampers[ha].style) {
    286                 case 1:
    287                     switch (hero1.direct) {
    288                         case 0:
    289                             if ((hero1.x > hamper.x - 50) && (hero1.x < hamper.x + 17) &&
    290                                 ((hero1.y == hamper.y + 7) || (hero1.y == hamper.y + 8) || (hero1.y == hamper.y + 9) || (hero1.y == hamper.y + 10))) {
    291                                 return true;
    292                             }
    293                             break;
    294                         case 1:
    295                             if ((hero1.y > hamper.y - 50) && (hero1.y < hamper.y + 10) &&
    296                                 ((hero1.x + 50 == hamper.x) || (hero1.x + 49 == hamper.x) || (hero1.x + 48 == hamper.x) || (hero1.x + 47 == hamper.x))) {
    297                                 return true;
    298                             }
    299                             break;
    300                         case 2:
    301                             if ((hero1.x > hamper.x - 50) && (hero1.x < hamper.x + 17) &&
    302                                 ((hero1.y + 50 == hamper.y) || (hero1.y + 49 == hamper.y) || (hero1.y + 48 == hamper.y) || (hero1.y + 47 == hamper.y))) {
    303                                 return true;
    304                             }
    305                             break;
    306                         case 3:
    307                             if ((hero1.y > hamper.y - 50) && (hero1.y < hamper.y + 10) &&
    308                                 ((hero1.x == hamper.x + 17) || (hero1.x == hamper.x + 16) || (hero1.x == hamper.x + 15) || (hero1.x == hamper.x + 14))) {
    309                                 return true;
    310                             }
    311                             break;
    312                     }
    313                     break;
    314                 case 2:
    315                     switch (hero1.direct) {
    316                         case 0:
    317                             if ((hero1.x >= hamper.x - 50) && (hero1.x <= hamper.x + 17) &&
    318                                 ((hero1.y == hamper.y + 14) || (hero1.y == hamper.y + 15) || (hero1.y == hamper.y + 16) || (hero1.y == hamper.y + 17))) {
    319                                 return true;
    320                             }
    321                             break;
    322                         case 1:
    323                             if ((hero1.y > hamper.y - 50) && (hero1.y < hamper.y + 10) &&
    324                                 ((hero1.x + 50 == hamper.x) || (hero1.x + 49 == hamper.x) || (hero1.x + 48 == hamper.x) || (hero1.x + 47 == hamper.x))) {
    325                                 return true;
    326                             }
    327                             break;
    328                         case 2:
    329                             if ((hero1.x > hamper.x - 50) && (hero1.x < hamper.x + 17) &&
    330                                 ((hero1.y + 50 == hamper.y) || (hero1.y + 49 == hamper.y) || (hero1.y + 48 == hamper.y) || (hero1.y + 47 == hamper.y))) {
    331                                 return true;
    332                             }
    333                             break;
    334                         case 3:
    335                             if ((hero1.y > hamper.y - 50) && (hero1.y < hamper.y + 10) &&
    336                                 ((hero1.x == hamper.x + 17) || (hero1.x == hamper.x + 16) || (hero1.x == hamper.x + 15) || (hero1.x == hamper.x + 14))) {
    337                                 return true;
    338                             }
    339                             break;
    340                     }
    341                     break;
    342                 case 3:
    343                     break;
    344                 case 4:
    345                     break;
    346             }
    347         }
    348     }
    349 
    350 }
    opera_js.js

      还有地图……
      需要代码的可以联系我,我的邮箱是:YJZhen@live.com

      如需更多教程,请到 淘课学院 http://www.taokeschool.com/ 下载。

     (欢迎关注“角速度”微信:jiaosud)

  • 相关阅读:
    DC中为什么要用Uniquify?
    hdu 1596 find the safest road
    hdu2112 HDU Today
    hdu 2066 一个人的旅行
    poj 3026 Borg Maze
    poj 1979 Red and Black
    poj 1321 棋盘问题
    hdu 1010 Tempter of the Bone
    hdu 4861 Couple doubi
    codeforces584B Kolya and Tanya
  • 原文地址:https://www.cnblogs.com/yjzhen/p/3514639.html
Copyright © 2011-2022 走看看