[問題] 關於旗子AI的問題~

看板C_Sharp (C#)作者 (安特洛)時間19年前 (2006/11/20 14:00), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串1/1
我寫好一個棋子~偵測 自身 周圍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
玩家動的時候應該是跑1個function吧?跑完就接AI的
11/20 21:12, 1F

11/20 21:13, , 2F
的function應該就行了?不知道你問的是不是這個
11/20 21:13, 2F

11/20 21:51, , 3F
那 function 裡面的內容 如何寫呢?
11/20 21:51, 3F
文章代碼(AID): #15OKIHNN (C_Sharp)
文章代碼(AID): #15OKIHNN (C_Sharp)