在JavaScript中,不要在变量为定义之前去使用,这样很难察觉并且无法运行。

颜色不对。

当我的坦克移动时,敌人坦克消失。

tankGame3.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
</head>
<body onkeydown="getCommand()">
<h6>HTML5坦克大战</h6>
<!--这是坦克大战的战场 -->
<canvas id="tankMap" width="400px" height="300px" style="background-color:black"></canvas>
<script type="text/javascript" src="tankGame3.js"></script>
<script type="text/javascript">

//定义一个Hero类

//把绘制坦克封装成一个函数,将来可以作为成员函数

//x表示坦克的横坐标,y表示纵坐标,direct方法

//

//得到画布
var canvas1=document.getElementById("tankMap");
//得到绘图上下文(你可以理解是画笔)
var cxt=canvas1.getContext("2d");

var hero=new Hero(140,140,0,heroColor);
//定义敌人的坦克(敌人的坦克有多少?单个定义还是放在数组中。
var enemyTanks=new Array();
//先死后活,定3个,后面我们把敌人坦克的数量做成变量
for(var i=0;i<6;i++){
//创建一个坦克
var enemyTank=new EnemyTank((i+1)*50,0,2,enemyColor);
//把这个坦克放入数组
enemyTanks[i]=enemyTank;
//画出这个坦克
//drawTank(enemyTank);
}

flashTankMap();
//专门写一个函数,用于定时刷新我们的作战区,把要在作战区出现的元素
//(自己坦克,敌人坦克,子弹,草坪,障碍物)

function flashTankMap(){
cxt.clearRect(0,0,400,300);
//我的坦克
drawTank(hero);
//敌人的坦克
for(var i=0;i<3;i++){
drawTank(enemyTanks[i]);
}
}

//这是一个接收用户按键函数
function getCommand(){
var code=event.keyCode;
switch(code){
case 87:
hero.moveUp();

break;
case 68:
hero.moveRight();
break;
case 83:
hero.moveDown();
break;
case 65:
hero.moveLeft();
break;
}

//drawTank(hero);
//要触发这个函数flashTankMap
flashTankMap();

//重新绘制所有的敌人坦克,你可以在这里写代码(思想:每隔一段时间来刷新画布。。
//用一个函数,专门用于定时刷新屏幕。

}

</script>

tankGame.js

//为了编程方便,我们定义两个颜色数组
var heroColor=new Array("#BA9658","#FEF26E");
var enemyColor=new Array("#00A2B5","#00FEFE");
//这是一个坦克类
function Tank(x, y, direct,color){
this.x=x;
this.y=y;
this.speed=1;
this.direct=direct;
this.color=color;
//上移
this.moveUp=function(){
this.y-=this.speed;
this.direct=0;
}
//右移
this.moveRight=function(){
this.x+=this.speed;
this.direct=1;
}
//下移
this.moveDown=function(){
this.y+=this.speed;
this.direct=2;
}
//左移
this.moveLeft=function(){
this.x-=this.speed;
this.direct=3;
}
}

function Hero(x,y,direct,color){
//下面两句话的作用是通过对象冒充,达到继承的效果
this.tank=Tank;
this.tank(x,y,direct,color);
}

//定义一个EnemyTank类
function EnemyTank(x, y, direct,color){
//也通过对象冒充,来继承Tank
this.tank=Tank;
this.tank(x,y,direct,color);
}
//将来这个函数可以画坦克
//绘制坦克
function drawTank(tank){
//考虑方向
switch(tank.direct){
case 0:
case 2:
cxt.fillStyle=tank.color[0];
//韩老师使用先死-->后活
cxt.fillRect(tank.x, tank.y, 5, 30);
//画出右边的矩形
cxt.fillRect(tank.x+15, tank.y,5,30);
cxt.fillRect(tank.x+6, tank.y+5,8,20);
//画出圆形坦克
cxt.fillStyle=tank.color[1];
cxt.arc(tank.x+10, tank.y+15,4,0,Math.PI*2,true);
cxt.fill();
//画出炮筒
cxt.strokeStyle=tank.color[1];
cxt.lineWidth=2;
cxt.beginPath();
cxt.moveTo(tank.x+10, tank.y+15);
if(tank.direct==0){
cxt.lineTo(tank.x+10, tank.y);
}else if(tank.direct==2){
cxt.lineTo(tank.x+10, tank.y+30);
}
cxt.closePath();
cxt.stroke();
break;
case 1:
case 3:
cxt.fillStyle=tank.color[0];
//韩老师使用先死-->后活
cxt.fillRect(tank.x, tank.y, 30, 5);

//画出右边的矩形
cxt.fillRect(tank.x, tank.y+15,30,5);
//画出中间矩形
cxt.fillRect(tank.x+5, tank.y+6,20,8);
//画出圆形坦克
cxt.fillStyle=tank.color[1];
cxt.arc(tank.x+15, tank.y+10,4,0,Math.PI*2,true);
cxt.fill();
//画出炮筒
cxt.strokeStyle=tank.color[1];
cxt.lineWidth=2;
cxt.beginPath();
cxt.moveTo(tank.x+15, tank.y+10);
if(tank.direct==1){
cxt.lineTo(tank.x+30, tank.y+10);
}else if(tank.direct==3){
cxt.lineTo(tank.x, tank.y+10);
}
cxt.closePath();
cxt.stroke();
break;
}

}

(3)自己的坦克可以发送子弹,只能发送一颗。

1.子弹,不管是敌人的还是我的,都是作战区的一个元素。因此我们可以定义为全局变量。

OOP,所以子弹也是一个对象。

2 去处理用户按下j键时的反应

3.画出自己的子弹->写了一个函数(思想)[自己回去把坦克大战写个n遍]。

4.在哪里调用。刷新作战区的函数调用。

5.考虑子弹位置的编写。

6.子弹是不动的,《让子弹飞一会儿》。

7.子弹坐标怎样自动地变换,思想是我们可以定时去修改子弹的目标。

8.在什么地方去调用这个bullet。

HTML5坦克大战1的更多相关文章

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

    之前我们有分享过不少经典的HTML5游戏,有些还是很有意思的,比如HTML5版切水果游戏和HTML5中国象棋游戏.今天要分享的是一款简化版的HTML5坦克大战游戏,方向键控制坦克的行进方向,空格键发射 ...

  2. HTML5坦克大战(韩顺平版本)

    HTML5坦克大战(韩顺平版本) 2017-3-22 22:46:22 by SemiconductorKING 去年暑假学习了一下HTML5实现简单的坦克大战,觉得对JavaScript初学者来说, ...

  3. HTML5坦克大战

    在JavaScript中,不要在变量为定义之前去使用,这样很难察觉并且无法运行. 颜色不对. 当我的坦克移动时,敌人坦克消失. tankGame3.html <!DOCTYPE html> ...

  4. HTML5坦克大战(1)绘制坦克

    坦克尺寸如下: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head&g ...

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

    html代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head&g ...

  6. HTML5 坦克大战

    代码 点击打开链接

  7. html5制作坦克大战

    全部html5都采用绘图技术完成.坦克是画出来的.(坦克,子弹,墙,水,草坪) 首先我们画出坦克. 坦克是两边两个矩形,中间一个大矩形,矩形了有一个圆,还有一根线. 画出坦克的思路是以坦克的左上角为参 ...

  8. 《HTML5经典坦克大战》游戏(代码)

    前几天粗略地学了HTML5,然后就用它写了一个<经典坦克大战>游戏. 现在想分享一下我写的代码,写得不好请大家多多指教. 给大家推荐一个网站,这个网站是为大学生而做,为方便学习编程的同学而 ...

  9. 小强的HTML5移动开发之路(7)——坦克大战游戏1

    来自:http://blog.csdn.net/dawanganban/article/details/17693145 上一篇中我们介绍了关于Canvas的基础知识,用Canvas绘制各种图形和图片 ...

随机推荐

  1. Unity动态字体在手机上出现字体丢失问题解决

    在我们游戏的开发过程中,在部分手机上运行游戏的时候,出现了字体丢失的问题,出问题的手机似乎用的都是高通芯片. 使用的unity是4.2.0版本,ngui是3.4.9版本. 在unity的论坛及unit ...

  2. gulp配置,实例演示

    项目完成后的目录 我们所需要的插件为:gulp-minify-css gulp-concat gulp-uglify gulp-rename del 如下图所示,完成后的项目目录结构: 附加,获取pa ...

  3. Unity3D引擎之渲染技术系列一

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者.国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...

  4. PL/0编译程序

    Pl/0语言文法的BNF表示: 〈程序〉→〈分程序>. 〈分程序〉→ [<常量说明部分>][<变量说明部分>][<过程说明部分>]〈语句〉 <常量说明部 ...

  5. ubuntu 下使用polipo转换HTTP代理

    ***默认是用Socks5协议的,对于Terminal的get,wget等走http协议的地方是无能为力的,所以需要转换成http代理,加强通用性,这里使用的转换方法是基于Polipo的. sudo ...

  6. 【ubantu】在ubantu下如何对svn进行操作命令

    ubantu对svn进行操作命令,如下所示: 1.将文件checkout到本地目录svn checkout path(path是服务器上的目录)例如:svn checkout svn://192.16 ...

  7. ps -ef 和 aux 区别

    Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...

  8. VB.NET的前世今生

    [前言]初次见到这个强大的东西.一看名字就没有了陌生感,由于它和我曾经见过的VB肯定有非常多的联系. 俗话说,看人看相,了解看感觉(O(∩_∩)O~~几乎相同这个意思吧). 要想了解VB.net就要从 ...

  9. Lumen开发:简单实现auth用户认证

    打开bootstrap/app.php,取消下面两段代码的注释, $app->middleware([ App\Http\Middleware\ExampleMiddleware::class ...

  10. 【原创】Hibernate自动生成(1)

    本实战是博主初次学习Java,分析WCP源码时,学习HibernateTools部分的实战,由于初次接触,难免错误,仅供参考,希望批评指正. 开发环境: Eclipse Version: Photon ...