.net做网站c石大远程网页设计及网站建设答案
.net做网站c,石大远程网页设计及网站建设答案,网络营销策略制定,收集网络营销方案C五子棋人机对战(含注释)-CSDN博客
C五子棋人机对战-CSDN博客
这两篇博客中有个bug#xff0c;就是没加srand(time(0));这个语句(放在主函数的最开头)
改正代码
#includebits/stdc.h//万能头
#define ll long long
using namespace std;
ll n,a[1000][1000],x,y,…C五子棋人机对战(含注释)-CSDN博客
C五子棋人机对战-CSDN博客
这两篇博客中有个bug就是没加srand(time(0));这个语句(放在主函数的最开头)
改正代码
#includebits/stdc.h//万能头
#define ll long long
using namespace std;
ll n,a[1000][1000],x,y,b[1000][1000];
int xd[10]{1,-1,0};
int yd[10]{1,-1,0};
void init(){//初始化 for(int i0;i1000;i) for(int j0;j1000;j) a[i][j]2;
}
bool find(){//判断黑子连珠 //竖着 ll sum1,i,j;ix,jy;b[i][j]3;while(1){if(a[i1][j]1){i;sum;b[i][j]3;}else break;}ix,jy;while(1){if(a[i-1][j]1){i--;sum;b[i][j]3;}else break;}if(sum5) return true;//横着 sum1;ix,jy;while(1){if(a[i][j1]1){j;sum;b[i][j]3;}else break;}ix,jy;while(1){if(a[i][j-1]1){j--;sum;b[i][j]3;}else break;}if(sum5) return true;//斜着 1 sum1;ix,jy;while(1){if(a[i-1][j-1]1){i--;j--;sum;b[i][j]3;}else break;}ix,jy;while(1){if(a[i1][j1]1){i;j;sum;b[i][j]3;}else break;}if(sum5) return true;//斜着 2 sum1;ix,jy;while(1){if(a[i-1][j1]1){i--;j; sum;b[i][j]3;}else break;}ix,jy;while(1){if(a[i1][j-1]1){i;j--;sum;b[i][j]3;}else break;}if(sum5) return true;return false;
}
bool find2(){//判断白子连珠 //竖着 ll sum1,i,j;ix,jy;b[i][j]3;while(1){if(a[i1][j]0){i;sum;b[i][j]3;}else break;}ix,jy;while(1){if(a[i-1][j]0){i--;sum;b[i][j]3;}else break;}if(sum5) return true;//横着 sum1;ix,jy;while(1){if(a[i][j1]0){j;sum;b[i][j]3;}else break;}ix,jy;while(1){if(a[i][j-1]0){j--;sum;b[i][j]3;}else break;}if(sum5) return true;//斜着 1 sum1;ix,jy;while(1){if(a[i-1][j-1]0){i--;j--;sum;b[i][j]3;}else break;}ix,jy;while(1){if(a[i1][j1]0){i;j;sum;b[i][j]3;}else break;}if(sum5) return true;//斜着 2 sum1;ix,jy;while(1){if(a[i-1][j1]0){i--;j; sum;b[i][j]3;}else break;}ix,jy;while(1){if(a[i1][j-1]0){i;j--;sum;b[i][j]3;}else break;}if(sum5) return true;return false;
}
bool find4(int t,int tt){//AI判断对方是否有连珠 //竖着 ll sum1,i,j,ii,jj;ix,jy;while(1){if(a[i1][j]tt){i;sum;}else break;}iix,jjy;while(1){if(a[ii-1][jj]2sumt){xii-1;yjj;return true;}if(a[ii-1][jj]tt){ii--;sum;}else break;}if(sumt){if(a[i1][j]2sumt){xi1;yj;return true;}}//横着 sum1;ix,jy;while(1){if(a[i][j1]tt){j;sum;}else break;}iix,jjy;while(1){if(a[ii][jj-1]2sumt){xii;yjj-1; return true;}if(a[ii][jj-1]tt){jj--;sum;}else break;}if(sumt){if(a[i][j1]2sumt){xi;yj1;return true;}}//斜着 1 sum1;ix,jy;while(1){if(a[i-1][j-1]tt){i--;j--;sum;}else break;}iix,jjy;while(1){if(a[ii1][jj1]2sumt){xii1;yjj1;return true;}if(a[ii1][jj1]tt){ii;jj;sum;}else break;}if(sumt){if(a[i-1][j-1]2sumt){xi-1;yj-1;return true;}}//斜着 2 sum1;ix,jy;while(1){if(a[i-1][j1]tt){i--;j; sum;}else break;}iix,jjy;while(1){if(a[ii1][jj-1]2sumt){xii1;yjj-1;return true;}if(a[ii1][jj-1]tt){ii;jj--;sum;}else break;}if(sumt){if(a[i-1][j1]2sumt){xi-1;yj1;return true;}}return false;
}
bool find3(){//平局 for(int i1;in;i) for(int j1;jn;j) if(a[i][j]2) return false;return true;
}
int getRand(int min,int max){//随机种子函数 return (rand()%(max-min1))min;
}
int main(){srand(time(0));init();coutAI再聪明也有失误的时候\n;cout棋盘大小:;cinn;cout1.黑子\n;cout2.白子\n;int d;cind;if(d1){cout白子为0,黑子为1,2为空棋位\n下棋时请输入棋的坐标(格式:x y 坐标范围是从1,1到n,n)\n如果一方赢了那他赢得那一行棋都会变成3\n; while(1){cout ;for(int i1;in;i) printf(%3d,i);cout\n\n;for(int i1;in;i){printf(%3d,i);for(int j1;jn;j) printf(%3d,a[i][j]);cout\n;}if(find3()){cout平局,游戏结束;break; } //黑子 cout该你了\n;cinxy;while((a[x][y]!2)||(xn||yn||x1||y1)){if(a[x][y]!2)cout此坐标已有棋子\n; else if(xn||yn||x1||y1) cout此坐标不正确\n;cout该你了\n;cinxy;}a[x][y]1;for(int i1;in;i) for(int j1;jn;j) b[i][j]a[i][j];if(find()){cout ;for(int i1;in;i) printf(%3d,i);cout\n\n;for(int i1;in;i){printf(%3d,i);for(int j1;jn;j) printf(%3d,a[i][j]);cout\n;}cout你赢了,游戏结束;break; }cout ;for(int i1;in;i) printf(%3d,i);cout\n\n;for(int i1;in;i){printf(%3d,i);for(int j1;jn;j) printf(%3d,a[i][j]);cout\n;}if(find3()){cout平局,游戏结束;break; } //白子coutAI思考中...\n;if(find4(4,1));else if(find4(3,1));else if(find4(2,1));/*else if(find4(4,0));else if(find4(3,0));else if(find4(2,0));*/else{while((a[x][y]!2)||(xn||yn||x1||y1)){xxxd[getRand(0,3)];yyyd[getRand(0,3)];}}coutx:x y:y\n;a[x][y]0;for(int i1;in;i) for(int j1;jn;j) b[i][j]a[i][j];if(find2()){cout ;for(int i1;in;i) printf(%3d,i);cout\n\n;for(int i1;in;i){printf(%3d,i);for(int j1;jn;j) printf(%3d,a[i][j]);cout\n;}coutAI赢了,游戏结束;break; }}cout\n ;for(int i1;in;i) printf(%3d,i);cout\n\n;for(int i1;in;i){printf(%3d,i);for(int j1;jn;j) printf(%3d,b[i][j]);cout\n;}}else if(d2){int ff1;cout白子为0,黑子为1,2为空棋位\n下棋时请输入棋的坐标(格式:x y 坐标范围是从1,1到n,n)\n如果一方赢了那他赢得那一行棋都会变成3\n; while(1){cout ;for(int i1;in;i) printf(%3d,i);cout\n\n;for(int i1;in;i){printf(%3d,i);for(int j1;jn;j) printf(%3d,a[i][j]);cout\n;}if(find3()){cout平局,游戏结束;break; } //黑子coutAI思考中...\n;if(ff){ff0;xn/2;yn/2;}else{if(find4(4,0));else if(find4(3,0));else if(find4(2,0));/*else if(find4(4,1));else if(find4(3,1));else if(find4(2,1));*/else{while((a[x][y]!2)||(xn||yn||x1||y1)){xxxd[getRand(0,3)];yyyd[getRand(0,3)];}}}coutx:x y:y\n;a[x][y]1;for(int i1;in;i) for(int j1;jn;j) b[i][j]a[i][j];if(find()){cout ;for(int i1;in;i) printf(%3d,i);cout\n\n;for(int i1;in;i){printf(%3d,i);for(int j1;jn;j) printf(%3d,a[i][j]);cout\n;}coutAI赢了,游戏结束;break; } cout ;for(int i1;in;i) printf(%3d,i);cout\n\n;for(int i1;in;i){printf(%3d,i);for(int j1;jn;j) printf(%3d,a[i][j]);cout\n;}if(find3()){cout平局,游戏结束;break; } //白子cout该你了\n;cinxy;while((a[x][y]!2)||(xn||yn||x1||y1)){if(a[x][y]!2)cout此坐标已有棋子\n; else if(xn||yn||x1||y1) cout此坐标不正确\n;cout该你了\n;cinxy;}a[x][y]0;for(int i1;in;i) for(int j1;jn;j) b[i][j]a[i][j];if(find2()){cout ;for(int i1;in;i) printf(%3d,i);cout\n\n;for(int i1;in;i){printf(%3d,i);for(int j1;jn;j) printf(%3d,a[i][j]);cout\n;}cout你赢了,游戏结束;break; }}cout\n ;for(int i1;in;i) printf(%3d,i);cout\n\n;for(int i1;in;i){printf(%3d,i);for(int j1;jn;j) printf(%3d,b[i][j]);cout\n;}}else cout无效输入; return 0;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/88234.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!