console
function SnakeInit() {
this.dom = {
'btn' : document.getElementsByClassName('startGame')[0],
'main' : document.getElementsByClassName('gameAera')[0],
'actScore' : document.getElementsByClassName('actScore')[0],
};
this.timer1;
this.bodyPosition = {x:[],y:[]};
this.applePosition = {x:[],y:[]};
this.detectPosition = {x:[],y:[]};
this.currentDiret = "";
this.bindStartEvent();
this.score = 0;
}
SnakeInit.prototype.cashDectet = function () {
var snakeHead = document.getElementById('snakeHead'),
snakeBlock = document.getElementById('snakeBlock'),
snakeBody = document.getElementsByClassName('snakeBody'),
self = this;
cashTimer = setInterval(function () {
var x = parseInt(getComputedStyle(snakeHead).left),
y = parseInt(getComputedStyle(snakeHead).top),
Bx = parseInt(getComputedStyle(snakeBlock).left),
BY = parseInt(getComputedStyle(snakeBlock).top),
len = snakeBlock.children.length;
if((x + Bx) < 0 || (x + Bx > 1200)){
alert("Game Over! Your Score Is : " + self.score);
clearInterval(self.timer1);
clearInterval(cashTimer);
}else if((y + BY) < 0 || (y + BY) > 600){
alert("Game Over! Your Score Is : " + self.score);
clearInterval(self.timer1);
clearInterval(cashTimer);
}
for(var i = 0; i < len; i++){
self.detectPosition.x[i] = parseInt(getComputedStyle(snakeBlock.children[i]).left);
self.detectPosition.y[i] = parseInt(getComputedStyle(snakeBlock.children[i]).top);
}
var indexX = self.detectPosition.x.lastIndexOf(x),
indexY = self.detectPosition.y.lastIndexOf(y);
for(var i = 1; i < len; i++){
if(x == self.detectPosition.x[i]){
if(y == self.detectPosition.y[i]){
alert("Game Over! Your Score Is : " + self.score);
clearInterval(self.timer1);
clearInterval(cashTimer);
}
}
}
},100)
}
SnakeInit.prototype.bindStartEvent = function () {
var self = this;
this.dom.btn.addEventListener('click',function () {
this.style.display = "none" ;
self.init('right');
},false);
}
SnakeInit.prototype.bindKeyEvent = function () {
var snakeHead = document.getElementById('snakeHead'),
snakeBody = document.getElementsByClassName('snakeBody'),
snakeBlock = document.getElementById('snakeBlock'),
len = snakeBody.length,
self = this;
document.addEventListener('keydown',function (e) {
switch(e.key) {
case 'ArrowDown' :
console.log(e.key);
if(self.currentDiret == "up" || self.currentDiret == "down"){
break;
}
self.move("down"); break;
case 'ArrowUp' :
if(self.currentDiret == "up" || self.currentDiret == "down"){
break;
}
self.move("up"); break;
case 'ArrowLeft' :
if(self.currentDiret == "left" || self.currentDiret == "right"){
break;
}
self.move("left"); break;
case 'ArrowRight' :
if(self.currentDiret == "left" || self.currentDiret == "right"){
break;
}
self.move("right"); break;
}
return false;
} )
}
SnakeInit.prototype.move = function (direction) {
if(this.timer1){
clearInterval(this.timer1);
}
var snakeBlock = document.getElementById('snakeBlock'),
snakeHead = document.getElementById('snakeHead'),
snakeBody = document.getElementsByClassName('snakeBody'),
x = parseInt(getComputedStyle(snakeHead).left),
y = parseInt(getComputedStyle(snakeHead).top),
self = this;
this.timer1 = setInterval(function () {
var len = snakeBlock.children.length;
for(var i = 0; i < len; i++){
self.bodyPosition.x[i] = parseInt(getComputedStyle(snakeBlock.children[i]).left);
self.bodyPosition.y[i] = parseInt(getComputedStyle(snakeBlock.children[i]).top);
}
if(document.getElementsByClassName('apple')){
var apple = document.getElementsByClassName('apple'),
appleNum = apple.length;
for(var i = 0; i < appleNum; i++ ){
self.applePosition.x[i] = parseInt(getComputedStyle(apple[i]).left);
self.applePosition.y[i] = parseInt(getComputedStyle(apple[i]).top);
}
}
switch(direction) {
case "right" :
snakeHead.style.left = self.bodyPosition.x[0] + 40 + "px";
snakeHead.style.transform = "rotateZ(0deg)";
self.currentDiret = "right";
for(var i = 0; i < len -1; i ++){
snakeBody[i].style.left = self.bodyPosition.x[i] + "px";
snakeBody[i].style.top = self.bodyPosition.y[i] + "px";
}
break;
case "left" :
snakeHead.style.left = self.bodyPosition.x[0] - 40 + "px";
snakeHead.style.transform = "rotateZ(180deg)" ;
self.currentDiret = "left";
for(var i = 0; i < len -1; i ++){
snakeBody[i].style.left = self.bodyPosition.x[i] + "px";
snakeBody[i].style.top = self.bodyPosition.y[i] + "px";
}
break;
case "up" :
snakeHead.style.top = self.bodyPosition.y[0] - 40 + "px";
snakeHead.style.transform = "rotateZ(-90deg)" ;
self.currentDiret = "up";
for(var i = 0; i < len -1; i ++){
snakeBody[i].style.left = self.bodyPosition.x[i] + "px";
snakeBody[i].style.top = self.bodyPosition.y[i] + "px";
}
break;
case "down" :
snakeHead.style.top = self.bodyPosition.y[0] + 40 + "px";
snakeHead.style.transform = "rotateZ(90deg)";
self.currentDiret = "down";
for(var i = 0; i < len -1; i ++){
snakeBody[i].style.left = self.bodyPosition.x[i] + "px";
snakeBody[i].style.top = self.bodyPosition.y[i] + "px";
}
break;
}
if(apple){
var mapX = parseInt(getComputedStyle(snakeHead).left) + parseInt(getComputedStyle(snakeBlock).left),
mapY = parseInt(getComputedStyle(snakeHead).top) + parseInt(getComputedStyle(snakeBlock).top);
for(var i =0; i < appleNum; i++){
if(mapX == self.applePosition.x[i] && mapY == self.applePosition.y[i]){
self.addBody(mapX,mapY);
}
}
}
self.dom.actScore.innerHTML = self.score;
},200)
}
SnakeInit.prototype.addBody = function (x,y) {
var apple = document.getElementsByClassName('apple');
var n = apple.length,
snakeBody = document.createElement('div'),
snakeBlock = document.getElementById('snakeBlock');
len = snakeBlock.children.length;
for(var i = 0; i < n; i++){
if(x == this.applePosition.x[i]){
var index = i;
this.dom.main.removeChild(apple[i]);
break;
}
}
snakeBody.className = "snakeBody"
snakeBody.style.left = this.bodyPosition.x[len-1] +"px";
snakeBody.style.top = this.bodyPosition.y[len-1] + "px" ;
snakeBlock.appendChild(snakeBody);
this.appleShow();
this.score++;
}
SnakeInit.prototype.appleShow = function () {
var apple = document.getElementsByClassName('apple');
var n = Math.floor(Math.random()*2 + 1);
if(apple.length >= 1){
this.generate(1);
}else{
this.generate(n);
}
}
SnakeInit.prototype.generate = function (n) {
for(var i = 0; i < n; i++){
var apple = document.createElement('div'),
x = Math.floor(Math.random()*30) * 40;
y = Math.floor(Math.random()*15) * 40;
apple.className = "apple";
apple.style.left = x + "px";
apple.style.top = y + "px";
this.dom.main.appendChild(apple);
}
}
SnakeInit.prototype.init = function (direction) {
var self = this,
bodyPositionX = 40,
bodyPositionY = 40;
var positionX = Math.floor(Math.random() * 12 + 3) * 40,
positionY = Math.floor(Math.random() *15) * 40,
moveLeft = positionX;
var snakeBlock = document.createElement('div'),
snakeHead = document.createElement('div');
snakeBlock.id = 'snakeBlock';
snakeBlock.style.left = positionX + "px";
snakeBlock.style.top = positionY + "px";
snakeHead.id = 'snakeHead';
snakeBlock.appendChild(snakeHead);
for(var i = 0; i < 3; i++) {
var snakeBody = document.createElement('div');
snakeBody.className = 'snakeBody';
snakeBody.style.left = -bodyPositionX + 'px';
bodyPositionX += 40;
snakeBlock.appendChild(snakeBody);
}
this.dom.main.appendChild(snakeBlock);
this.move('right');
this.currentDiret = direction;
this.bindKeyEvent();
this.cashDectet();
this.appleShow();
}
var snake = new SnakeInit();
<!DOCTYPE html>
<html >
<head>
<meta charset="UTF-8">
<title>贪吃蛇</title>
<link rel = "stylesheet" href="index.css">
</head>
<body>
<div class="wrapper">
<div class="info">
<h2>贪吃蛇</h2>
</div>
<div class="gameAera">
<p class="score">
<span class="textScore">当前得分:</span>
<span class="actScore"></span>
</p>
</div>
<div class="startGame"></div>
</div>
<script src="index.js"></script>
</body>
</html>
*{
margin: 0;
padding: 0;
}
.wrapper{
height: 780px;
width: 1583px;
background-image: url('http://m.qpic.cn/psb?/V12GQkte4Fyk5L/eCR4rdPTBYQf*3A9I7ifHyracz7ElZJzP*xdUhv.VDk!/b/dHIAAAAAAAAA&bo=cQSAAgAAAAARB8c!&rf=viewer_4');
background-size: 100%;
background-repeat: no-repeat;
position: relative;
}
.info{
position: absolute;
margin-top: 20px;
width: 100%;
}
.info h2{
text-align: center;
font-size: 50px;
color: #fff;
text-shadow: -1px 1px 0 #424242,
-4px 4px 0 #424242,
-5px 5px 0 rgb(59, 234, 147),
-6px 6px 0 rgb(59, 234, 147),
-7px 7px 0 rgb(15, 179, 186),
-8px 8px 0 rgb(15, 179, 186),
-9px 9px 0 rgb(15, 95, 186),
-10px 10px 0 rgb(15, 95, 186),
-11px 11px 25px #000;
}
.gameAera .textScore{
position: absolute;
bottom: -50px;
right:40px;
font-size: 30px;
font-weight:bold;
color:#9DE7C5;
text-shadow: -4px 3px 0 #424242,
-6px 5px 0 rgba(255,255,255,0.125);
text-align: center;
}
.gameAera .actScore{
position: absolute;
bottom: -50px;
right: 0px;
font-size: 30px;
font-weight:bold;
color:#9DE7C5;
text-shadow: -4px 3px 0 #424242,
-6px 5px 0 rgba(255,255,255,0.125);
text-align: center;
}
.wrapper .gameAera{
width: 1200px;
height: 600px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-49%);
border: 5px solid red;
}
.wrapper .startGame{
width: 300px;
height: 300px;
background-image: url('http://m.qpic.cn/psb?/V12GQkte4Fyk5L/NWrjwjA0jkBHQ0D1WShZC2h*P*3U7TjbOeNMx8e1naI!/b/dEQBAAAAAAAA&bo=pQKAAgAAAAADFxc!&rf=viewer_4');
background-size: 100%;
background-repeat: no-repeat;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
cursor: pointer;
}
#snakeBlock{
position: relative;
width: 40px;
height: 40px;
background-color: transparent;
}
#snakeHead{
display: block;
position: absolute;
width: 40px;
height: 40px;
background-image: url('http://m.qpic.cn/psb?/V12GQkte4Fyk5L/cjy9h71CiCP9PH5i7qznHKyp6pdlK*V0k5GJKfo5n9k!/b/dEUBAAAAAAAA&bo=gACAAAAAAAADFzI!&rf=viewer_4');
background-size: 100%;
background-repeat: no-repeat;
}
.snakeBody{
display: block;
position: absolute;
width: 40px;
height: 40px;
background-color: yellow;
border-radius: 15px;
}
.wrapper .gameAera .apple{
height: 40px;
width: 40px;
background-color: red;
box-shadow: 1px 1px 3px #f25;
border-radius: 50%;
position: absolute;
}