pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

HTML5實現經典坦克大戰坦克亂走還能發出一個子彈

在上篇文章中為大家介紹了如何使用HTML5實現一個可以移動的小坦克,而在本文將帶領大家進入坦克大戰,喜歡HTML5的朋友可不要錯過了哈

 

 

復制代碼 代碼如下:
<pre name="code" class="html">tank.html</pre><pre name="code" class="html"><!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
</head>
<body onkeydown="getCommand();">
<h1>hmtl5-經典的坦克大戰</h1>
<!--坦克大戰的戰場-->
<canvas id="tankMap" width="400px" height="300px" style="background-color:black"></canvas>
<span id="aa">數據</span>
<!--把tankGames.js引入到本頁面-->
<script type="text/javascript" src="tank.js"></script>
<script type="text/javascript">
//得到畫布
var canvas1=document.getElementById("tankMap");
//得到繪圖上下文(你可以理解是畫筆)
var cxt=canvas1.getContext("2d");
//我的坦克 hero
//方向
var hero=new Hero(140,140,0,heroColor);
//定義一顆空子彈
var heroBullet=null;
//定義敵人的坦克(敵人的坦克有多少? 思路 : 是單個單個的定義,還是放在數組中?)
var enemyTanks=new Array();
//先死后活 ,定3個,后面我們把敵人坦克的數量,作出變量
//0->上, 1->右, 2->下 3->左
for(var i=0;i<3;i++){
//創建一個坦克
var enemyTank=new EnemyTank((i+1)*50,0,2,enmeyColor);
//把這個坦克放入數組
enemyTanks[i]=enemyTank;
}
//先調用一次
flashTankMap();
//專門寫一個函數,用于定時刷新我們的作戰區,把要在作戰區出現的元素(自己坦克,敵人坦克,子彈,炸彈,
//障礙物...)->游戲思想
function flashTankMap(){
//把畫布清理
cxt.clearRect(0,0,400,300);
//我的坦克
drawTank(hero);
//畫出自己的子彈
//子彈飛效果是怎么出現的?[答 : 首先我們應該每隔一定時間(setInterval)就去刷新作戰區,如果在刷新的時候,子彈坐標變換了,給人的感覺就是子彈在飛!]
drawHeroBullet();
//敵人的坦克
//畫出所有敵人坦克
for(var i=0;i<3;i++){
drawTank(enemyTanks[i]);
}
}
//這是一個接受用戶按鍵函數
function getCommand(){
//我怎么知道,玩家按下的是什么鍵
//說明當按下鍵后 事件--->event對象----->事件處理函數()
var code=event.keyCode;//對應字母的ascii碼->我們看碼表
switch(code){
case 87://上
hero.moveUp();
break;
case 68:
hero.moveRight();
break;
case 83:
hero.moveDown();
break;
case 65:
hero.moveLeft();
break;
case 74:
hero.shotEnemy();
break;
}
//觸發這個函數 flashTankMap();
flashTankMap();
//重新繪制所有的敵人的坦克.你可以在這里寫代碼(思想,我們干脆些一個函數,專門用于定時刷新我們的畫布[作戰區])
}
//每隔100毫秒去刷新一次作戰區
window.setInterval("flashTankMap()",100);
</script>
</body>
</html></pre>


tank.js

復制代碼 代碼如下:
<pre></pre>
<pre name="code" class="html"><pre name="code" class="javascript">//為了編程方便,我們定義兩個顏色數組
var heroColor=new Array("#BA9658","#FEF26E");
var enmeyColor=new Array("#00A2B5","#00FEFE");
//其它的敵人坦克,這里的擴展性,還是不錯的.
//子彈類
function Bullet(x,y,direct,speed){
this.x=x;
this.y=y;
this.direct=direct;
this.speed=speed;
this.timer=null;
this.isLive=true;
this.run=function run(){
//在該表這個子彈的坐標時,我們先判斷子彈是否已經到邊界
if(this.x<=0||this.x>=400||this.y<=0||this.y>=300){
//子彈要停止.
window.clearInterval(this.timer);
//子彈死亡
this.isLive=false;
}else{
//這個可以去修改坐標
switch(this.direct){
case 0:
this.y-=this.speed;
break;
case 1:
this.x+=this.speed;
break;
case 2:
this.y+=this.speed;
break;
case 3:
this.x-=this.speed;
break;
}
}
document.getElementById("aa").innerText="子彈x="+this.x+" 子彈y="+this.y;
}
}
//這是一個Tank類
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;
}
}
//定義一個Hero類
//x 表示坦克的 橫坐標, y 表示縱坐標, direct 方向
function Hero(x,y,direct,color){
//下面兩句話的作用是通過對象冒充,達到繼承的效果
this.tank=Tank;
this.tank(x,y,direct,color);
//增加一個函數,射擊敵人坦克.
this.shotEnemy=function(){
//創建子彈, 子彈的位置應該和hero有關系,并且和hero的方向有關.!!!
//this.x 就是當前hero的橫坐標,這里我們簡單的處理(細化)
switch(this.direct){
case 0:
heroBullet=new Bullet(this.x+9,this.y,this.direct,1);
break;
case 1:
heroBullet=new Bullet(this.x+30,this.y+9,this.direct,1);
break;
case 2:
heroBullet=new Bullet(this.x+9,this.y+30,this.direct,1);
break;
case 3: //右
heroBullet=new Bullet(this.x,this.y+9,this.direct,1);
break;
}
//調用我們的子彈run, 50 是老師多次測試得到的一個結論.
var timer=window.setInterval("heroBullet.run()",50);
//把這個timer賦給這個子彈(js對象是引用傳遞!)
heroBullet.timer=timer;
}
}
//定義一個EnemyTank類
function EnemyTank (x,y,direct,color){
//也通過對象冒充,來繼承Tank
this.tank=Tank;
this.tank(x,y,direct,color);
}
//畫出自己的子彈,多說一句,你也可以把該函數封裝到Hero類中
function drawHeroBullet(){
//這里,我們加入了一句話,但是要知道這里加,是需要對整個程序有把握
if(heroBullet!=null&&heroBullet.isLive){
cxt.fillStyle="#FEF26E";
cxt.fillRect(heroBullet.x,heroBullet.y,2,2);
}
}
//繪制坦克
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,360,true);
cxt.fill();
//畫出炮筒(直線)
cxt.strokeStyle=tank.color[1];
//設置線條的寬度
cxt.lineWidth=1.5;
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,360,true);
cxt.fill();
//畫出炮筒(直線)
cxt.strokeStyle=tank.color[1];
//設置線條的寬度
cxt.lineWidth=1.5;
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;
}
}
</pre>


<pre></pre>
</pre>
【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

這篇文章主要介紹了有關HTML5頁面在iPhoneX適配問題,需要的朋友可以參考下
本篇文章主要介紹了html5中canvas圖表實現柱狀圖的示例,本文使用canvas來實現一個圖表,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
Adobe公司出品的多媒體處理軟件產品線較多,涵蓋了音視頻編輯、圖像處理、平面設計、影視后期等領域。這篇文章主要介紹了Adobe Html5 Extension開發初體驗圖文教程,非常不錯,需要的朋
這篇文章主要介紹了基于HTML5的WebGL經典3D虛擬機房漫游動畫,需要的朋友可以參考下
這篇文章主要介紹了手機端用rem+scss做適配的詳解,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
本篇文章主要介紹了canvas 實現 github404動態效果的示例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
主站蜘蛛池模板: 不锈钢反应釜,不锈钢反应釜厂家-价格-威海鑫泰化工机械有限公司 不干胶标签-不干胶贴纸-不干胶标签定制-不干胶标签印刷厂-弗雷曼纸业(苏州)有限公司 | 恒温恒湿试验箱厂家-高低温试验箱维修价格_东莞环仪仪器_东莞环仪仪器 | 航拍_专业的无人机航拍摄影门户社区网站_航拍网 | 注塑_注塑加工_注塑模具_塑胶模具_注塑加工厂家_深圳环科 | 泥浆在线密度计厂家-防爆数字压力表-膜盒-远传压力表厂家-江苏大亚自控设备有限公司 | 3A别墅漆/3A环保漆_广东美涂士建材股份有限公司【官网】 | 米顿罗计量泵(科普)——韬铭机械| 广东恩亿梯电源有限公司【官网】_UPS不间断电源|EPS应急电源|模块化机房|电动汽车充电桩_UPS电源厂家(恩亿梯UPS电源,UPS不间断电源,不间断电源UPS) | 铝板冲孔网,不锈钢冲孔网,圆孔冲孔网板,鳄鱼嘴-鱼眼防滑板,盾构走道板-江拓数控冲孔网厂-河北江拓丝网有限公司 | 高温链条油|高温润滑脂|轴承润滑脂|机器人保养用油|干膜润滑剂-东莞卓越化学 | 恒压供水控制柜|无负压|一体化泵站控制柜|PLC远程调试|MCGS触摸屏|自动控制方案-联致自控设备 | 影合社-影视人的内容合作平台| 淘气堡_室内儿童乐园_户外无动力儿童游乐设备-高乐迪(北京) | 生态板-实木生态板-生态板厂家-源木原作生态板品牌-深圳市方舟木业有限公司 | 重庆监控_电子围栏设备安装公司_门禁停车场管理系统-劲浪科技公司 | 小型UV打印机-UV平板打印机-大型uv打印机-UV打印机源头厂家 |松普集团 | 西宁装修_西宁装修公司-西宁业之峰装饰-青海业之峰墅级装饰设计公司【官网】 | 双吸泵,双吸泵厂家,OS双吸泵-山东博二泵业有限公司 | 杭州翻译公司_驾照翻译_专业人工翻译-杭州以琳翻译有限公司官网 组织研磨机-高通量组织研磨仪-实验室多样品组织研磨机-东方天净 | 杭州顺源过滤机械有限公司官网-压滤机_板框压滤机_厢式隔膜压滤机厂家 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库-首页-东莞市傲马网络科技有限公司 | 【甲方装饰】合肥工装公司-合肥装修设计公司,专业从事安徽办公室、店面、售楼部、餐饮店、厂房装修设计服务 | 安徽净化工程设计_无尘净化车间工程_合肥净化实验室_安徽创世环境科技有限公司 | 对照品_中药对照品_标准品_对照药材_「格利普」高纯中药标准品厂家-成都格利普生物科技有限公司 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 山东PE给水管厂家,山东双壁波纹管,山东钢带增强波纹管,山东PE穿线管,山东PE农田灌溉管,山东MPP电力保护套管-山东德诺塑业有限公司 | 橡胶电子拉力机-塑料-微电脑电子拉力试验机厂家-江苏天源 | 工业淬火油烟净化器,北京油烟净化器厂家,热处理油烟净化器-北京众鑫百科 | 塑胶地板-商用PVC地板-pvc地板革-安耐宝pvc塑胶地板厂家 | 广州昊至泉水上乐园设备有限公司 | 防爆暖风机_防爆电暖器_防爆电暖风机_防爆电热油汀_南阳市中通智能科技集团有限公司 | 二次元影像仪|二次元测量仪|拉力机|全自动影像测量仪厂家_苏州牧象仪器 | 微水泥_硅藻泥_艺术涂料_艺术漆_艺术漆加盟-青岛泥之韵环保壁材 武汉EPS线条_EPS装饰线条_EPS构件_湖北博欧EPS线条厂家 | 混合反应量热仪-高温高压量热仪-微机差热分析仪DTA|凯璞百科 | 蒜肠网-动漫,二次元,COSPLAY,漫展以及收藏型模型,手办,玩具的新媒体.(原变形金刚变迷TF圈) | 冷却塔减速机器_冷却塔皮带箱维修厂家_凉水塔风机电机更换-广东康明冷却塔厂家 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 美名宝起名网-在线宝宝、公司、起名平台 | 浙江栓钉_焊钉_剪力钉厂家批发_杭州八建五金制造有限公司 | 煤机配件厂家_刮板机配件_链轮轴组_河南双志机械设备有限公司 | 标准件-非标紧固件-不锈钢螺栓-非标不锈钢螺丝-非标螺母厂家-三角牙锁紧自攻-南京宝宇标准件有限公司 | 非小号行情 - 专业的区块链、数字藏品行情APP、金色财经官网 |