初学c++,写了一个五子棋,望各位大哥指点,看哪里有不妥的地方
c++比java深奥多了,努力研究
代码如下:
#include <iostream>using namespace std;void init(char flag[20][20]);//初始化棋盘 void draw(char flag[20][20]);//划出指定棋盘 int test(char flag[20][20],char);//判断是否棋局结束 int main(){ //设置棋盘大小 ,可以设置成变量 x,y char flag[20][20]; //初始化数据 init(flag); for(int x =0;x<400; ){//棋盘上总共能乘放下 x*y 个棋子 int i,j; if(x%4==0){ cout<<"请A方走:"; cin>>i; cin>>j; while(flag[i][j]=='X'||flag[i][j]=='O')//判断输入位置是否有棋子 { cout<<endl; cout<<"此地已经有棋子!请重新走:"; cin>>i; cin>>j; } flag[i][j]='X';//指定位置放上棋子 draw(flag); if(test(flag,'X'))//判断是否获胜(A) { char replay; cout<<"A方胜利!是否再来一局?Y/N:"; cin>>replay; if (replay=='Y'||replay=='y') { main(); } else { break; } } x+=2; }else{ cout<<"请B方走:"; cin>>i; cin>>j; while(flag[i][j]=='X'||flag[i][j]=='O') { cout<<endl; cout<<"此地已经有棋子!请重新走:"; cin>>i; cin>>j; } flag[i][j]='O'; draw(flag); if(test(flag,'O'))//判断是否获胜(B) { char replay; cout<<"B方胜利!是否再来一局?Y/N:"; cin>>replay; if (replay=='Y'||replay=='y') { main(); } else { break; } } x+=2; } } return 0;}void init(char flag[][20]){ for(int i=0;i<20;i++){ for(int j=0;j<20;j++){ flag[i][j]='|'; cout<<"-"; cout<<flag[i][j]; } cout<<endl; } }int test(char flag[][20],char f){ int mark =0; for(int i=0;i<15;i++){ for(int j=0;j<15;j++){ if(//判断横着,数着,斜着三种成立情况 (f==flag[i][j]&&f==flag[i+1][j]&&f==flag[i+2][j]&&f==flag[i+3][j]&&f==flag[i+4][j]) ||(f==flag[i][j]&&f==flag[i][j+1]&&f==flag[i][j+2]&&f==flag[i][j+3]&&f==flag[i][j+4]) ||(f==flag[i][j]&&f==flag[i+1][j+1]&&f==flag[i+2][j+2]&&f==flag[i+3][j+3]&&f==flag[i+4][j+4])) { cout<<endl; mark =1; } } } return mark;}void draw(char flag[][20] ){ for(int i=0;i<20;i++){ for(int j=0;j<20;j++){ cout<<"-"; cout<<flag[i][j]; } cout<<endl; }}
[解决办法]
再挑个毛病,对齐格式注意一下
再多聒噪几句……
那个什么优化下,用 回溯
不明白是什么的话,自己好好看书去,这个东西GG不会,咔咔!~想起了可恶的扫雷了,半个月没睡好,晕死……
回溯 是个好东东,好好学去哦!~
[解决办法]
学习学习
[解决办法]
不错!!
[解决办法]
不错学习了,
[解决办法]
原来都是高手啊~~~
[解决办法]
恩,不错的,继续努力吧
[解决办法]
学习下
[解决办法]
有想法不错
友情顶一个
[解决办法]
卧槽,不用OOP却用C++编写..有耐心,也的确是初学
[解决办法]
程序风格不好.
棋盘的两个常量可以使用const 定义:
const int cols = 20;
const int rows = 20;
前面的函数定义,应写成:
void init(char flag[][rows]);
void draw(const char flag[][rows]);
bool test(char flag[][rows], char);
test里的mark可以使用bool类型.
最致命的问题是程序风格很差.建议楼主多看一些良好风格的代码.
[解决办法]
对于新手,还不错。