HTML5实现坦克大战(一)

Tank

字段 x:坦克的中心点的横坐标

y:坦克的中心点的纵坐标

dir:坦克的前进的方向

spped:坦克的速度

color:坦克的颜色,用于区分种类不同的坦克

bullet:坦克的子弹 为array类型

方法:MoveUp:坦克上移

MoveDown:坦克下移

MoveRight:坦克右移

MoveLeft:坦克左移

MyTank extends Tank

EnemeyTank extends Tank

Bullet

Tank

字段:x:

y:

DIR

IsLive:判断子弹是否还存活(包括过界和击中目标)

方法    drawBullet():在canvas上画出子弹

run() 让子弹飞

 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     <script src="../JS/jquery-1.11.2.js"></script>
  6     <title></title>
  7     <script type="text/javascript">
  8         var EnemeyTankColor = new Array("#61D2F1", "#8A4A6E");
  9         var MyTankColor = new Array("green", "blue");
 10         var tank = null;
 11
 12
 13         function Tank(x,y,dir,color){
 14             this.x = x;
 15             this.y = y;
 16             this.dir = dir;           //0代表向上 1代表向右   2代表向下   3代表向左
 17             this.speed = 1;
 18             this.color = color;
 19             this.MoveUp = function () {
 20                 this.y -= this.speed;
 21                 this.dir = 0;
 22                 //DrawTank(this);
 23             };
 24             this.MoveRight = function () {
 25                 this.x += this.speed;
 26                 this.dir = 1;
 27                 //DrawTank(this);
 28             };
 29
 30             this.MoveDown = function () {
 31                 this.y += this.speed;
 32                 this.dir = 2;
 33                 //DrawTank(this);
 34             };
 35
 36             this.MoveLeft = function () {
 37                 this.x -= this.speed;
 38                 this.dir = 3;
 39                 //DrawTank(this);
 40             };
 41             //alert(this.dir);
 42             this.bullet = new Array(new Bullet(this.x, this.y, this.dir));
 43         }
 44
 45         function MyTank(x, y, dir,color) {
 46             this.tank = Tank;
 47             this.tank(x,y,dir,color);
 48         }
 49
 50         function EnemeyTank(x,y,dir,color)
 51         {
 52             this.tank = Tank;
 53             this.tank(x, y, dir,color);
 54         }
 55
 56         function Bullet(x,y,dir)
 57         {
 58             var bullet = new Object;
 59             bullet.x = x;
 60             bullet.y = y;
 61             bullet.dir = dir;
 62             bullet.isLive = true;
 63             bullet.timer = null;
 64             bullet.drawBullet = function () {
 65                 if (bullet.isLive == true)
 66                 {
 67                     var canvas = document.getElementById("cantank");
 68                     var ctx = canvas.getContext("2d");
 69                     ctx.fillStyle = "red";
 70                     //ctx.clearRect(bullet.x,bullet.y,3,3);
 71                     switch (bullet.dir) {
 72                         case 0: ctx.fillRect(bullet.x, bullet.y - 35, 3, 3); break;
 73                         case 1: ctx.fillRect(bullet.x + 35, bullet.y, 3, 3); break;
 74                         case 2: ctx.fillRect(bullet.x, bullet.y + 35, 3, 3); break;
 75                         case 3: ctx.fillRect(bullet.x - 35, bullet.y, 3, 3); break;
 76                     }
 77                 }
 78             }
 79
 80             bullet.run = function () {
 81                 //alert("run");
 82
 83
 84                 if (bullet.x < 35 || bullet.x > 600 || bullet.y < 35 || bullet.y > 600)
 85                 {
 86                     //clearInterval(bullet.timer);
 87                     //bullet.x = tank.x;
 88                     //bullet.y = tank.y;
 89                     //bullet.dir = tank.dir;
 90                     bullet.isLive = false;
 91                 } else {
 92                     switch (bullet.dir) {
 93                         case 0: bullet.y=bullet.y-2; break;
 94                         case 1: bullet.x=bullet.x+2; break;
 95                         case 2: bullet.y=bullet.y+2; break;
 96                         case 3: bullet.x=bullet.x-2; break;
 97                     }
 98                 }
 99
100                 $("#span1").html("x="+bullet.x+"  "+"y="+bullet.y);
101             }
102             return bullet;
103         }
104
105         //画出坦克对象
106         function DrawTank(tank) {
107             var canTank = document.getElementById("cantank");
108             var ctx = canTank.getContext("2d");
109             var dir = tank.dir;
110             switch(dir){
111                 case 0:
112                 case 2:
113
114                 //画出坦克的左边的轮子
115             ctx.fillStyle = tank.color[0];
116             ctx.fillRect(tank.x-25, tank.y-25, 10, 50);
117
118                 //画出坦克的中间的机箱
119             ctx.fillRect(tank.x -15, tank.y - 15, 30, 30);
120
121                 //画出坦克的右边的轮子
122             ctx.fillRect(tank.x + 15, tank.y-25, 10, 50);
123             ctx.fillStyle = tank.color[1];
124
125                 //画出坦克的盖子
126             ctx.beginPath();
127             ctx.arc(tank.x, tank.y, 15, 0, 360, false);
128             ctx.closePath();
129             ctx.fill();
130             ctx.closePath();
131
132                 //画出坦克的炮筒
133             ctx.beginPath();
134             ctx.moveTo(tank.x, tank.y);
135             if (tank.dir == 0)
136             {
137                 ctx.lineTo(tank.x, tank.y-30);
138             }
139             else if (tank.dir == 2)
140             {
141                 ctx.lineTo(tank.x,tank.y+30);
142             }
143             ctx.closePath();
144             ctx.lineWidth = "2";
145             ctx.strokeStyle = "yellow";
146             ctx.stroke();
147             break;
148                 case 1:
149                 case 3:
150                     //画出坦克的上边的轮子
151                     ctx.fillStyle = tank.color[0];
152                     ctx.fillRect(tank.x-25, tank.y-25, 50, 10);
153
154                     //画出坦克的中间的机箱
155                     ctx.fillRect(tank.x -15, tank.y - 15, 30, 30);
156
157                     //画出坦克的下边的轮子
158                     ctx.fillRect(tank.x - 25, tank.y+15, 50, 10);
159                     ctx.fillStyle = tank.color[1];
160
161                     //画出坦克的盖子
162                     ctx.beginPath();
163                     ctx.arc(tank.x, tank.y, 15, 0, 360, false);
164                     ctx.closePath();
165                     ctx.fill();
166                     ctx.closePath();
167
168                     //画出坦克的炮筒
169                     ctx.beginPath();
170                     ctx.moveTo(tank.x, tank.y);
171                     if (tank.dir == 1) {
172                         ctx.lineTo(tank.x + 30, tank.y );
173                     }
174                     else if (tank.dir == 3) {
175                         ctx.lineTo(tank.x -30, tank.y );
176                     }
177                     ctx.closePath();
178                     ctx.lineWidth = "2";
179                     ctx.strokeStyle = "yellow";
180                     ctx.stroke();
181                     break;
182             }
183
184         };
185
186         //刷新坦克和子弹的位置
187         function Refresh(mytank, enemeytanks) {
188             DrawTank(mytank);
189             //if (mytank.bullet.isLive == true)
190             //{
191             //    mytank.bullet.drawBullet();
192             //}
193
194             for (var i = 0; i < mytank.bullet.length; i++)
195             {
196                 mytank.bullet[i].drawBullet();
197             }
198             for(var i=0;i<3;i++)
199             {
200                 DrawTank(enemeytanks[i]);
201
202                 //for (var i = 0; i < enemeytanks[i].bullet.length; i++) {
203                 //    enemeytanks[i].bullet[i].drawBullet();
204                 //}
205             }
206         }
207
208         //画出静态的坦克
209         //注意要使用相对位置,即相对坦克的左上角的位置的变化,这样之后才能使坦克动起来
210         $(function () {
211
212             //先得到canvas对象和画笔对象
213             var canvas = document.getElementById("cantank");
214             var ctx = canvas.getContext("2d");
215
216             //新建自己的坦克
217             var X = 30;
218             var Y = 30;
219             tank = new MyTank(500,500,0,MyTankColor);
220             //新建敌人的坦克
221             var EnemeyTanks = new Array();
222             for (var i = 0; i < 3; i++)
223             {
224                 var enemeyTank = new EnemeyTank((i + 1) * 80, 80, 2, EnemeyTankColor);
225                 EnemeyTanks[i] = enemeyTank;
226             }
227             //当页面加载完成的时候先画出坦克
228             Refresh(tank, EnemeyTanks);
229
230             $("body").keydown(function (event) {
231                 var key = event.keyCode;
232                 switch (key) {
233                     case 87: tank.MoveUp(); break;
234                     case 68: tank.MoveRight(); break;
235                     case 83: tank.MoveDown();break;
236                     case 65: tank.MoveLeft(); break;
237                 }
238
239                 ctx.clearRect(0, 0, 600, 600);
240
241                 Refresh(tank, EnemeyTanks);
242             });
243
244
245             //for (var i = 0; i < EnemeyTanks.length; i++)
246             //{
247             //    //定时产生新的子弹
248             //    setInterval(function () {
249             //        EnemeyTanks[i].bullet[EnemeyTanks[i].bullet.length] = new Bullet(EnemeyTanks[i].x, EnemeyTanks[i].y, EnemeyTanks[i].dir);
250             //        Refresh(tank, EnemeyTanks);
251             //    }, 500);
252
253             //    //定时改变子弹的位置
254             //    setInterval(function () {
255             //        for (var i = 0; i < EnemeyTanks[i].bullet.length; i++) {
256             //            EnemeyTanks[i].bullet[i].run();
257             //            ctx.clearRect(0, 0, 600, 600);
258             //            Refresh(tank, EnemeyTanks);
259             //        }
260             //    }, 10);
261             //}
262
263
264             //定时产生新的子弹
265             setInterval(function () {
266                 EnemeyTanks[0].bullet[EnemeyTanks[0].bullet.length] = new Bullet(EnemeyTanks[0].x, EnemeyTanks[0].y, EnemeyTanks[0].dir);
267                 Refresh(tank, EnemeyTanks);
268             }, 500);
269
270             //定时改变子弹的位置
271             setInterval(function () {
272                 for (var i = 0; i < EnemeyTanks[i].bullet.length; i++) {
273                     EnemeyTanks[0].bullet[i].run();
274                     ctx.clearRect(0, 0, 600, 600);
275                     Refresh(tank, EnemeyTanks);
276                 }
277             }, 10);
278
279
280
281
282
283             //定时产生新的子弹
284             setInterval(function () {
285                 tank.bullet[tank.bullet.length] = new Bullet(tank.x, tank.y, tank.dir);
286                 Refresh(tank, EnemeyTanks);
287             }, 500);
288
289             //定时改变子弹的位置
290             setInterval(function () {
291                 for (var i = 0; i < tank.bullet.length; i++)
292                 {
293                     tank.bullet[i].run();
294                     ctx.clearRect(0, 0, 600, 600);
295                     Refresh(tank, EnemeyTanks);
296                 }
297             }, 10);
298
299
300
301             //for (var i = 0; i < tank.bullet.length; i++)
302             //{
303             //    setInterval(function () {
304             //        tank.bullet[0].run();
305             //        ctx.clearRect(0, 0, 600, 600);
306             //        Refresh(tank, EnemeyTanks);
307             //    }, 50);
308             //}
309
310
311
312             //setInterval(tank.bullet.drawBullet, 100);
313         });
314     </script>
315 </head>
316 <body>
317     <canvas id="cantank" width="600" height="600" style="background-color:black"></canvas>
318     <span id="span1"></span>
319 </body>
320 </html>
时间: 2024-11-04 10:19:46

HTML5实现坦克大战(一)的相关文章

html5制作坦克大战

全部html5都采用绘图技术完成.坦克是画出来的.(坦克,子弹,墙,水,草坪) 首先我们画出坦克. 坦克是两边两个矩形,中间一个大矩形,矩形了有一个圆,还有一根线. 画出坦克的思路是以坦克的左上角为参照点,画出坦克的其他部分. 这样的好处是,当左上角的点发生改变是,坦克才能发生改变. 不使用图片的原因就是图片是比较耗费资源的.因为图片的像素点很大. tankGame1.html的代码 <!DOCTYPE html><html><head><meta charset

HTML5移动开发之路(7)——坦克大战游戏1

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:HTML5移动开发之路(7)--坦克大战游戏1 上一篇中我们介绍了关于Canvas的基础知识,用Canvas绘制各种图形和图片,在上一篇的基础上我们来做一个基于HTML5的坦克大战游戏,下面我们开始吧 一.用Canvas画出我们的坦克 我们设计的坦克结构如下图所示,如果有的朋友有更好的设计,希望分享和交流一下. 如上图所示,我们的坦克基本上是由三个矩形和一个圆形一个线段组成,每个部件的尺寸进行了标记,单位为px,下面我们用上一篇中

基于HTML5坦克大战游戏简化版

之前我们有分享过不少经典的HTML5游戏,有些还是很有意思的,比如HTML5版切水果游戏和HTML5中国象棋游戏.今天要分享的是一款简化版的HTML5坦克大战游戏,方向键控制坦克的行进方向,空格键发射子弹,命中敌方坦克后也会发出声音,效果还算可以.效果图如下: 在线预览   源码下载 实现的代码. javascript代码: window.addEventListener("load", canvasApp, false); //是否支持canvas function canvasSu

HTML5移动开发之路(8)——坦克大战游戏2

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:HTML5移动开发之路(8)--坦克大战游戏2 在上一篇文章中我们已经画出了自己的坦克,并且可以控制自己的坦克移动,我们继续接着上一篇来实现我们的坦克大战游戏吧. 一.将JS文件分离出来 使用OO的思想,我们已经对坦克进行了封装,对画坦克也进行了封装,下面我们将这两个对象提取到外部的js文件中,文件内容如下: [javascript] view plain copy print? //定义一个Hero类(后面还要改进) //x表示

汉顺平html5课程分享:6小时制作经典的坦克大战!

记起自己去年參加的一次面试,在做过Java多年的面试官面前发挥的并不好,但他一听说我会html5,立刻眼睛发亮.无论不顾的想要和我签约.. .所以.如今为工作犯愁的朋友们,学好html5,绝对会为你找到好工作加入重要砝码. html5 大致是 (html+css3+javascript apis).一句话: html5 支持了css3 的强大的选择器和动画等功能+ 支持javascript 非常多新的函数.所以html5就非常强大了. 所以在此特意韩顺平老师的html5课程-6小时编写经典坦克大

HTML5移动开发之路(9)——坦克大战游戏3

本文为 兄弟连IT教育 机构官方 HTML5培训 教程,主要介绍:HTML5移动开发之路(9)--坦克大战游戏3 上一篇我们创建了敌人的坦克和自己的坦克,接下来就应该让坦克发子弹了,我们下面来看一下如何让我们的坦克发出子弹. 前面我们用面向对象的思想对Tank进行了封装,又利用对象冒充实现了我们的坦克和敌人的坦克,仿照这种方式我们是不是也应该封装一个Bullet,答案是肯定的.好吧,那么我们再想想这个Bullet"类"都应该封装什么东西呢?位置应该有吧.子弹飞行的方向应该有吧.飞行的速

韩顺平html5课程分享:6小时编写经典坦克大战!

记起自己去年参加的一次面试,在做过Java多年的面试官面前发挥的并不好,但他一听说我会html5,立马眼睛发亮,不管不顾的想要和我签约...所以,现在为工作犯愁的朋友们,学好html5,绝对会为你找到好工作添加重要砝码! html5 大致是 (html+css3+javascript apis).一句话: html5 支持了css3 的强大的选择器和动画等功能+ 支持javascript 很多新的函数,所以html5就很强大了. 所以在此特意韩顺平老师的html5课程-6小时编写经典坦克大战.这

HTML5坦克大战(2)绘制坦克复习

html代码: 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 <title>坦克大战</title> 6 <script s

坦克大战系列(3.0版)

无论头上是怎样的天空,我准备承受任何风暴.--拜伦 本讲内容:坦克3.0版(面向对象的思想) 要求:画出我方坦克会动并且会发射子弹.画出敌人坦克 一.同一个包下建二个文件分别为:MyTankGame.Members(负责其它成员譬如:制造坦克.子弹等) MyTankGame类 /** * 功能:坦克游戏的3.0版本 * 1:画出坦克 * 2:实现我方坦克移动并且會發子彈,并 画出敌人的坦克 */ package a; import javax.swing.*; import java.awt.*