/***********************************************/ /* 是否胜利,是返回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; } } }

评论