源码地址:资源链接
现在羊的AI不够完善
希望感兴趣的朋友一起讨论AI
AI部分源码如下
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不够完善
希望感兴趣的朋友一起讨论AI
AI部分源码如下
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;
}
下一篇::Android功能总结仿照Launcher的Workspace实现左右滑动切换5
(作者:佚名 编辑:admin)
相关新闻
- 3dmax动作库
- 雷电5第二弹宣传视频公开 新机体全展示
- 微软Xbox One圣诞假日促销 继续降价50美元
- COD黑色行动3本周末双倍经验 战个痛快
- 刺客信条枭雄新DLC开膛手杰克中文预告
- 侠盗猎车OL新DLC财富与犯罪加入游艇
我有话说
最新文章
- 1[图文]3dmax动作库
3dmax动画管理系统,支持biped系统动画快速存......
- 2雷电5第二弹宣传视频公开 新
MOSS日前公开《雷电5》第二弹宣传视频,视频......
- 3微软Xbox One圣诞假日促销 继
【17173专稿,转载请注明出处】 今年黑五期......
- 4COD黑色行动3本周末双倍经验
【17173专稿,转载请注明出处】 这段时间大......
- 5刺客信条枭雄新DLC开膛手杰克
【17173专稿,转载请注明出处】 育碧近日正......
推荐文章
热门文章
- 1シリーズ初の続編は、いかにして
シリーズ初の続編は、いかにして生まれたの...
- 2『閃乱カグラ』シリーズの新展開
『閃乱カグラ』シリーズの新展開を発表する...
- 3『戦国無双4』新たな“道”を切り
『戦国無双4』新たな“道”を切り拓く次代の...
- 4AKBIA,STRIP2
动作冒险“AKIBA'STRIP2”(P...
- 5Web番組“カプコンチャンネル情報
Web番組“カプコンチャンネル情報局”が12月...