CSDN 论坛无名游戏 C++版

CSDN论坛升级的时候经常出现的那个无名游戏(原版游戏),我把它移植成C++版的了。

对原来的游戏算法做了少量的修改,也不知道难度有没有提高,反正还是很简单就给围住了。

为了方便修改算法,本游戏中使用了嵌入式脚本,游戏算法全部使用脚本完成。

关于脚本介绍请点这里




目录下的"game.c"是脚本文件,如果有哪位大仙的AI算法精通,可以试着改改。

核心AI算法:

var function ComputerTryMove()
	{
		int x=this->computerPos.x;
		int y=this->computerPos.y;

 		if(x<=0 || y<=0 || x>=this->mapSize || y>=this->mapSize)//检查是否已经到达边界
  			return -1;



//计算八个方向可移动距离
		int d[8]=0;
		int& px=this->mapData[x];
		while(px[--y]==NULL_ID )
			d[0]++;
		if(px[y]==BORDER_ID)
			d[0]=MAX_LENGTH-d[0];

		int& px=this->mapData;
		y=this->computerPos.y;
		while(px[--x][--y]==NULL_ID)
			d[1]++;
		if(px[x][y]==BORDER_ID)
			d[1]=MAX_LENGTH-d[1];

		x=this->computerPos.x;
		y=this->computerPos.y;
		while(px[--x][y]==NULL_ID)
			d[2]++;
		if(px[x][y]==BORDER_ID)
			d[2]=MAX_LENGTH-d[2];

		x=this->computerPos.x;
		while(px[--x][++y]==NULL_ID)
			d[3]++;
		if(px[x][y]==BORDER_ID)
			d[3]=MAX_LENGTH-d[3];

		x=this->computerPos.x;
		y=this->computerPos.y;
		while(px[x][++y]==NULL_ID)
			d[4]++;
		if(px[x][y]==BORDER_ID)
			d[4]=MAX_LENGTH-d[4];

		y=this->computerPos.y;
		while(px[++x][++y]==NULL_ID)
			d[5]++;
		if(px[x][y]==BORDER_ID)
			d[5]=MAX_LENGTH-d[5];

		x=this->computerPos.x;
		y=this->computerPos.y;
		while(px[++x][y]==NULL_ID)
			d[6]++;
		if(px[x][y]==BORDER_ID)
			d[6]=MAX_LENGTH-d[6];

		x=this->computerPos.x;
		while(px[++x][--y]==NULL_ID)
			d[7]++;
		if(px[x][y]==BORDER_ID)
			d[7]=MAX_LENGTH-d[7];


//找出可移动的最长距离或离边界最短距离
		int max=-1;
		for(int i=0;i<8;i++)
		{
			if(d[i]>d[max])
				max=i;
			else if(d[i]==d[max])
			{
				if(Rand(0,1)==1)
					max=i;
			}
		}
		
		if(d[max]==0)
			return 1;

		int& x=this->computerPos.x;
		int& y=this->computerPos.y;


//向找出的最优方向移动
		px[x][y]=NULL_ID;
		switchto(max)
		{
		case 0:
			y--;
		case 1:
			x--;
			y--;
		case 2:
			x--;
		case 3:
			x--;
			y++;
		case 4:
			y++;
		case 5:
			x++;
			y++;
		case 6:
			x++;
		case 7:
			x++;
			y--;
		}

		if(px[x][y]==BORDER_ID)//是否已经到达边界?
		{
			px[x][y]=CPU_ID;
			return -1;
		}
		px[x][y]=CPU_ID;
		return 0;
	}



你赢了之后会放烟花



源码下载
压缩包中有源码(全部工程源码)和编译好的游戏文件。
注意(一定要意):编译工具是VS2008的,上次一个计算器的源码就有很多人用VC6打不开。

下载地址




  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值