SOURCE

console 命令行工具 X clear

                    
>
console
	//声明画布
		var canvas=document.getElementById("canvas");
		var ctx=canvas.getContext("2d");
		//声明空数组来保存蛇的长度
		var snakeBody=[];
		var snakeMove;//蛇移动
		//蛇默认方向
		var speedX=20;
		var speedY=0;
		//食物
		var newFood;
		//得分
		var goal;
		//随机数
		function ran(min,max){
			return parseInt(Math.random()*(max-min+1)+min);
		}
		//随机颜色
		function col(){
			var r=ran(0,255);
			var g=ran(0,255);
			var b=ran(0,255);
			return "rgb("+r+","+g+","+b+")";
		}
		//创建蛇
		function Snake(x,y,color){
			this.x=x;
			this.y=y;
			this.width=20;
			this.height=20;
			this.color=color;
		}
		Snake.prototype.drawSnake=function(ctx){
			ctx.beginPath();
			ctx.fillStyle=this.color;
			ctx.fillRect(this.x,this.y,this.width,this.height);
			ctx.closePath();
		}
		//初始化蛇
		function initSnake(){
			for(var j=0;j<3;j++){
				var init=new Snake(100-j*20,100,"lightseagreen");
				init.drawSnake(ctx);
				snakeBody.push(init);
			}
		}
		//蛇移动
		function snakeM(){
			snakeMove=setInterval(function(){
				ctx.clearRect(snakeBody[snakeBody.length-1].x,snakeBody[snakeBody.length-1].y,20,20);//清除数组中最后一项的矩形区域
				var init=new Snake(snakeBody[0].x+speedX,snakeBody[0].y+speedY,"lightseagreen");//向前添加矩形
				init.drawSnake(ctx);
				snakeBody.unshift(init);//想数组中前面添加新的对象
				snakeBody.pop();//删除最后一个对象
				//同时执行三个检测碰撞函数
				HitCheck();
				foodHitCheck();
				selfHitCheck()
			},150)
		}
		//结束函数
		function theEnd(){
			ctx.clearRect(0,0,canvas.width,canvas.height);
			clearInterval(snakeMove);
			start.style.display="block";
			end.style.display="block";
			endc.style.display="block";
			endn.style.display="block";
			ipt.style.display="block";
			ipt.value=null;
			score.style.display="none";
			endc.innerHTML="Score:"+goal;
			endn.innerHTML=_name;
			start.innerHTML="Restart";
			creatScore();
		}
		//碰壁检测
		function HitCheck(){
			if(snakeBody[0].x<0||snakeBody[0].x==canvas.width||snakeBody[0].y<0||snakeBody[0].y==canvas.height){
				theEnd();
			}
		}
		//碰自己检测
		function selfHitCheck(){
			for(var i=1;i<snakeBody.length;i++){
				if(snakeBody.length>=3){
					//如果头部碰到身体的除了头部的任何一项
					if(snakeBody[0].x==snakeBody[i].x&&snakeBody[0].y==snakeBody[i].y){
						theEnd();
					}
				}
			}
		}
		//按键
		function Change(ev){
			var evKeyCode = ev.keyCode;
			switch(evKeyCode){
				case 37:
					if(speedX<=0){speedX=-20;speedY=0;}
					break;
				case 38:
					if(speedY<=0){speedX=0;speedY=-20;}
					break;
				case 39:
					if(speedX>=0){speedX=20;speedY=0;}
					break;
				case 40:
					if(speedY>=0){speedX=0;speedY=20;}
					break;
			}
		}
		document.onkeydown = function(event){
			var ev = event || window.event;
			Change(ev);
		}
		//创建食物
		function Creatfood(x,y){
			this.x=x;
			this.y=y;
			this.height=20;
			this.width=20;
			this.drawfood=function(){
				ctx.beginPath();
				ctx.fillStyle="palevioletred";
				ctx.fillRect(this.x,this.y,20,20);
				ctx.closePath();
			}
		}
//		var newFood=new Creatfood(ran(1,29)*20,ran(1,29)*20);
//		newFood.drawfood();
		//吃食物
		function foodHitCheck(){
			if(newFood.x==snakeBody[0].x&&newFood.y==snakeBody[0].y){
				newFood=new Creatfood(ran(1,29)*20,ran(1,29)*20);
				newFood.drawfood();
				//判断食物是否在身上生成
				for(var i=1;i<snakeBody.length;i++){
					if(newFood.x==snakeBody[i].x&&newFood.y==snakeBody[i].y){
						newFood=new Creatfood(ran(1,29)*20,ran(1,29)*20);
						newFood.drawfood();
					}
				}
				var init=new Snake(snakeBody[0].x+speedX,snakeBody[0].y+speedY,"lightgreen");
//				init.drawSnake(ctx);
				snakeBody.push(init);
				goal++;
				score.innerHTML="Score:"+goal;
			}
		}
		//其他界面
		var start=document.getElementById("start");
		var title=document.getElementById("title");
		var end=document.getElementById("end");
		var score=document.getElementById("score");
		var ipt=document.getElementById("ipt");
		var _name;
		start.onclick=function(){
			start.style.display="none";
			title.style.display="none";
			end.style.display="none";
			endc.style.display="none";
			endn.style.display="none";
			ipt.style.display="none";
			score.style.display="block";
			score.innerHTML="Score:0";
			if(ipt.value){
				_name=ipt.value;
			}else{
				_name="player";
			}
			
			snakeBody=[];
			speedX=20;
			speedY=0;
			goal=0;
			initSnake();
			snakeM();
			var nx=ran(1,29)*20
			var ny=ran(1,29)*20
			if(ny==100&&(nx==100||nx==80||nx==60)){
				newFood=new Creatfood(nx,ny);
				newFood.drawfood();
			}
			newFood=new Creatfood(nx,ny);
			newFood.drawfood();
		}
		//游戏记录
		var names=document.getElementById("names");
		function creatScore(){
			var li=document.createElement("li");
			li.innerHTML="<span class='na'>"+_name+":</span><span class='sc'>"+goal+"</span>"
			names.appendChild(li);
		}
<canvas id="canvas" width="600" height="600"></canvas>
		<div id="title">Retro Snaker</div>
		<div id="end">Game Over</div>
		<div id="endn"></div>
		<div id="endc"></div>
		<input type="text"  id="ipt" placeholder="Enter your name..."/>
		<div id="start">Start</div>
		<div id="score"></div>
		<div id="box">
			<ul id="names">
				<li style="border-bottom: 1px solid lightseagreen;font-size: 30px;">Scoreboard</li>
				<!--<span class='na'>player</span><span class='sc'>100</span>-->
			</ul>
		</div>
		<div id="exp">
			<span>This project is no used local storage or cookies,if you want to play with your friends,please do not refresh the website.</span>
		</div>
*{
				margin: 0;
				padding: 0;
			}
			body{
				background: #666666;
			}
			canvas{
				border: 10px solid lightseagreen;
				display: block;
				margin: 50px auto 0;
			}
			li{	
				list-style: none;
			}
			#start{
				width: 100px;
				height: 55px;
				line-height: 55px;
				text-align: center;
				color: white;
				background: lightseagreen;
				border-radius: 15px;
				cursor: pointer;
				position: absolute;
				left: 50%;
				top: 540px;
				margin-left: -50px;
				margin-top: -22.5px;
			}
			#title{
				width: 600px;
				height: 100px;
				line-height: 100px;
				text-align: center;
				position: absolute;
				left: 50%;
				margin-left: -300px;
				top: 230px;
				font-size: 80px;
				color: lightseagreen;
			}
			#end{
				width: 600px;
				height: 100px;
				line-height: 100px;
				text-align: center;
				position: absolute;
				left: 50%;
				margin-left: -300px;
				top: 25%;
				font-size: 80px;
				color: lightseagreen;
				display: none;
			}
			#endc{
				width: 600px;
				height: 100px;
				line-height: 100px;
				text-align: center;
				position: absolute;
				left: 50%;
				margin-left: -300px;
				top: 40%;
				font-size: 80px;
				color: lightseagreen;
				display: none;
			}
			#endn{
				width: 600px;
				height: 100px;
				line-height: 100px;
				text-align: center;
				position: absolute;
				left: 50%;
				margin-left: -300px;
				top: 100px;
				font-size: 80px;
				color: lightseagreen;
				/*display: none;*/
			}
			#score{
				width: 600px;
				height: 100px;
				line-height: 100px;
				text-align: center;
				position: absolute;
				left: 50%;
				margin-left: -300px;
				top: 85%;
				font-size: 50px;
				color: lightseagreen;
				display: none;
			}
			#ipt{
				height: 100px;
				width: 500px;
				line-height: 100px;
				font-size: 50px;
				outline: none;
				background: #666;
				border: 0;
				border-bottom: 5px solid lightseagreen;
				display: block;
				position: absolute;	
				color: lightseagreen;
				left: 49%;
				margin-left: -250px;
				top: 370px;
				padding: 0 20px;
			}
			#box{
				width: 200px;
				position: absolute;	
				color: lightseagreen;
				left: 30%;
				margin-left: -250px;
				top: 7%;
			}
			#box li{
				text-align: center;
				font-size: 20px;
				overflow: hidden;
			}
			p{
				font-size: 20px;
			}
			.na{
				/*width: 50px;*/
				display: block;
				text-align: left;
				float: left;
			}
			.sc{
				width: 50px;
				display: block;
				text-align: left;
				float: right;
			}
			#exp{
				width: 455px;
				/*background: palegreen;*/
				position: absolute;
				left:84%;
				margin-left: -250px;
				top: 10%;
				color: lightseagreen;
				font-size: 20px;
			}
			@media only screen and (max-width: 1690px) {
				#exp{display: none;}
			}
			@media only screen and (max-width: 1320px) {
				#box{display: none;}
			}