html5实现微信打飞机游戏


Posted in HTML / CSS onMarch 27, 2014

html5实现微信的打飞机游戏,利用这个小游戏学习一个HTML5吧,这是开发WEB的一个方向

复制代码
代码如下:

// JavaScript Document
var c = document.getElementById("dotu");
var cxt = c.getContext("2d");
var img = newImg("./assets/bg_01.jpg");
var fps;
cxt.drawImage(img,0,0,480,800);

var flivverLog = 0;
var flivver1 = newImg("./assets/flivver.png");
var flivver2 = newImg("./assets/flivver2.png");
var flivver3 = newImg("./assets/flivver3.png");

// 用于记录游戏的时间,越到后面越快
var time1 = 0;
var time2 = 80;

// 积分
var jifen = 0;

function getSudu(){
var number = parseInt(Math.random()*10);
if(number < 5 && number > 0){
return number;
}
return 1;
}
// 飞机的对象
function flivverObj(hp,ewidth,eheight,eimg,esudu){
// 随机的X
this.x = parseInt(Math.random()*460+1);
this.y = 0;
// 血量
this.hp = hp;
// 挨打
this.hit = 0;
// 是否死亡
this.over = 0;

this.width = ewidth;
this.height = eheight;
this.img = eimg;
this.sudu = esudu;
}

// 获取飞机
function getFlivver(type){
switch(type){
case 1:
return new flivverObj(100,50,30,flivver1,getSudu());
case 2:
return new flivverObj(500,70,90,flivver2,getSudu());
case 3:
return new flivverObj(1000,110,170,flivver3,getSudu());
}
}
function cartridge(x,y){
this.x = x;
this.y = y;
}

function gameover(){
window.clearTimeout(fps);
//$('#dotu').fadeOut();
$('.content').css('position','relative');
$('.content').append('<span style="position:absolute; top:5px; left:2px; font-size:150px; color:#cc0000; text-align:center" id="sil"></span>');
$('#sil').html('你').hide().fadeIn(1000,function(){
$(this).html('你屎').hide().fadeIn(1000,function(){
$(this).html('<a href="javascript:location.reload();" style="color:#cc0000" title="重新开始">你屎了</a>
' + jifen + ' 分').hide().fadeIn();
});
});
}

(function(cxt){
var dotu = {nums:0};
// 用于存放小飞机
var flivver = new Array();
var flivverImg = newImg("./assets/flivver.png");
// 自己
var me = {x:240,y:750};
var meImg = newImg('assets/me.png');
// 子弹
var cartridges = new Array();
var cartridgeImg = newImg('./assets/cartridge.png');

var boo1 = newImg('./assets/boo1.png');
var over = newImg('./assets/over.png');
//
dotu.update = function(){

dotu.setTimes();
// 设置背景
dotu.setBg();
// 设置小飞机
dotu.setFlivver();
// 画自己
dotu.setMe();
// 子弹
dotu.cartridge();

cxt.font = "italic 20px 微软雅黑";
cxt.strokeText("积分:" + jifen, 10, 30);

$('#fjs').html(flivver.length);
$('#zds').html(cartridges.length);
$('#scfj').html("1000/" + time2 + " 毫秒");
}

dotu.setTimes = function(){
time1++ ;
// 100 秒 1个档位
if(time1 == 1000){
time1 = 0;
time2 = (time2 == 20) ? 20 : time2 - 20;
}

}

/**
* 设置移动的背景
*/
dotu.setBg = function(){
dotu.nums++;
if(dotu.nums == 800){
dotu.nums = 0;
}
// 画布的背景
cxt.drawImage(img,0,dotu.nums,480,800);
cxt.drawImage(img,0,dotu.nums - 800,480,800);
}

dotu.setFlivver = function(){
// 生成飞机
if(dotu.nums % time2 == 0){
flivverLog++;
if(flivverLog % 6 == 0){
flivver.push(getFlivver(2));
}else if(flivverLog % 13 == 0){
flivver.push(getFlivver(3));
}else{
flivver.push(getFlivver(1));
}

}

for(a in flivver){

flivver[a].y += flivver[a].sudu;
// 如果超出屏幕将该小飞机删除
if(flivver[a].y > 780){
flivver.splice(a, 1);
}
// 将小飞机画到画布上

// 小飞机死亡
if(flivver[a].over > 0){
flivver[a].over --;

if(flivver[a].over > 20){
cxt.drawImage(boo1,flivver[a].x + flivver[a].width/2 - 20 ,flivver[a].y + flivver[a].height / 2 -10,41,39);
}else if(flivver[a].over > 2){
cxt.drawImage(over,flivver[a].x + flivver[a].width/2 - 20 ,flivver[a].y + flivver[a].height / 2 -10,40,43);
}else{
flivver.splice(a, 1);
}

}else{
cxt.drawImage(flivver[a].img,flivver[a].x,flivver[a].y,flivver[a].width,flivver[a].height);
// 判断自己是否死亡
if( me.x > (flivver[a].x - flivver[a].width + 20) && (me.x) <(flivver[a].x + flivver[a].width - 20) && (me.y) < (flivver[a].y + flivver[a].height + 20) && (me.y + 72) > (flivver[a].y - 20)){
gameover();
}

if(flivver[a].hit > 0){
cxt.drawImage(boo1,flivver[a].x + flivver[a].width/2 - 20 ,flivver[a].y + flivver[a].height / 2 -10,41,39);
//cxt.drawImage(boo1,flivver[a].x + 5 ,flivver[a].y,41,39);
flivver[a].hit--;
}
}

}
}

// 更新自己的距离
dotu.setMe = function(){
cxt.drawImage(meImg,me.x,me.y,64,72);
}

// 更新子弹方法
dotu.cartridge = function(){
if(dotu.nums % 10 == 0){
cartridges.push(new cartridge(me.x + 30,me.y));
}

for(i in cartridges){
// 飞到顶部就将OBJ删除掉
if(cartridges[i].y < 0){
cartridges.splice(i, 1);
continue;
}

cartridges[i].y -= 20;
// 将小飞机画到画布上
cxt.drawImage(cartridgeImg,cartridges[i].x,cartridges[i].y,7,17);

// 子弹碰到飞机的情况
for(j in flivver){
if(flivver[j].over > 0){
continue;
}
if(cartridges[i].x > flivver[j].x && cartridges[i].x < flivver[j].x+ flivver[j].width && cartridges[i].y > flivver[j].y && cartridges[i].y -flivver[j].height < flivver[j].y){

flivver[j].hit = 10;
$('#isdz').html('打中了编号' + j);

if(flivver[j].hp > 1){
flivver[j].hp -= 80;
}else{
flivver[j].over = 40;
jifen += 50000;
}
// 子弹消失
cartridges.splice(i, 1);
break;
}
}
}
}

// 绑定鼠标事件
c.addEventListener('mousemove', function onMouseMove(evt) {
me.x = evt.layerX - $('#dotu').offset().left - 32;
me.y = evt.layerY - 36 ;
$('#sbX').html(me.x);
$('#sbY').html(me.y);
});

fps = setInterval(dotu.update, 1000/100);
}(cxt))

function newImg(src){
var obj = new Image();
obj.src = src;
return obj;
}

//setInterval(h.update, 1000/65);

复制代码
代码如下:

<!DOCTYPE html>
<html xmlns="<a href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml</a>">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>打飞机 - 多途</title>
<script type="text/javascript" src="./jquery.min.1.7.1.js"></script>
<style>
body{padding:0; margin:0; text-align:center}
.content{border:1px #000 solid; width:480px; margin:0 auto; height:800px; display:block; font-size:72px;}
.info,.blog{border:1px #000 solid; position:fixed; top:5px; right:5px; width:150px; text-align:left}
.blog{ left:10px; background:#000; text-align:center; width:100px}
.blog a{ color: #FFF; text-decoration:none; font-size:15px; }
</style>
</head>
<body>
<div class="content"><canvas id="dotu" width="480" height="800"></canvas></div>
<div class="blog"><a href="/">回到博客首页</a></div>
<div class="info">
鼠标X:<span id="sbX"></span>
鼠标Y:<span id="sbY"></span>
小飞机数:<span id="fjs"></span>
子弹数:<span id="zds"></span>
打中:<span id="isdz"></span>
生成飞机时间:<span id="scfj"></span>

</div>
<script type="text/javascript" src="./dotu_game.js"></script>
</body>
</html>

HTML / CSS 相关文章推荐
使用CSS3的rem属性制作响应式页面布局的要点解析
May 24 HTML / CSS
CSS3感应鼠标的背景闪烁和图片缩放动画效果
May 14 HTML / CSS
CSS3实现自定义Checkbox特效实例代码
Apr 24 HTML / CSS
前端canvas水印快速制作(附完整代码)
Sep 19 HTML / CSS
检测浏览器是否支持html5视频的代码
Mar 28 HTML / CSS
html5 的a标签 Href 拨电话的写法
Nov 04 HTML / CSS
整理HTML5中表单的常用属性及新属性
Feb 19 HTML / CSS
HTML5 canvas基本绘图之图形变换
Jun 27 HTML / CSS
基于HTML5+CSS3实现简单的时钟效果
Sep 11 HTML / CSS
Canvas 像素处理之改变透明度的实现代码
Jan 08 HTML / CSS
CSS几步实现赛博朋克2077风格视觉效果
Jun 16 HTML / CSS
CSS实现切角+边框+投影+内容背景色渐变效果
Nov 01 HTML / CSS
html5 canvas fillRect坐标和大小的问题解决方法
Mar 26 #HTML / CSS
html5适合移动应用开发的12大特性
Mar 19 #HTML / CSS
用html5实现语音搜索框的方法
Mar 18 #HTML / CSS
HTMl5的存储方式sessionStorage和localStorage详解
Mar 18 #HTML / CSS
HTML5 Notification(桌面提醒)功能使用实例
Mar 17 #HTML / CSS
让IE9以下版本的浏览器兼容HTML5的方法
Mar 12 #HTML / CSS
HTML5实现的图片无限加载的瀑布流效果另带边框圆角阴影
Mar 07 #HTML / CSS
You might like
php调用KyotoTycoon简单实例
2015/04/02 PHP
php实现网页缓存的工具类分享
2015/07/14 PHP
微信随机生成红包金额算法php版
2016/07/21 PHP
PHP会话操作之cookie用法分析
2016/09/28 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
关于Aptana Studio生成自动备份文件的解决办法
2009/12/23 Javascript
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
2011/10/16 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
javascript 表格内容排序 简单操作示例代码
2014/01/03 Javascript
JS控制静态页面传递参数并获取参数应用
2016/08/10 Javascript
JavaScript字符串对象(string)基本用法示例
2017/01/18 Javascript
Javascript 严格模式use strict详解
2017/09/16 Javascript
Angular2使用SVG自定义图表(条形图、折线图)组件示例
2019/05/10 Javascript
Vue是怎么渲染template内的标签内容的
2020/06/05 Javascript
完美解决通过IP地址访问VUE项目的问题
2020/07/18 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
Python封装shell命令实例分析
2015/05/05 Python
详解Python中的变量及其命名和打印
2016/03/11 Python
Python加密方法小结【md5,base64,sha1】
2017/07/13 Python
Python基于分水岭算法解决走迷宫游戏示例
2017/09/26 Python
Python中scatter函数参数及用法详解
2017/11/08 Python
Python爬虫基础之XPath语法与lxml库的用法详解
2018/09/13 Python
python序列类型种类详解
2020/02/26 Python
python基于Kivy写一个图形桌面时钟程序
2021/01/28 Python
详解如何通过H5(浏览器/WebView/其他)唤起本地app
2017/12/11 HTML / CSS
英国领先的互联网葡萄酒礼品商:Vintage Wine & Port
2019/05/24 全球购物
保加利亚手表、香水、化妆品和珠宝购物网站:Brasty.bg
2020/04/22 全球购物
师德模范事迹材料
2014/06/03 职场文书
2014年监理个人工作总结
2014/12/11 职场文书
先进事迹材料怎么写
2014/12/30 职场文书
幼儿园教师师德师风承诺书
2015/04/28 职场文书
餐饮服务食品安全承诺书
2015/04/29 职场文书
小平您好观后感
2015/06/09 职场文书
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers
Python PIL按比例裁剪图片
2022/05/11 Python