(转)C++五子棋程序
来源:互联网 发布:doctor seuss 淘宝 编辑:程序博客网 时间:2024/05/04 13:05
在百度知道看到的。。。看起来蛮简单的代码,作者crpp13。记在这里。
#include<iostream>#include<cstdlib> using namespace std;const char outstr[11][4] = { "┌", "┬", "┐", "├", "┼", "┤", "└", "┴", "┘", "○", "●" };//符号表int com[15][15], luozi[15][15];int c, d;void jushi() //这是判断落子重要性的函数 {int x, y, i, m, n, lianzi1 = 0, lianzi2 = 0, life = 0; //连子1为玩家的连子数,连子2为电脑的连子数memset(com, 0, sizeof(com)); //将棋盘com清零for (x = 0; x <= 14; x++)for (y = 0; y <= 14; y++){if (luozi[x][y] == 0){for (m = -1; m <= 1; m++) //m、n代表的是某个子周围的几个方向,(-1,-1)代表左上方,(1,0)代表正右方等。for (n = -1; n <= 1; n++){if (m != 0 || n != 0){for (i = 1; i <= 4; i++){if (0<=x + i*m <= 14 && 0<= y + i*n <= 14 && luozi[x + i*m][y + i*n] == 1){lianzi1++; //某个子周围4个以内有子时表示连子数目增加}elseif (luozi[x + i*m][y + i*n] == 0){life++; break; }else{break;}}for (i = -1; i >= -4; i--){if (0<= x + i*m <= 14 && 0<=y + i*n <= 14 && luozi[x + i*m][y + i*n] == 1){lianzi1++;}elseif (luozi[x + i*m][y + i*n] == 0){life++; break;}else{break;}}if (lianzi1 == 1) { com[x][y] += 1; }else if (lianzi1 == 2){if (life == 1) { com[x][y] += 5; }else if (life == 2) { com[x][y] += 10; }}else if (lianzi1 == 3){if (life == 1) { com[x][y] += 20; }else if (life == 2) { com[x][y] += 100; }}else if (lianzi1 == 4) { com[x][y] += 500; }life = 0;for (i = 1; i <= 4; i++){if (x + i*m >= 0 && x + i*m <= 14 && y + i*n >= 0 && y + i*n <= 14 && luozi[x + i*m][y + i*n] == 2){lianzi2++;}elseif (luozi[x + i*m][y + i*n] == 0){life++; break;}else{break;}}for (i = -1; i >= -4; i--){if (x + i*m >= 0 && x + i*m <= 14 && y + i*n >= 0 && y + i*n <= 14 && luozi[x + i*m][y + i*n] == 2){lianzi2++;}elseif (luozi[x + i*m][y + i*n] == 0){life++; break;}else{break;}}if (lianzi2 == 1) { com[x][y] += 2; }else if (lianzi2 == 2){if (life == 1) { com[x][y] += 8; }else if (life == 2) { com[x][y] += 30; }}else if (lianzi2 == 3){if (life == 1) { com[x][y] += 50; }else if (life == 2) { com[x][y] += 200; }}else if (lianzi2 == 4) { com[x][y] += 1000; }lianzi1 = 0;lianzi2 = 0;life = 0;}}}}}void computer(int a[15][15]) //这是电脑落子的函数 {int i, j, max = 0;jushi();for (i = 0; i <= 14; i++)for (j = 0; j <= 14; j++){if (com[i][j]>max){max = com[i][j];c = i;d = j;}}a[c][d] = 10;luozi[c][d] = 2;}int panduan(int x, int y, int sum) //判断胜负的函数 {int m, n, i, lianzi = 0;for (m = -1; m <= 1; m++)for (n = -1; n <= 1; n++){if (m != 0 || n != 0){for (i = 1; i <= 4; i++){if (x + i*m >= 0 && x + i*m <= 14 && y + i*n >= 0 && y + i*n <= 14 && luozi[x + i*m][y + i*n] == sum){lianzi++;}else{break;}}for (i = -1; i >= -4; i--){if (x + i*m >= 0 && x + i*m <= 14 && y + i*n >= 0 && y + i*n <= 14 && luozi[x + i*m][y + i*n] == sum){lianzi++;}else{break;}}if (lianzi >= 4){return 1;}else{lianzi = 0;}}}return 0;}int main() //主函数 ,主要进行人落子工作 {system("color 2f");system("mode con cols=50 lines=25");system("title 欢迎使用!");int a[15][15] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5,6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8 };int x, y, i, j;memset(luozi, 0, sizeof(luozi));//画棋盘cout << " 0 1 2 3 4 5 6 7 8 9 10 1 2 3 4" << endl;for (i = 0; i <= 14; i++){if (i != 0)cout << endl;cout << i % 10;for (j = 0; j <= 14; j++){cout << outstr[a[i][j]];}}cout << endl;cout << "请输入您要下的棋子 行\\列 用空格隔开:";while (cin >> x >> y){if (luozi[x][y] == 0 && x >= 0 && x <= 14 && y >= 0 && y <= 14){a[x][y] = 9; //下入○luozi[x][y] = 1; //落子盘里对应点为1if (panduan(x, y, 1) == 0) //选手并未获胜{system("cls"); //system函数清屏computer(a); //电脑下子if (panduan(c, d, 2) == 0) //电脑并未获胜{//重新画棋盘cout << " 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4" << endl;for (i = 0; i <= 14; i++){if (i != 0)cout << endl;cout << i % 10;for (j = 0; j <= 14; j++){cout << outstr[a[i][j]];}}cout << endl;cout << "您的棋子落在" << x << "行" << " " << y << "列" << endl;cout << "电脑的棋子落在" << c << "行" << " " << d << "列" << endl;cout << "请输入您要下的棋子";}else //电脑获胜了{//重新画棋盘cout << " 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4" << endl;for (i = 0; i <= 14; i++){if (i != 0)cout << endl;cout << i % 10;for (j = 0; j <= 14; j++){cout << outstr[a[i][j]];}}cout << endl;cout << "电脑的棋子落在" << c << "行" << " " << d << "列" << endl;cout << "电脑获胜!" << endl;break;}}else //选手获胜了{system("cls"); //清屏cout << " 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4" << endl;for (i = 0; i <= 14; i++){if (i != 0)cout << endl;cout << i % 10;for (j = 0; j <= 14; j++){cout << outstr[a[i][j]];}}cout << endl;cout << "您获胜啦!" << endl;break;}}else{cout << "输入错误,请重新输入:" << endl;}}system("title 谢谢使用!");system("color 03"); //黑色背景湖蓝色字cout << "谢谢使用" << endl;system("pause>nul"); //保留画面,但不显示“按任意键退出”return 0;}
0 0
- 一个五子棋C程序
- (转)C++五子棋程序
- C语言编写五子棋程序
- C和WIN32 API 的五子棋 程序
- 五子棋(Gomoku)博弈程序
- 五子棋程序
- 五子棋程序
- 五子棋程序
- 五子棋程序
- 五子棋 (用C语言编写五子棋游戏)
- java学习(4) 五子棋 小程序
- 用C语言在win-tc下编写五子棋程序
- 国庆小练笔 五子棋(c++)
- c语言连珠五子棋(未完成)
- 简单五子棋(单机版-C)
- c语言简单实现三子棋(五子棋)
- C#版五子棋程序
- 网络五子棋程序
- Intent.ACTION_VIEW
- gcc命令objdump用法
- GDB TO LLDB COMMAND MAP
- Ubuntu 14.04下oracle sqldeveloper只能用管理员运行的解决办法
- hdu1215 七夕节 (数学:求因子之和)
- (转)C++五子棋程序
- DB_NAME,SID,ORACLE_SID等参数的剖析
- uva 340(检索)
- 读取配置文件
- MySQL中的视图及性能问题
- ADO.NET之1-数据库连接---ShinePans
- 黑马程序员:final、static用法总结
- HDU 2063 过山车
- java实现柱状图