[問題] 關於旗子AI的問題~
我寫好一個棋子~偵測 自身 周圍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
推
11/20 21:12, , 1F
11/20 21:12, 1F
→
11/20 21:13, , 2F
11/20 21:13, 2F
推
11/20 21:51, , 3F
11/20 21:51, 3F
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章