美文网首页
HTML5的canvas+JavaScript打造一个“贪吃饼”

HTML5的canvas+JavaScript打造一个“贪吃饼”

作者: 9f0ac8d69b1f | 来源:发表于2019-08-10 10:48 被阅读0次

先上效果图:

image

再上HTML代码:


<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>小游戏</title>

</head>

<br/>

<body style="text-align: center;padding: 20px">

</body>

<script src="1.js"></script>

</html>

再上JavaScript代码:


var canvas = document.createElement("canvas");

var ctx = canvas.getContext("2d");

canvas.width = 1200 ;

canvas.height = 600;

canvas.style="border:5px solid #000000;";

var val=0

var r_max=200

var keysDown = {};

var zd_zb=[]

addEventListener("keydown", function (e) {

keysDown[e.keyCode] = true;

// console.log(keysDown)

// console.log(Object.keys(keysDown).length==0)

}, false);

addEventListener("keyup", function (e) {

if (e.keyCode==32){

zd_zb.push([yuan.x,yuan.y])

}

delete keysDown[e.keyCode];

// console.log(keysDown)

// console.log(Object.keys(keysDown).length==0)//没按下

}, false);

var yuan= {

x :canvas.width / 2,

y : canvas.height / 2,

r:12

};

function randomNum(minNum,maxNum){

    switch(arguments.length){

        case 1:

            return parseInt(Math.random()*minNum+1,10);

      break;

        case 2:

            return parseInt(Math.random()*(maxNum-minNum+1)+minNum,10);

        break;

        default:

            return 0;

            break;

    }

}

var sw={

x:randomNum(0,canvas.width),

y:randomNum(0,canvas.height),

zb:[]

}

for(var i=0;i<20;i++){

sw.zb.push([randomNum(0,canvas.width),randomNum(0,canvas.height/2)])

}

var update = function (xx=10) {

if (38 in keysDown) { //  up

yuan.y -= xx;

}

if (40 in keysDown) { // down

yuan.y += xx;

}

if (37 in keysDown) { //  left

yuan.x -=xx;

}

if (39 in keysDown) { // right

yuan.x += xx;

}

if (32 in keysDown) { //  发射子弹

// yuan.y -= xx;

//自动

//zd_zb.push([yuan.x,yuan.y])//注释掉这段即可关闭全自动模式

//break

}

// console.log(zd_zb)

if(yuan.x>canvas.width){

yuan.x=canvas.width

}

if(yuan.x<0){

yuan.x=0

}

if(yuan.y>canvas.height){

yuan.y=canvas.height

}

if(yuan.y<0){

yuan.y=0

}

if(Object.keys(keysDown).length==0){

//自动

}

for (var o = 0; o < sw.zb.length; o++) {

sw_x=sw.zb[o][0]

sw_y=sw.zb[o][1]

sw.zb[o][1]+=1

if(sw.zb[o][1]>canvas.height){

sw.zb.splice(o,1)

sw.zb.push([randomNum(0,canvas.width),randomNum(0,canvas.height/2)])

continue

}

var z = Math.abs(((sw_x-yuan.x)**2+(sw_y-yuan.y)**2)**0.5)-yuan.r

if (z<10){

// sw={

// x:randomNum(0,canvas.width),

// y:randomNum(0,canvas.height),

// }

sw.zb.splice(o,1)

sw.zb.push([randomNum(0,canvas.width),randomNum(0,canvas.height/2)])

yuan.r += xx/8;

val+=1

//限制大小

if(yuan.r>r_max){

yuan.r=r_max

}

continue

}

}

};

// for(var i=0;i<10;i++){

// console.log("zd.zb")

// }

var t=0

var render = function () {

//清空画布

canvas.height=canvas.height; //清空画布

//显示子弹

//

t+=1

//if(t==20){

t=0

flx=1

for(var i=0;i<zd_zb.length;i++){

t+=1

zd_x=zd_zb[i][0]

zd_y=zd_zb[i][1]

zd_zb[i][1]-=5

// if(zd_zb[i][1]<0){

// delete zd_zb[i]

// }

for (var o = 0; o < sw.zb.length; o++) {

sw_x=sw.zb[o][0]

sw_y=sw.zb[o][1]

zd_z = Math.abs(((sw_x-zd_x)**2+(sw_y-zd_y)**2)**0.5)

if (zd_z<10){

// sw={

// x:randomNum(0,canvas.width),

// y:randomNum(0,canvas.height),

// }

sw.zb.splice(o,1)

sw.zb.push([randomNum(0,canvas.width),randomNum(0,canvas.height/2)])

zd_zb.splice(i,1)

//continue

//delete zd_zb。a.splice(1)[i]

yuan.r += xx/8;

val+=1

//限制大小

if(yuan.r>r_max){

yuan.r=r_max

}

flx=0

continue

}

}

if(flx==0){

flx=1

continue

}

if(zd_zb[i][1]>0){

ctx.beginPath()//开始画

ctx.fillStyle="#FF0000";//颜色

ctx.arc(zd_x,zd_y,3,0,360);//画圆

ctx.fill()//填充

ctx.closePath()//画完

}

}

//}

ctx = canvas.getContext("2d");

ctx.beginPath()

ctx.arc(yuan.x,yuan.y,yuan.r,0,360);

ctx.fillStyle="#000000";

ctx.fill()

ctx.closePath()

ctx.beginPath()

ctx.fillStyle="#FFFFFF";

ctx.textBaseline="alphabetic";

ctx.textAlign="center"; 

ctx.fillText(val,yuan.x,yuan.y+4)

// ctx.measureText()

ctx.closePath()

for(var i=0;i<sw.zb.length;i++){

ctx.beginPath()

ctx.fillStyle="#FF0000";

ctx.arc(sw.zb[i][0],sw.zb[i][1],10,0,360);

ctx.fill()

ctx.closePath()

}

};

var main=function () {

update(xx=5);

render()

requestAnimationFrame(main);

}

render()

main()

document.body.appendChild(canvas);

相关文章

  • HTML5的canvas+JavaScript打造一个“贪吃饼”

    先上效果图: 再上HTML代码: 再上JavaScript代码:

  • canvas教程之《贪吃蛇》

    本次我会带领大家用html5的新标签 canvas 来制作一个简单的贪吃蛇的游戏。本章学习需要了解canvas的基...

  • 第一次做千层饼味道如何?啊?瞬间被吃光!

    我做的鸡蛋灌饼和韭菜饼得到大家的认可,只是食肉兽老公说好像少点什么……哟,想吃肉! 世上本没有美食,贪吃的人多了就...

  • HTML5 Canvas(实战:绘制饼图2 Tooltip)

    继上一篇HTML5 Canvas(实战:绘制饼图)之后,笔者研究了一下如何给饼图加鼠标停留时显示的提示框。 事件绑...

  • 猫王榴莲饼加盟优势具体有哪些?

    猫王榴莲饼从创立至今就一直致力于打造榴莲饼时尚品牌。猫王榴莲饼不管是从原材料的挑选、制作工艺、产品包装设计等,都严...

  • 此饼虽好,可不要贪吃哦

    月是故乡明 味是家乡浓 月饼是久负盛名的中国传统糕点之一,中秋节节日食俗。月饼圆又圆,又是合家分吃,象征着团圆和睦...

  • 无标题文章

    越南雄阳美协兴榴莲饼怎么样?【贪吃二师兄】淘宝店,厂家授权! 购买请点击 多买多优惠活动时间2018-10-10 ...

  • 2017-06-03

    贪吃蛇啊, 贪吃蛇, 你贪吃的是你的食物, 我贪吃的是对世间的留恋, 美女, 金钱, 路上的风景……

  • HTML5存储

    HTML5学习笔记 Web存储 HTML5 web存储,一个比cookie更好的本地存储方式。 什么是html5 ...

  • web本地存储

    HTML5 Web 存储 HTML5 web 存储,一个比cookie更好的本地存储方式。 什么是 HTML5 W...

网友评论

      本文标题:HTML5的canvas+JavaScript打造一个“贪吃饼”

      本文链接:https://www.haomeiwen.com/subject/nmgljctx.html