作者phi12345 (安特洛)
看板C_Sharp
标题[问题] 关於旗子AI的问题~
时间Mon Nov 20 14:20:07 2006
我写好一个棋子~侦测 自身 周围8格的位子
例如↓
|-----------|
| 1 | 2 | 3 |
| 4 | X | 5 |
| 6 | 7 | 8 |
|-----------|
X 代表的是 本身的棋子~
我写好了~
但是副程式要如何去跑~
因为我这边已经写好可以吃棋&闪躲
但是我玩家这边下完之後~AI不知要怎麽去写副程式放他自己移动~
有人可以帮忙吗?
这侦测周围8格的程式↓
if(Assder==0)
{
x1=Ax[20]; //去抓阵列里的X座标
y1=Ay[20];
vacancy=0;
Assder=0;
pas=19; //步兵 左边第9颗
for(AInum=0;AInum<=7;AInum++) //将阵列资料全部归零
{
edge[AInum]=0;
actnum[AInum]=0;
}
//NO1.
for(AInum=0;AInum<=39;AInum++)
{
if(Ax[AInum]==x1-55&& Ay[AInum]==y1-55) //判断第一格是否有棋子
{
edge[0]=1; //有棋子(不知道是白棋或是黑棋)
if(AInum<20&&pe[AInum]==0||AInum>20&&pe[AInum]==1) //判断是否为黑棋
{
acy[0]=1; // 是为黑棋
Assder=1; //判断後面棋子是否做人工AI和是否要进入移动
}
else
acy[0]=0; //有棋子但是为白棋
}
}
if(edge[0]==0&&y1>112)//第一格没有棋子且位置不是在最上面,若是在最上面一格
就不会有第一格资料
{
actnum[vacancy]=1; //纪录第一格没有棋子
vacancy+=1;
}
else //若是第一格在棋盘外 就假装他有棋子 不能移动到此格
edge[0]=1;
//NO2.
for(AInum=0;AInum<=39;AInum++)
{
if(Ax[AInum]==x1&& Ay[AInum]==y1-55)
{
edge[1]=1;
if(AInum<20&&pe[AInum]==0||AInum>20&&pe[AInum]==1)
{
acy[1]=1;
Assder=1;
}
else
acy[1]=0;
}
}
if(edge[1]==0&&y1>112)
{
actnum[vacancy]=2;
vacancy+=1;
}
else
edge[1]=1;
//NO3.
for(AInum=0;AInum<=39;AInum++)
{
if(Ax[AInum]==x1+55&& Ay[AInum]==y1-55)
{
edge[0]=1;
if(AInum<20&&pe[AInum]==0||AInum>20&&pe[AInum]==1)
{
acy[2]=1;
Assder=1;
}
else
acy[2]=0;
}
}
if(edge[2]==0&&y1>112)
{
actnum[vacancy]=3;
vacancy+=1;
}
else
edge[2]=1;
//NO4.
for(AInum=0;AInum<=39;AInum++)
{
if(Ax[AInum]==x1-55&& Ay[AInum]==y1)
{
edge[3]=1;
if(AInum<20&&pe[AInum]==0||AInum>20&&pe[AInum]==1)
{
acy[3]=1;
Assder=1;
}
else
acy[3]=0;
}
}
if(edge[3]==0)
{
actnum[vacancy]=4;
vacancy+=1;
}
//NO5.
for(AInum=0;AInum<=39;AInum++)
{
if(Ax[AInum]==x1+55&& Ay[AInum]==y1)
{
edge[4]=1;
if(AInum<20&&pe[AInum]==0||AInum>20&&pe[AInum]==1)
{
acy[4]=1;
Assder=1;
}
else
acy[4]=0;
}
}
if(edge[4]==0)
{
actnum[vacancy]=5;
vacancy+=1;
}
//NO6.
for(AInum=0;AInum<=39;AInum++)
{
if(Ax[AInum]==x1-55&& Ay[AInum]==y1+55)
{
edge[5]=1;
if(AInum<20&&pe[AInum]==0||AInum>20&&pe[AInum]==1)
{
acy[5]=1;
Assder=1;
}
else
acy[5]=0;
}
}
if(edge[5]==0&&y1<552) //不能超过棋盘最下面
{
actnum[vacancy]=6;
vacancy+=1;
}
else
edge[5]=1;
//NO7.
for(AInum=0;AInum<=39;AInum++)
{
if(Ax[AInum]==x1&& Ay[AInum]==y1+55)
{
edge[6]=1;
if(AInum<20&&pe[AInum]==0||AInum>20&&pe[AInum]==1)
{
acy[6]=1;
Assder=1;
}
else
acy[6]=0;
}
}
if(edge[6]==0&&y1<552)
{
actnum[vacancy]=7;
vacancy+=1;
}
else
edge[6]=1;
//NO8.
for(AInum=0;AInum<=39;AInum++)
{
if(Ax[AInum]==x1+55&& Ay[AInum]==y1+55)
{
edge[7]=1;
if(AInum<20&&pe[AInum]==0||AInum>20&&pe[AInum]==1)
{
acy[7]=1;
Assder=1;
}
else
acy[7]=0;
}
}
if(edge[7]==0&&y1<552)
{
actnum[vacancy]=8;
vacancy+=1;
}
else
edge[7]=1;
if(Assder==1) //如果这颗棋子周围有黑棋的话
AIMove(vacancy); //副程式传入vacancy
}
这是往前移动的程式↓
case 11: //步兵
Nw=actnum[K]; //Nw去接actnum[K]的值 若K等於0 Nw就会等於actnum[0]里的值
switch(Nw) //寻找移动的格子
{
case 1 : //第七格
Cbtcohort1.Location=new Point(x1,y1+55);
Ax[28]=x1; Ay[28]=y1+55; //将移动後的座标在存回阵列
player=1; //换手
break;
}
这是吃棋程式↓
else if(acy[6]==1&&(edge[5]==0||acy[5]==0)&&(edge[7]==0||acy[7]==0))//判断第7
格附近状况
{
switch(pas)
{
case 11:
Cbtcohort1.Location=new Point(x1,y1+55);
Ax[28]=x1; Ay[28]=y1+55; //将移动後的座标在存回阵列
eat(Ax[28],Ay[28],28);
player=1; //换手
break;
哪边要修改?还是要再增加副程式? 因为玩家下完之後~AI不会跑>”<
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 203.72.222.237
1F:推 diamondking:玩家动的时候应该是跑1个function吧?跑完就接AI的 11/20 21:12
2F:→ diamondking:的function应该就行了?不知道你问的是不是这个 11/20 21:13
3F:推 phi12345:那 function 里面的内容 如何写呢? 11/20 21:51