angularJs 版 贪吃蛇

1.代码

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js"></script>
<style>
	.greentd{
		width:100%;
		height:100%;
		background-color:green;
	}

	.redtd{
		width:100%;
		height:100%;
		background-color:red;
	}

	.yellowtd{
		width:100%;
		height:100%;
		background-color:yellow;
	}

	td{
		width:50px;
		height:50px;
	}
</style>
</head>
<body>

<table ng-app="testapp" ng-controller="ctrl">
  <tr ng-repeat="tr in map">
	<td ng-repeat="td in tr track by $index">
		<div ng-if="td==0" class='greentd'>
		</div>
		<div ng-if="td==1" class='yellowtd'>
		</div>
		<div ng-if="td==2" class='redtd'>
		</div>
	</td>
  </tr>
  <tr><td cols=10>得分:{{score}}</td></tr>
</table>

<script>
	var R;
	var app = angular.module('testapp', []);
	app.controller('ctrl',function($scope,$rootScope,$interval){

		R=$rootScope;
		$rootScope.score=0;
		$rootScope.stop=0;
		$rootScope.map = [
							[0,0,0,0,0,0,0,0,0,0],
							[0,0,0,0,0,0,0,0,0,0],
							[0,0,0,0,0,0,0,0,0,0],
							[0,0,0,0,0,0,0,0,0,0],
							[0,0,0,0,0,0,0,0,0,0],
							[0,0,0,0,0,0,0,0,0,0],
							[0,0,0,0,0,0,0,0,0,0],
							[0,0,0,0,0,0,0,0,0,0],
							[0,0,0,0,0,0,0,0,0,0],
							[0,0,0,0,0,0,0,0,0,0]
						];
		$rootScope.snake=[[0,4],[0,5],[1,5]];
		$rootScope.food=[5,5];
		$rootScope.dir=4;//1--left  2--right   3--up  4--down

		$rootScope.nextType=function(){
			var lastbody=$rootScope.snake[$rootScope.snake.length-1];
			var x=lastbody[0];
			var y=lastbody[1];
			if($rootScope.dir==1){
				if(y-1>=0)
					y--;
				else
					return -1;
			}else if($rootScope.dir==2){
				if(y+1<=9){
					y++;
				}else
					return -1;
			}else if($rootScope.dir==3){
				if(x-1>=0){
					x--;
				}else{
					return -1;
				}
			}else if($rootScope.dir==4){
				if(x+1<=9){
					x++;
				}else{
					return -1;
				}
			}
			return $rootScope.map[x][y];
		}

		//随机食物
		$rootScope.createFood=function(){
			$rootScope.food=[Math.floor(Math.random()*9),Math.floor(Math.random()*9)];
		}
		
		//换方向
		$rootScope.changeDir=function(newdir){
			console.log(newdir);
			$rootScope.dir=newdir;
		}
		
		//蛇移动
		$rootScope.move=function(){
			var type=$rootScope.nextType();
			if(type==0){
				//空地
			for(var i=0;i<$rootScope.snake.length;i++){
				if(i<$rootScope.snake.length-1){
					var sbody=$rootScope.snake[i+1];
					$rootScope.snake[i]=[sbody[0],sbody[1]];
				}else{
					if($rootScope.dir==1){
						$rootScope.snake[i][1]--;
					}else if($rootScope.dir==2){
						$rootScope.snake[i][1]++;
					}else if($rootScope.dir==3){
						$rootScope.snake[i][0]--;
					}else if($rootScope.dir==4){
						$rootScope.snake[i][0]++;
					}
				}
			}
			}else if(type==1){
				//吃自己
				$rootScope.stop=1;
				alert("die ...");
			}else if(type==2){
				//吃食物
				$rootScope.snake.push([$rootScope.food[0],$rootScope.food[1]]);
				//$rootScope.food=[0,0];
				$rootScope.createFood();
				$rootScope.score++;
			}else if(type==-1){
				//出界
				$rootScope.stop=1;
				alert("die ...");
			}
		}
		

		//刷新地图
		$rootScope.refresh=function(){

			for(var i=0;i<$rootScope.map.length;i++){
				for(var j=0;j<$rootScope.map[i].length;j++){
					$rootScope.map[i][j]=0;
				}
			}

			for(var k=0;k<$rootScope.snake.length;k++){
				var sbody=$rootScope.snake[k];
				//console.log(sbody);
				$rootScope.map[sbody[0]][sbody[1]]=1;		
			}

			$rootScope.map[$rootScope.food[0]][$rootScope.food[1]]=2;
		}

		$rootScope.refresh();
		
		
		$interval(function(){
			if($rootScope.stop==0){
				$rootScope.move();
				$rootScope.refresh();
			}
		},500)
		
	});

	
</script>

<script>

	document.onkeydown=function(event){
              var e = event || window.event || arguments.callee.caller.arguments[0];
			  console.log(e.keyCode);
              if(e && e.keyCode==37){ //l
                  R.changeDir(1);
              }
              if(e && e.keyCode==38){ //u
				   R.changeDir(3);
              }            
             if(e && e.keyCode==39){ //r
				  R.changeDir(2);
             }
			 if(e && e.keyCode==40){ //d
				  R.changeDir(4);
             }
         }; 

</script>

</body>
</html>

2.效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Snake-AI,这是一个用 C/C 语言编写的贪吃蛇游戏的人工智能。AI 的目的是让蛇尽可能的吃更多的食物,直到吃满整个地图。想参与这个项目,请查看todos。Demo使用方法编译与运行:$ make $ make run为了解详细使用方法, 请查看主函数main()算法介绍函数Snake.decideNext(): 计算蛇S1的下一个移动方向D计算从蛇S1的头部到达食物的最短路径P1。派一条与蛇S1完全一样的虚拟蛇S2沿路径P1吃掉食物。计算从蛇S2的头部到其尾部的最长路径P2。如果路径P2存在,将移动方向D设置为路径P1的第一个方向,否则进行步骤4。计算从蛇S1的头部到达其尾部的最长路径P3。如果P3存在,将移动方向D设置为路径P3的第一个方向,否则进行步骤5。将移动方向D设置为离食物最远的方向。函数Map.findMinPath(): 计算两个位置间的最短路径算法建立在BFS的基础上。为了使路径尽可能直,每次遍历邻接点时,在当前移动方向上的位置会被优先遍历。效果展示:(绿色区域为搜索算法扫描到的区域,红色区域为最后计算出的最短路径,每个位置上的数字表示了从起始位置开始到该位置的最短距离)函数Map.findMaxPath(): 计算两个位置间的最长路径算法建立在DFS与贪心算法的基础上。每次遍历邻接点时,离目标位置最远(使用曼哈顿距离估计)的位置将会被优先遍历到。另外,为了使路径尽可能直,如果两个位置到目标位置的距离相等,在当前移动方向上的位置将被优先遍历到。这个问题是一个NP完全问题,此算法得出的结果路径只是一个近似最长路径。效果展示:(绿色区域为搜索算法扫描到的区域,红色区域为最后计算出的最长路径,每个位置上的数字表示了从该位置开始到目标位置的估计距离) 标签:Snake

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值