编程技术 2023-03-10 05:40:34 评论:0    浏览:31    

游戏效果图

下面将把该源码分享给大家!

各位看官老爷,由于代码过长需要文档版源码来我的前端群581549454,已上传到群文件

js源代码:

window.onload = function() {

var wrap = document.getElementsByClassName("wrap")[0];

var uls = document.getElementsByClassName("sbody")[0];

var hand = document.getElementsByClassName("hand")[0];

var food = document.getElementsByClassName("food")[0]; //食物

var lis = document.getElementsByTagName("li");

var fens = document.getElementById("fens");

//让头部动起来

//判断方向的标志

var handT = false; //ture上false下

var handL = false; //ture左false右

//控制定时器频率的

var seep = 200;

//键盘方向标志

var handCt = false; //t被按f没有

var handTop = 180,

handLeft = 180; //初始值

var stime;

//本体和框架的宽高

var handW = 30,

handH = 30;

var wrapW = 900,

wrapH = 600;

hand.style.top = handTop "px";

hand.style.left = handLeft "px";

//食物闪动

setInterval(function() {

if(food.style.opacity == "1") {

food.style.opacity = "0.3";

} else {

food.style.opacity = "1";

}

}, 600)

//存储身体各位置数组

//存储位置数组

var arrL = [];

var arrT = [];

function handMove() {

stime = setInterval(function() {

foodPingk();

//-----sbody位置刷新函数,要写在hand位置获得之前才行

//不然会重叠,因为是每次头部最后再移动位移就会先跑到前面了

for(var i = lis.length - 1; i > 0; i--) {

lis[i].style.left = lis[i - 1].style.left;

lis[i].style.top = lis[i - 1].style.top;

}

//判断键盘上上下按键

if(handCt) {

if(handT) {

if(handTop <= 0) { //边缘碰撞检测

handTop = wrapH - handH;

} else {

handTop -= 30;

}

} else {

if(handTop >= (wrapH - handH)) {

handTop = 0;

} else {

handTop = 30;

}

}

//console.log(handTop);

hand.style.top = handTop "px";

} else {

if(handL) {

if(handLeft <= 0) {

handLeft = wrapW - handW;

} {

handLeft -= 30;

}

} else {

if(handLeft >= (wrapW - handW)) {

handLeft = 0;

} else {

handLeft = 30;

}

}

//console.log(handLeft);

hand.style.left = handLeft "px";

}

//存储位置数组

arrL = [];

arrT = [];

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

arrL.push(lis[i].style.left);

arrT.push(lis[i].style.top);

}

console.log(arrL);

console.log(arrT);

//是否自杀了

zisha();

}, seep)

}

//判断是否撞到自己的函数

function zisha() {

//如果数组头部第一个和arrT、arrL里其他重复就是是叠加了

for(var i = 1; i < arrT.length; i ) {

if(arrT[0] == arrT[i] && arrL[0] == arrL[i]) {

fens.innerHTML = "游戏结束:" fen "分<br/>点击任意键返回";

uls.style.zIndex = "0";

fen = 0;

fens.style.fontSize = "100px";

fens.style.lineHeight = "120px";

clearInterval(stime);

uls.style.opacity = "0.2";

document.addEventListener("keydown", function() {

//点击任意键返回

location.reload();

}, false)

}

}

}

//------随机产生的食物的位置

function getRandom(min, max) {

return Math.floor(Math.random() * (max - min) min);

}

//宽度30个,高度20个

function foods() {

//food.style.backgroundColor = "rgba(" getRandom(0, 255) "," getRandom(0, 255) "," getRandom(0, 255) ",1)";

var foodRandomT = getRandom(0, 20);

var foodRandomL = getRandom(0, 30);

//不把食物在身体上

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

while(foodRandomT == arrT[i] && foodRandomL == arrL[i]) {

foodRandomT = getRandom(0, 20);

foodRandomL = getRandom(0, 30);

i = 0;

}

}

food.style.top = foodRandomT * 30 "px";

food.style.left = foodRandomL * 30 "px";

}

foods();

//-----本体碰撞框内检测

function sbodyPingk() {

//碰到上下检测

if(handTop <= 0) {

handTop = wrapH - handH;

} else if(handTop >= (wrapH - handH)) {

handTop = 0;

}

//碰到左右检测

if(handLeft <= 0) {

handLeft = wrapW - handW;

} else if(handLeft >= (wrapW - handW)) {

handLeft = 0;

}

}

//-----食物碰撞监测

var fen = 0;

function foodPingk() {

var foodW = 30,

foodH = 30;

var foodLeft = food.offsetLeft;

var foodTop = food.offsetTop;

var foodRight = foodLeft foodW;

var foodBottom = foodTop foodH;

//碰撞情况,完全重叠

if(foodLeft == handLeft && handTop == foodTop) {

shuaxin();

}

}

//刷新的函数

function shuaxin() {

foods();

if(fens.style.fontSize == "300px") {

fens.style.fontSize = "50px";

} else {

fens.style.fontSize = "300px";

}

fen = 1;

fens.innerHTML = fen;

//增加一个

var newLi = document.createElement("li");

uls.appendChild(newLi);

}

//-----同样的键值按两次不触发

var TkeyCode = true,

TkeyOld = 0;

//-----检测键盘

document.addEventListener("keydown", function(e) {

uls.style.opacity = "1";

fens.style.zIndex = "0";

fens.innerHTML = fen;

fens.style.fontSize = "300px";

var e = e || window.event;

var keyCode = e.keyCode || e.which;

if(TkeyOld == keyCode) {

TkeyCode = false;

} else {

TkeyCode = true;

}

if(TkeyCode == true) {

TkeyOld = keyCode;

//每次进入重置定时器

clearInterval(stime);

//加速

if(e.shiftKey) {

seep -= 40;

if(seep < 40) {

seep = 60;

}

//alert(seep);

}

//开始运动

handMove();

//重新开始,刷新页面

if(e.altKey) {

location.reload();

}

//如果正在向左或右运动,左右键无效,反之同样

if(handCt == false) {

switch(keyCode) {

case 40: //下

handCt = true;

handT = false;

break;

case 38: //上

handCt = true;

handT = true;

break;

}

} else {

switch(keyCode) {

case 37: //左

handCt = false;

handL = true;

break;

case 39: //右

handCt = false;

handL = false;

break;

}

}

}

}, false)

};

以上内容为【这是本萌妹见过最丑的贪吃蛇游戏了,没有之一(前端JS源代码)】的相关内容。

 
免责声明:

本文内容来自用户上传并发布或网络新闻客户端自媒体,本站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系删除。

 
0相关评论
打赏