初学c++,写了一个五子棋,望各位大哥指点,看哪里有不妥的地方
c++比java深奥多了,努力研究
代码如下:
- C/C++ code
#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; }}
[解决办法]
写个六子棋吧
[解决办法]
呵呵。你没有输入范围的判断,比如我输入负数,或者100 100,程序应该要提示出错,要求重输,而不是直接挂了。。
[解决办法]
我好努力研究,然后在下届YD六子棋比赛中作弊去
hoho
恭喜李晗猪头,这个算是处女秀吧?hoho
在这里表调皮捣蛋哦!~要学就好好学!~咔咔
[解决办法]
学习!
[解决办法]
char flag[20][20];
使用之前初始化
这个是习惯问题……不知道怎么初始化,自己翻手册去!~
[解决办法]
再挑个毛病,对齐格式注意一下
再多聒噪几句……
那个什么优化下,用 回溯
不明白是什么的话,自己好好看书去,这个东西GG不会,咔咔!~想起了可恶的扫雷了,半个月没睡好,晕死……
回溯 是个好东东,好好学去哦!~
[解决办法]
[解决办法]
void init(char flag[20][20]);
怎么不定义成指针?hoho
去研究 数组指针 指针数组
[解决办法]
[解决办法]
哈哈,看看,不错
[解决办法]
五子棋,人早就赢不了电脑了。 稍微写写,人必败。
[解决办法]
if (replay=='Y'||replay=='y')
{
main();
} else
看到蛮多这样的调用,觉得这样不好,还是尽量把功能封装在函数里,不要在main里再调用main了。
[解决办法]
既然是C++,还是做成类好一点,面向对象嘛,以后想做成GUI也不用改,棋盘大小可以做成宏之类的,不要写死在程序里,以后想改也好改,
[解决办法]
[解决办法]
bu cuo
[解决办法]
顶下
[解决办法]
新手路过!
[解决办法]
判断输赢可以试着判断最后一个棋子周围的情况就行了,最后一个棋子可能决定输赢,判断最后一个棋子8个方向上相邻同样棋子的数目,如果大于等于5则赢。全盘遍历太慢了。
试着加人机对战,在网上有相关算法。至于电脑的智商,就看算法往后面算多少步了。我也写过一个简单的五子棋 哈哈。
[解决办法]
up
[解决办法]
楼主先前是JAVA的
[解决办法]
嗯 不错 学习 了....
再顶一下...
[解决办法]
五子棋我不会下~哈哈~
[解决办法]
五子棋不会下?
[解决办法]
mark
[解决办法]
纯学习。
[解决办法]
我初学java,觉得java很像c++啊。
[解决办法]
看了
[解决办法]
一直以来都想写,不过到现在还没动手,哈哈
[解决办法]
输入超出范围的坐标值时没错误处理,,,,,呵呵
[解决办法]
up
[解决办法]
顶你一个!~~~~~~
[解决办法]
学习学习
[解决办法]
不错!!
[解决办法]
不错学习了,
[解决办法]
原来都是高手啊~~~
[解决办法]
恩,不错的,继续努力吧
[解决办法]
学习下
[解决办法]
有想法不错
友情顶一个
[解决办法]
卧槽,不用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类型.
最致命的问题是程序风格很差.建议楼主多看一些良好风格的代码.
[解决办法]
对于新手,还不错。