正文

五子棋(II)续2005-08-07 11:10:00

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

分享到:

/***********************************************/ /* 是否胜利,是返回1 */ int victory(int player) { int column=E_column,row=E_row; int left_sum=0,right_sum=0; int top_sum=0,down_sum=0; int left_top_sum=0,right_down_sum=0; int right_top_sum=0,left_down_sum=0; int i,j; for (i=column;i>=column-4 && i>0;i--) if (chess_map[i-1][row-1]==player) left_sum++; else break; for (i=column;i<=column+4 && i<17;i++) if (chess_map[i-1][row-1]==player) right_sum++; else break; if ((left_sum+right_sum)==6) return 1; for (j=row;j>=row-4 && j>0;j--) if (chess_map[column-1][j-1]==player) top_sum++; else break; for (j=row;j<=row+4 && j<17;j++) if (chess_map[column-1][j-1]==player) down_sum++; else break; if ((top_sum+down_sum)==6) return 1; for (i=column,j=row;i>=column-4 && j>=row-4 && i>0 && j>0;i--,j--) if (chess_map[i-1][j-1]==player) left_top_sum++; else break; for (i=column,j=row;i<=column+4 && j<=row+4 && i<17 && j<17;i++,j++) if (chess_map[i-1][j-1]==player) right_down_sum++; else break; if ((left_top_sum+right_down_sum)==6) return 1; for (i=column,j=row;i<=column+4 && j>=row-4 && i<17 && j>0;i++,j--) if (chess_map[i-1][j-1]==player) right_top_sum++; else break; for (i=column,j=row;i>=column-4 && j<=row+4 && j<17 && i>0;j++,i--) if (chess_map[i-1][j-1]==player) left_down_sum++; else break; if (right_top_sum+left_down_sum==6) return 1; return 0; } /**********************AI**********************/ int AI(int *m,int *n) { int bestx=8,besty=8; long f_score=0,score=0; int i,j; int a[8],b[8]; for (i=0;i<8;i++) {a[i]=0,b[i]=0;} for (i=0;i<16;i++) for (j=0;j<16;j++) { score=0; if (chess_map[i][j]==0) { /********************进攻分数**********************/ chess_map[i][j]=computer; for (i=column;i>=column-4 && i>0;i--) if (chess_map[i-1][row-1]==computer) a[0]++; else break; for (i=column;i<=column+4 && i<17;i++) if (chess_map[i-1][row-1]==computer) a[1]++; else break; for (j=row;j>=row-4 && j>0;j--) if (chess_map[column-1][j-1]==computer) a[2]++; else break; for (j=row;j<=row+4 && j<17;j++) if (chess_map[column-1][j-1]==computer) a[3]++; else break; for (i=column,j=row;i>=column-4 && j>=row-4 && i>0 && j>0;i--,j--) if (chess_map[i-1][j-1]==computer) a[4]++; else break; for (i=column,j=row;i<=column+4 && j<=row+4 && i<17 && j<17;i++,j++) if (chess_map[i-1][j-1]==computer) a[5]++; else break; for (i=column,j=row;i<=column+4 && j>=row-4 && i<17 && j>0;i++,j--) if (chess_map[i-1][j-1]==computer) a[6]++; else break; for (i=column,j=row;i>=column-4 && j<=row+4 && j<17 && i>0;j++,i--) if (chess_map[i-1][j-1]==computer) a[7]++; else break; for (i=0;i<8;i++) { switch(a[i]-1) { case 1:         score+=5;     break; case 2:     score+=50;     break; case 3:     score+=100;     break; case 4:     score+=10000;     break; default:     break; } } /********************进攻分数**********************/ /********************防守分数**********************/ chess_map[i][j]=elva6401; for (i=column;i>=column-4 && i>0;i--) if (chess_map[i-1][row-1]==elva6401) b[0]++; else break; for (i=column;i<=column+4 && i<17;i++) if (chess_map[i-1][row-1]==elva6401) b[1]++; else break; for (j=row;j>=row-4 && j>0;j--) if (chess_map[column-1][j-1]==elva6401) b[2]++; else break; for (j=row;j<=row+4 && j<17;j++) if (chess_map[column-1][j-1]==elva6401) b[3]++; else break; for (i=column,j=row;i>=column-4 && j>=row-4 && i>0 && j>0;i--,j--) if (chess_map[i-1][j-1]==elva6401) b[4]++; else break; for (i=column,j=row;i<=column+4 && j<=row+4 && i<17 && j<17;i++,j++) if (chess_map[i-1][j-1]==elva6401) b[5]++; else break; for (i=column,j=row;i<=column+4 && j>=row-4 && i<17 && j>0;i++,j--) if (chess_map[i-1][j-1]==elva6401) b[6]++; else break; for (i=column,j=row;i>=column-4 && j<=row+4 && j<17 && i>0;j++,i--) if (chess_map[i-1][j-1]==elva6401) b[7]++; else break; for(i=0;i<8;i++) { switch(b[i]-1) { case 1:     score-=5;     break; case 2:     score-=50;     break; case 3:     score-=500;     break; case 4:     score-=5000;     break; default:     break; } } /********************防守分数**********************/ chess_map[i][j]=0; if (score>f_score) { bestx=i+1; besty=j+1; f_score=score; } } } E_column=bestx,* m=bestx; E_row=besty,* n=besty; chess_map[bestx-1][besty-1]=computer; } /**********************AI***********************/ /***********************************************/ /* main */ int main() { int gdriver=DETECT,gmode; initgraph(&gdriver,&gmode," "); setbkcolor(BLUE); init(); column=9,row=9; chess_map[column-1][row-1]=computer; draw_chess(computer); while(1) { init_col_row(); flag=1; while(flag==1) {     move_chess(elva6401);     getch(); } draw_chess(elva6401); if(victory(elva6401))     {     outtextxy(550,400,"You win the game\n");     getch();     return 0;     } AI(&column,&row); draw_chess(computer); if(victory(computer))     {     outtextxy(550,400,"You lost the game\n");     getch();     return 0;     } } }

阅读(16199) | 评论(0)


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

评论

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