• 加载中...
  • 加入收藏
  • 网站地图
手机版 扫一扫
ゲームクリエイター

极限编程20小时的作品

时间:2014年04月16日 信息来源:汇众云世界 点击: 加入收藏 】【 字体:
源码地址:资源链接


现在羊的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)

我有话说

新文章

门文章