首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

初学c++,写了一个五子棋,望指点,看哪里有不妥的地方

2012-02-14 
初学c++,写了一个五子棋,望各位大哥指点,看哪里有不妥的地方c++比java深奥多了,努力研究代码如下:C/C++ co

初学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不会,咔咔!~想起了可恶的扫雷了,半个月没睡好,晕死……

回溯 是个好东东,好好学去哦!~
[解决办法]

探讨
呵呵。你没有输入范围的判断,比如我输入负数,或者100 100,程序应该要提示出错,要求重输,而不是直接挂了。。

[解决办法]
void init(char flag[20][20]);

怎么不定义成指针?hoho

去研究 数组指针 指针数组


[解决办法]
探讨
呵呵。你没有输入范围的判断,比如我输入负数,或者100 100,程序应该要提示出错,要求重输,而不是直接挂了。。

[解决办法]
哈哈,看看,不错
[解决办法]
五子棋,人早就赢不了电脑了。 稍微写写,人必败。
[解决办法]
if (replay=='Y'||replay=='y')
{
main();
} else

看到蛮多这样的调用,觉得这样不好,还是尽量把功能封装在函数里,不要在main里再调用main了。
[解决办法]
既然是C++,还是做成类好一点,面向对象嘛,以后想做成GUI也不用改,棋盘大小可以做成宏之类的,不要写死在程序里,以后想改也好改,
[解决办法]
探讨
引用:
呵呵。你没有输入范围的判断,比如我输入负数,或者100 100,程序应该要提示出错,要求重输,而不是直接挂了。。


.

[解决办法]
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类型.

最致命的问题是程序风格很差.建议楼主多看一些良好风格的代码.
[解决办法]
对于新手,还不错。

热点排行