正文

五子棋AI(II)2005-08-07 11:03:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/elva6401/3589.html

分享到:

(3)    给出下了一个子后的分数: int CMyChessDlg::GiveScore(int type, int x, int y) {         int i,score=0;     for(i=0;i<572;i++)     {         //计算机下         if(type==1)         {             if(ctable[x][y][i])             {                 switch(win[1][i])                 {                 case 1:                     score+=5;                     break;                 case 2:                     score+=50;                     break;                 case 3:                     score+=100;                     break;                 case 4:                     score+=10000;                     break;                 default:                     break;                 }             }         }         //人下         else         {             if(ptable[x][y][i])             {                 switch(win[0][i])                 {                 case 1:                     score-=5;                     break;                 case 2:                     score-=50;                     break;                 case 3:                     score-=500;                     break;                 case 4:                     score-=5000;                     break;                 default:                 break;             }             }         }     }     return score; } (4)    核心程序 ,(5)    即计算机如何运用极小极大法分析,(6)    选取最优走法,(7)     在程序中极小极大法即体现在两个while循环前后及之间的内容,其估价函数的体现在ctemp+pscore中 void CMyChessDlg::ComTurn() {         //bestx,best为当前最佳位置,i,j是人能下的各种位置;pi,pj是计算机能下的各种位置     Int   bestx,besty,i,j,pi,pj,ptemp,ctemp,pscore=10,cscore=-10000, ctempboard[15][15],ptempboard[15][15];     int m,n,temp1[20],temp2[20];//暂存第一步搜索的信息     if(start)     {         if(board[7][7]==2)         {             bestx=7;             besty=7;         }         else         {             bestx=8;             besty=8;         }         start=false;     }     else     {//寻找最佳位置         GetBoard(ctempboard,board);     while(SearchBlank(i,j,ctempboard))     {//进行第一步查找         n=0;         pscore=10;         GetBoard(ptempboard,board);//获取当前棋盘状态         ctempboard[i][j]=3;//标记已被查找         ctemp=GiveScore(1,i,j);         for(m=0;m<572;m++)         {//暂时更改玩家信息             if(ptable[i][j][m])             {                 temp1[n]=m;                 ptable[i][j][m]=false;                 temp2[n]=win[0][m];                 win[0][m]=7;                 n++;             }         }         ptempboard[i][j]=1;         

阅读(14894) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册