<!DOCTYPE html
>
<
html
lang=
"en"
>
<
head
>
<
meta
charset=
"UTF-8"
>
<
title
>Document
</
title
>
</
head
>
<
link
rel=
"stylesheet"
href=
"snake.css"
>
<
body
>
<
div
id=
"map"
></
div
>
<
script
>
var
map = {
width:
900,
height:
500,
};
var
box = {
width:
50,
height:
50,
}
var
nums = {
hnum:map.
width/
box.
width,
vnum:map.
height/
box.
height,
}
var
DIR = {
DIR_LEFT:
1,
DIR_TOP:
2,
DIR_RIGHT:
3,
DIR_BOTTOM:
4,
}
var
dir=
DIR.
DIR_RIGHT;
var
snake=[];
var
other=[];
function
initMap(){
var
map_target=
document.
getElementById(
"map");
map_target.
style.
width=
map.
width+
"px";
map_target.
style.
height=
map.
height+
"px";
var
newSpan =
null;
for(
var
i=
1;
i<=
nums.
hnum*
nums.
vnum;
i++){
var
newSpan =
document.
createElement(
'span');
newSpan.
style.
width=
box.
width+
"px";
newSpan.
style.
height=
box.
height+
"px";
newSpan.
id=
i;
map_target.
appendChild(
newSpan);
// console.log(map_target);
if(
i<=
3){
newSpan.
className =
"snake";
snake.
push(
newSpan);
}
else{
other.
push(
newSpan);
}
}
}
function
moveSnake(){
var
headId;
// console.log(dir);
switch(
dir){
case
DIR.
DIR_LEFT:
headId =
parseInt(
snake[
snake.
length -
1].
id) -
1;
if(
headId %
nums.
hnum ==
0){
headId +=
nums.
hnum;
}
break;
case
DIR.
DIR_RIGHT:
headId =
parseInt(
snake[
snake.
length -
1].
id) +
1;
if(
headId %
nums.
hnum ==
1 ){
headId -=
nums.
hnum;
}
break;
case
DIR.
DIR_TOP:
headId =
parseInt(
snake[
snake.
length-
1].
id) -
nums.
hnum;
if(
headId <
1){
headId +=
nums.
hnum *
nums.
vnum;
}
break;
case
DIR.
DIR_BOTTOM:
headId =
parseInt(
snake[
snake.
length-
1].
id) +
nums.
hnum;
if(
headId >
nums.
hnum *
nums.
vnum){
headId -=
nums.
hnum *
nums.
vnum;
}
break;
default:
break;
}
var
head=
document.
getElementById(
headId);
for(
var
i =
0;
i <
snake.
length;
i ++){
if(
headId ==
snake[
i].
id){
alert(
"Game over");
window.
location=
window.
location;
}
}
var
index;
for(
var
i=
1;
i<
other.
length;
i++){
if(
headId==
other[
i].
id){
index=
i;
break;
}
}
// console.log(index);
other.
splice(
index,
1);
snake.
push(
head);
if(
head.
className ==
"food"){
// alert(1);
showFood();
// console.log(index);
}
else{
snake[
0].
className =
"";
other.
push(
snake.
shift());
}
head.
className =
"snake";
}
function
showFood(){
// console.log(other.length)
console.
log(
1);
var
index=
Math.
floor(
Math.
random()*
other.
length);
other[
index].
className =
"food";
}
window.
onload=
function(){
initMap();
setInterval(
moveSnake,
200);
showFood();
document.
onkeydown=
function(
e){
switch (
e.
keyCode) {
case
37:
if(
dir ==
DIR.
DIR_RIGHT)
break;
else{
dir =
DIR.
DIR_LEFT;
break}
case
38:
if(
dir ==
DIR.
DIR_BOTTOM)
break;
else{
dir =
DIR.
DIR_TOP;
break;}
case
39:
if(
dir ==
DIR.
DIR_LEFT)
break;
else{
dir =
DIR.
DIR_RIGHT;
break}
case
40:
if(
dir ==
DIR.
DIR_TOP)
break;
else{
dir =
DIR.
DIR_BOTTOM;
break;}
default:
break;
}
}
}
<
/
script
>
</
body
>
</
html
>
可以对其进行优化例如加入分数技术,蛇方向的改变优化