极限编程20小时的游戏

源码链接

 

部分源码

bool				NoHit();//碰撞检测
bool				NoBody(int a);//障碍检测
bool				eat();//吃羊检测
int					Alive();//还有几只羊
bool				SheepAction();//羊的行动
bool				hold(int key);//是否已经占据该关键点
bool				CanBeEat(int key);//判断移动后是否会被吃
bool				UP(int key);//向上找羊
bool				DOWN(int key);//向下找羊
bool				LEFT(int key);//向左找羊
bool				RIGHT(int key);//向右找羊
bool				SaveTop(int key);//移动前上面是否安全
bool				SaveBelow(int key);//移动前下面是否安全
bool				SaveLeft(int key);//移动前左面是否安全
bool				SaveRight(int key);//移动前右面是否安全
bool				UPSAVE(int key);//移动后上面是否安全
bool				DOWNSAVE(int key);//移动后下面是否安全
bool				LEFTSAVE(int key);//移动后左面是否安全
bool				RIGHTSAVE(int key);//移动后右面是否安全
bool				WolfUp(int wolf);//判断狼的上方是否被围
bool				WolfDown(int wolf);//判断狼的下方是否被围
bool				WolfLeft(int wolf);//判断狼的左方是否被围
bool				WolfRight(int wolf);//判断狼的右方是否被围
int					getPos(int key);//根据狼或羊的编号获得位置编号
bool				WolfCanAction();//判断是否还有狼可以行动

 
// 羊的行动
bool SheepAction()
{
	// 先判断是否有羊处于狼口之下 有的话就跑
	for (int i = 0; i<15; i++)
	{
		if (!SaveTop(i))
		{
			p[i].y -= 102;
			if (SaveTop(i) && SaveBelow(i) && SaveLeft(i) && SaveRight(i))
			{
				return true;
			}
			else
			{
				p[i].y += 102;
			}
		}
		if (!SaveBelow(i))
		{
			p[i].y += 102;
			if (SaveTop(i) && SaveBelow(i) && SaveLeft(i) && SaveRight(i))
			{
				return true;
			}
			else
			{
				p[i].y -= 102;
			}
		}
		if (!SaveLeft(i))
		{
			p[i].x -= 102;
			if (SaveTop(i) && SaveBelow(i) && SaveLeft(i) && SaveRight(i))
			{
				return true;
			}
			else
			{
				p[i].x += 102;
			}
		}
		if (!SaveRight(i))
		{
			p[i].x += 102;
			if (SaveTop(i) && SaveBelow(i) && SaveLeft(i) && SaveRight(i))
			{
				return true;
			}
			else
			{
				p[i].x -= 102;
			}
		}
	}
	//判断狼是否被围
	for (int i = 15; i<18; i++)
	{
		if (!WolfUp(i))
		{
			if (UP(getPos(i)-5) || LEFT(getPos(i)-5) || RIGHT(getPos(i)-5))
			{
				return true;
			}
		}
		if (!WolfDown(i))
		{
			if (DOWN(getPos(i)+5) || LEFT(getPos(i)+5) || RIGHT(getPos(i)+5))
			{
				return true;
			}
		}
		if (!WolfLeft(i))
		{
			if (UP(getPos(i)-1) || DOWN(getPos(i)-1) || LEFT(getPos(i)-1))
			{
				return true;
			}
		}
		if (!WolfRight(i))
		{
			if (UP(getPos(i)+1) || DOWN(getPos(i)+1) || RIGHT(getPos(i)+1))
			{
				return true;
			}
		}
	}
	// 第一顺位关键点
	if (UP(6) || LEFT(6) || RIGHT(6) || DOWN(6))
	{
		return true;
	}
	else if(UP(8) || RIGHT(8) || LEFT(8) || DOWN(8))
	{
		return true;
	}
	else if (DOWN(16) || LEFT(16) || UP(16) || RIGHT(16))
	{
		return true;
	}
	else if (DOWN(18) || RIGHT(18) || UP(18) || LEFT(18))
	{
		return true;
	}	
	// 第二顺位关键点
	else if (LEFT(21) || RIGHT(21) || UP(21))
	{
		return true;
	}
	else if (RIGHT(23) || LEFT(23) || UP(23))
	{
		return true;
	}
	else if (DOWN(15) || UP(15))
	{
		return true;
	}
	else if (DOWN(19) || UP(19))
	{
		return true;
	}
	else if (UP(5) || DOWN(5))
	{
		return true;
	}
	else if (UP(9) || DOWN(9))
	{
		return true;
	}
	else if (LEFT(1) || RIGHT(1))
	{
		return true;
	}
	else if (RIGHT(3) || LEFT(3))
	{
		return true;
	}
	// 第三顺位关键点
	else if (UP(7) || DOWN(7))
	{
		return true;
	}
	else if (LEFT(11) || RIGHT(11))
	{
		return true;
	}
	else if (RIGHT(13) || LEFT(13))
	{
		return true;
	}
	else if (DOWN(17) || UP(17))
	{
		return true;
	}
	// 第四顺位关键点
	else if (DOWN(2) || LEFT(2) || RIGHT(2))
	{
		return true;
	}
	else if (UP(22) || LEFT(22) || RIGHT(22))
	{
		return true;
	}
	else if (RIGHT(10) || UP(10) || DOWN(10))
	{
		return true;
	}
	else if (LEFT(14) || UP(14) || DOWN(14))
	{
		return true;
	}
	// 余下一个中心点和四个边角点
	else if (UP(12) || DOWN(12) || LEFT(12) || RIGHT(12))
	{
		return true;
	}
	else if (RIGHT(0) || DOWN(0))
	{
		return true;
	}
	else if (LEFT(4) || DOWN(4))
	{
		return true;
	}
	else if (UP(20) || RIGHT(20))
	{
		return true;
	}
	else if (UP(24) || LEFT(24))
	{
		return true;
	}
	// 判断到这里说明只有6 8 16 18这4个关键点可能有羊了 输定了
	else if(DOWN(1) || UP(11) || LEFT(7) || RIGHT(5))
	{
		return true;
	}
	else if(DOWN(3) || UP(13) || LEFT(9) || RIGHT(7))
	{
		return true;
	}
	else if(DOWN(11) || UP(21) || LEFT(17) || RIGHT(15))
	{
		return true;
	}
	else if(DOWN(13) || UP(23) || LEFT(19) || RIGHT(17))
	{
		return true;
	}	
	return false;
}

目前羊的AI不够完善 希望感兴趣的朋友一起讨论
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值