DDR爱好者之家 Design By 杰米
本文实例为大家分享了canvas实现贪吃蛇效果的具体代码,供大家参考,具体内容如下
效果展示:
源码展示:
页面布局展示:worm.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>贪吃蛇</title>
<style type="text/css">
canvas{
border: 1px solid black;
}
div{
width: 50px; height: 50px;
border: 1px solid black; cursor: pointer;
text-align: center; line-height: 50px;
}
</style>
<script type="text/javascript" src="/UploadFiles/2021-04-02/Node.js">
节点类的js :Node.js
/* 节点类 */
function Node (x, y) {
this.x=x;
this.y=y;
this.equals=function (i, j) {
return this.x==i && this.y==j;
};
}
舞台类js:Stage.js
/** 舞台类 */
function Stage () {
this.width=50;
this.height=50;
this.worm=new Worm();
/* 在canvas中绘制舞台的内容 */
this.print=function (ctx) {
for(i=0; i<this.width; i++){
for(j=0; j<this.height; j++){
//如果当前节点是蛇身子的一部分
//那么换一种颜色绘制
if(this.worm.contains(i,j)){
ctx.fillStyle="#ab55ff";
ctx.fillRect(i*10, j*10, 10, 10);
}else if(this.worm.food.equals(i, j)){
ctx.fillStyle="#000000";
ctx.fillRect(i*10, j*10, 10, 10);
}else{
ctx.fillStyle="#dddddd";
ctx.fillRect(i*10, j*10, 10, 10);
}
}
}
//在舞台的左上角绘制分数
ctx.font="30px Arial";
ctx.fillStyle="#880000";
ctx.fillText("score:"+SCORE, 10,40);
};
}
蛇类js:Worm.js
/** 蛇类 */
var UP=0;
var DOWN=1;
var LEFT=2;
var RIGHT=3;
var DIR=UP;
var SCORE=0;
var SPEED=300;
//蛇类初始化的形状
function Worm () {
this.nodes=[];
this.nodes[this.nodes.length]=new Node(20,10);
this.nodes[this.nodes.length]=new Node(20,11);
this.nodes[this.nodes.length]=new Node(20,12);
this.nodes[this.nodes.length]=new Node(20,13);
this.nodes[this.nodes.length]=new Node(20,14);
this.nodes[this.nodes.length]=new Node(20,15);
this.nodes[this.nodes.length]=new Node(21,15);
this.nodes[this.nodes.length]=new Node(22,15);
this.nodes[this.nodes.length]=new Node(23,15);
this.nodes[this.nodes.length]=new Node(24,15);
this.nodes[this.nodes.length]=new Node(24,16);
this.nodes[this.nodes.length]=new Node(24,17);
this.nodes[this.nodes.length]=new Node(24,18);
this.nodes[this.nodes.length]=new Node(24,19);
/* 蛇会走一步 */
this.step=function () {
//计算出头结点 把头节点添加到nodes数组中
var oldHead=this.nodes[0];
var newHead;
switch (DIR){
case UP:
if(oldHead.y-1<0){
newHead=new Node(oldHead.x, 49);
}else{
newHead=new Node(oldHead.x, oldHead.y-1);
}
break;
case DOWN:
if(oldHead.y+1>49){
newHead=new Node(oldHead.x, 0);
}else{
newHead=new Node(oldHead.x, oldHead.y+1);
}
break;
case LEFT:
if(oldHead.x-1<0){
newHead=new Node(49, oldHead.y);
}else{
newHead=new Node(oldHead.x-1, oldHead.y);
}
break;
case RIGHT:
if(oldHead.x+1>49){
newHead=new Node(0, oldHead.y);
}else{
newHead=new Node(oldHead.x+1, oldHead.y);
}
break;
}
this.nodes.unshift(newHead);
if(!this.food.equals(newHead.x, newHead.y)){
//把尾节点删掉 (在没有吃到食物的时候)
this.nodes.pop();
}else{
//吃到了食物 重新生成食物
this.food=this.randomFood();
SCORE+=10;
SPEED-=50;
endPrint();
startPrint();
}
};
/* 判断i,j节点是否是当前蛇身子的一部分 */
this.contains=function (i, j) {
for(k=0; k<this.nodes.length; k++){
var node=this.nodes[k];
if(node.x==i && node.y==j){
return true;
}
}
return false;
};
//声明生成食物的方法
this.randomFood=function () {
var x;
var y;
do{
x=Math.floor(Math.random()*50);
y=Math.floor(Math.random()*50);
}while(this.contains(x, y));
return new Node(x, y);
};
//声明食物
this.food=this.randomFood();
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
更新日志
2025年10月24日
2025年10月24日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]
