当前位置:   article > 正文

c语言人工智能三子棋程序,人工智能-五子棋程序 (弱人工智能)

c语言人工智能三子棋程序,人工智能-五子棋程序 (弱人工智能)

#include

using namespacestd;int a[10][10]; //棋盘大小 9*9 ;

int x[8]={1,1,1,-1,-1,-1,0,0};int y[8]={1,-1,0,1,-1,0,-1,1}; //方向

bool X(int x,int y){ //防御用 检测是否是玩家的子并且判断是否合法

if(x>=1 && x<=9 && y>=1 && y<=9 && a[x][y]==1) return 1;return 0;

}bool Y(int x,int y){ //攻击用 检测是否是电脑的子并且判断是否合法

if(x>=1 && x<=9 && y>=1 && y<=9 && a[x][y]==2) return 1;return 0;

}int check1(int number){ //检验玩家是否number个一排

int w=0;for(int i=1;i<=9;i++){for(int j=1;j<=9;j++){for(int pos=0;pos<8;pos++){int c=0;for(int k=0;k

}if(c==number) w++;

}

}

}returnw;

}int check2(int number){ //检验电脑是否number个一排

int w=0;for(int i=1;i<=9;i++){for(int j=1;j<=9;j++){for(int pos=0;pos<8;pos++){int c=0;for(int k=0;k

}if(c==number) w++;

}

}

}returnw;

}int check11(int number){ //玩家是否 *oooo* 返回个数

int w=0;for(int i=1;i<=9;i++){for(int j=1;j<=9;j++){for(int pos=0;pos<8;pos++){int c=0;for(int k=1;k<=number;k++){if(X(i+k*x[pos],j+k*y[pos])) c++;

}if(c==number && Y(i,j) && Y(i+(number+1)*x[pos],j+(number+1)*y[pos]) ) w++;

}

}

}returnw;

}int check21(int number){ //电脑是否 o****o 中间number 个* 返回个数

int w=0;for(int i=1;i<=9;i++){for(int j=1;j<=9;j++){for(int pos=0;pos<8;pos++){int c=0;for(int k=1;k<=number;k++){if(Y(i+k*x[pos],j+k*y[pos])) c++;

}if(c==4 && X(i,j) && X(i+(number+1)*x[pos],j+(number+1)*y[pos]) ) w++;

}

}

}returnw;

}void solve(int x,int y) { //评估函数//先攻击 再防守//后评估是否进攻 防御

long long b[10][10]; //用函数的值来判定电脑填哪个位置.

for(int i=1;i<=9;i++){for(int j=1;j<=9;j++){

b[i][j]=5-fabs(5-i)+5-fabs(5-j);

}

}

cout<

cout<

cout<

}cout<

}cout<

for(int i=1;i<=9;i++){ //检验自己是否下这个点就赢了

for(int j=1;j<=9;j++){if(a[i][j]) continue;

a[i][j]=2; if(check2(5)) { a[i][j]=2; cout<

}

}for(int i=1;i<=9;i++){for(int j=1;j<=9;j++){if(a[i][j]) continue;intnum1,num2;

num1=check2(4); a[i][j]=2; num2=check2(4); a[i][j]=0; b[i][j]+=(num2-num1)*1000000000 ;//****//检验自己是否4个一串

num1=check21(4);a[i][j]=2; num2=check21(4); a[i][j]=0; b[i][j]-=(num2-num1)*1000000000;//-++++-

num1=check2(3); a[i][j]=2; num2=check2(3); a[i][j]=0; b[i][j]+=(num2-num1)*10000000; //***//检验自己是否3个一串

num1=check21(3);a[i][j]=2; num2=check21(3); a[i][j]=0; b[i][j]-=(num2-num1)*10000000;//-+++-

num1=check2(2); a[i][j]=2; num2=check2(3); a[i][j]=0; b[i][j]+=(num2-num1)*100000; //**//检验自己是否两个一串

num1=check21(2);a[i][j]=2; num2=check21(2); a[i][j]=0; b[i][j]-=(num2-num1)*100000;//-++-

}

}//防守 防守对面直接死

for(int i=1;i<=9;i++){ //检验对手是否下这个点就赢了

for(int j=1;j<=9;j++){if(a[i][j]) continue;

a[i][j]=1; if(check1(5)) { a[i][j]=2; cout<

}

}//防守评分

for(int i=1;i<=9;i++){ //检验对手是否4个一串

for(int j=1;j<=9;j++){if(a[i][j]) continue;intnum1,num2;

num1=check1(4); a[i][j]=1; num2=check1(4); a[i][j]=0; b[i][j]+=(num2-num1)*100000000; //****//检验自己是否4个一串

num1=check11(4);a[i][j]=1; num2=check11(4); a[i][j]=0; b[i][j]-=(num2-num1)*100000000;//-++++-

num1=check1(3); a[i][j]=1; num2=check1(3); a[i][j]=0; b[i][j]+=(num2-num1)*1000000; //***//检验自己是否3个一串

num1=check11(3);a[i][j]=1; num2=check11(3); a[i][j]=0; b[i][j]-=(num2-num1)*1000000;//-+++-

num1=check1(2); a[i][j]=1; num2=check1(3); a[i][j]=0; b[i][j]+=(num2-num1)*10000; //**//检验自己是否两个一串

num1=check11(2);a[i][j]=1; num2=check11(2); a[i][j]=0; b[i][j]-=(num2-num1)*10000;//-++-

}

}int num=0;intaa,bb;for(int i=1;i<=9;i++){for(int j=1;j<=9;j++){if(a[i][j]==0&&b[i][j]>num){

num=b[i][j];

aa=i;

bb=j;

}

}

}

cout<

a[aa][bb]=2; return;

}voidshow(){

cout<

cout<

if(a[i][j]==2) cout<

}cout<

}cout<

}intmain(){

cout<

show();while(1){

cout<

cout<

cin>>x>>y;if(a[x][y] || x>9 || x<=0 || y>9 || y<=0) { cout<

}

a[x][y]=1;bool k=0; k=check1(5); if(k){ show(); cout<

solve(x,y);

k=check2(5); if(k){ show(); cout<

show();

}

}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/1017760
推荐阅读
相关标签
  

闽ICP备14008679号