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

lihan6415151528 2009-06-26 09:28:47
加精
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;
}
}

...全文
83606 194 打赏 收藏 转发到动态 举报
写回复
用AI写文章
194 条回复
切换为时间正序
请发表友善的回复…
发表回复
KKGBIT 2012-06-09
  • 打赏
  • 举报
回复
void draw(char flag[][20] ){

for(int i=0;i<=20;i++){
for(int j=0;j<=20;j++){
cout<<"-";
{if(i!=20)
{if(j!=20) cout<<flag[i][j];
else cout<<(i);}
else if(j<10)cout<<j;
else cout<<(j-10);//为了对齐
}
}
cout<<endl;
}
}//end draw

挺好玩的,作为初学者我感觉收获还蛮多。。。。
bbsview 2012-04-06
  • 打赏
  • 举报
回复
呵呵,好玩,debug了一下
四木先生 2012-03-30
  • 打赏
  • 举报
回复
正在学习c++
陆远 2012-03-26
  • 打赏
  • 举报
回复
// five.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <ctype.h>
#include <conio.h>
using namespace std;

void init(char b[20][20])
{
for(int i=0;i<20;++i)
{
for(int j=0;j<20;++j)
{
b[i][j]='+';
cout<<" ";
cout<<b[i][j];
}
cout<<endl;
}
}

void draw(char flag[][20] )
{
system("cls");
for(int i=0;i<20;i++){
for(int j=0;j<20;j++){
cout<<" ";
cout<<flag[i][j];
}
cout<<endl;
}
}

bool test(char b[][20],char f)
{

for(int i=0;i<20;++i)//横着
{
for(int j=0;j<15;++j)
{
if(b[i][j]==f&&b[i][j+1]==f&&b[i][j+2]==f&&b[i][j+3]==f&&b[i][j+4]==f)
{
return true;
}
}
}
for(int i=0;i<15;++i)//竖着
{
for(int j=0;j<20;++j)
{
if(b[i][j]==f&&b[i+1][j]==f&&b[i+2][j]==f&&b[i+3][j]==f&&b[i+4][j]==f)
{
return true;
}
}
}
for(int i=0;i<15;++i)//右斜
{
for(int j=0;j<15;++j)
{
if(b[i][j]==f&&b[i+1][j+1]==f&&b[i+2][j+2]==f&&b[i+3][j+3]==f&&b[i+4][j+4]==f)
{
return true;
}
}
}
for(int i=5;i<20;++i)//左斜
{
for(int j=5;j<20;++j)
{
if(b[i][j]==f&&b[i-1][j-1]==f&&b[i-2][j-2]&&b[i-3][j-3]&&b[i-4][j-4])
{
return true;
}
}
}
return false;
}

bool stopGame(int n) //changed:2009-06-28 by shenzhenNBA,FUNCTION:玩到半突然想结束游戏
{
if(n==99)
return true;
else
return false;
}

bool check(int i,int j)
{
if(i<0||i>=20||j<0||i>=20)
{
return false;
}
else
return true;
}

void input(int &i)
{
cin>>i;
cin.clear();
cin.sync();
}

int _tmain(int argc, _TCHAR* argv[])
{
char c[20][20]={0};
init(c);
for(int x =0;x<400; )
{
int i=-1,j=-1;
if(x%4==0)
{
//START::changed:2009-06-28,shenzhenNBA,Function:make game to END
cout<<"请A方走(99为退出):"<<endl<<"横坐标(1--20):";
input(i);
if(stopGame(i))
{
cout<<" game end!"<<endl;break;
}
cout<<"纵坐标(1--20):";
input(j);
if (stopGame(j))
{
cout<<endl<<"------------ The Game is Over ------------ "<<endl<<endl;break;
}
while(1)//判断输入位置是否有棋子
{
if(c[i][j]=='x'||c[i][j]=='o')
{
cout<<"已经有棋子,请重新"<<endl;
}
else
if(!check(i,j))
{
cout<<"输入的棋子不合法,请重新输入"<<endl;
}
else
break;
cout<<"横坐标(1--20):";
input(i);
cout<<"纵坐标(1--20):";
input(j);
}
c[i][j]='x';
draw(c);
if(test(c,'x'))//判断是否获胜(A)
{
char replay;
cout<<"A方胜利!是否再来一局?Y/N:";
cin>>replay;
if (replay=='Y'||replay=='y')
{
_tmain(argc,argv);
} else
{
break;
}
}
x+=2;
}
else
{
cout<<"请B方走(99为退出):"<<endl<<"横坐标(1--20):";
input(i);
if(stopGame(i))
{
cout<<" game end!"<<endl;break;
}
cout<<"纵坐标(1--20):";
input(j);
if (stopGame(j))
{
cout<<endl<<"------------ The Game is Over ------------ "<<endl<<endl;break;
}
while(1)//判断输入位置是否有棋子
{
if(c[i][j]=='x'||c[i][j]=='o')
{
cout<<"已经有棋子,请重新"<<endl;
}
else
if(!check(i,j))
{
cout<<"输入的棋子不合法,请重新输入"<<endl;
}
else
break;
cout<<"横坐标(1--20):";
input(i);
cout<<"纵坐标(1--20):";
input(j);
}
c[i][j]='o';
draw(c);
if(test(c,'o'))//判断是否获胜(A)
{
char replay;
cout<<"B方胜利!是否再来一局?Y/N:";
cin>>replay;
if (replay=='Y'||replay=='y')
{
_tmain(argc,argv);
} else
{
break;
}
}
x+=2;
}

}
return 0;
}

「已注销」 2012-03-26
  • 打赏
  • 举报
回复
挺复杂的 楼主 不错 帮顶!
陆远 2012-03-23
  • 打赏
  • 举报
回复
// five.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

void init(char b[20][20])
{
for(int i=0;i<20;++i)
{
for(int j=0;j<20;++j)
{
b[i][j]='+';
cout<<" ";
cout<<b[i][j];
}
cout<<endl;
}
}

void draw(char flag[][20] )
{
system("cls");
for(int i=0;i<20;i++){
for(int j=0;j<20;j++){
cout<<" ";
cout<<flag[i][j];
}
cout<<endl;
}
}

bool test(char b[][20],char f)
{

for(int i=0;i<20;++i)//横着
{
for(int j=0;j<15;++j)
{
if(b[i][j]==f&&b[i][j+1]==f&&b[i][j+2]==f&&b[i][j+3]==f&&b[i][j+4]==f)
{
return true;
}
}
}
for(int i=0;i<15;++i)//竖着
{
for(int j=0;j<20;++j)
{
if(b[i][j]==f&&b[i+1][j]==f&&b[i+2][j]==f&&b[i+3][j]==f&&b[i+4][j]==f)
{
return true;
}
}
}
for(int i=0;i<15;++i)//右斜
{
for(int j=0;j<15;++j)
{
if(b[i][j]==f&&b[i+1][j+1]==f&&b[i+2][j+2]==f&&b[i+3][j+3]==f&&b[i+4][j+4]==f)
{
return true;
}
}
}
for(int i=5;i<20;++i)//左斜
{
for(int j=5;j<20;++j)
{
if(b[i][j]==f&&b[i-1][j-1]==f&&b[i-2][j-2]&&b[i-3][j-3]&&b[i-4][j-4])
{
return true;
}
}
}
return false;
}

bool stopGame(int n) //changed:2009-06-28 by shenzhenNBA,FUNCTION:玩到半突然想结束游戏
{
if(n==99)
return true;
else
return false;
}

bool check(int i,int j)
{
if(i<0||i>=20||j<0||i>=20)
{
return false;
}
else
return true;
}

int _tmain(int argc, _TCHAR* argv[])
{
char c[20][20]={0};
init(c);
for(int x =0;x<400; )
{
int i,j;
if(x%4==0)
{
//START::changed:2009-06-28,shenzhenNBA,Function:make game to END
cout<<"请A方走(99为退出):"<<endl<<"横坐标(1--20):";
cin>>i;
if(stopGame(i))
{
cout<<" game end!"<<endl;break;
}
cout<<"纵坐标(1--20):";
cin>>j;
if (stopGame(j))
{
cout<<endl<<"------------ The Game is Over ------------ "<<endl<<endl;break;
}
while(1)//判断输入位置是否有棋子
{
if(c[i][j]=='x'||c[i][j]=='o')
{
cout<<"已经有棋子,请重新"<<endl;
}
else
if(!check(i,j))
{
cout<<"输入的棋子不合法,请重新输入"<<endl;
}
else
break;
cin>>i;
cin>>j;
}
c[i][j]='x';
draw(c);
if(test(c,'x'))//判断是否获胜(A)
{
char replay;
cout<<"A方胜利!是否再来一局?Y/N:";
cin>>replay;
if (replay=='Y'||replay=='y')
{
_tmain(argc,argv);
} else
{
break;
}
}
x+=2;
}
else
{
cout<<"请B方走(99为退出):"<<endl<<"横坐标(1--20):";
cin>>i;
if(stopGame(i))
{
cout<<" game end!"<<endl;break;
}
cout<<"纵坐标(1--20):";
cin>>j;
if (stopGame(j))
{
cout<<endl<<"------------ The Game is Over ------------ "<<endl<<endl;break;
}
while(1)//判断输入位置是否有棋子
{
if(c[i][j]=='x'||c[i][j]=='o')
{
cout<<"已经有棋子,请重新"<<endl;
}
else
if(!check(i,j))
{
cout<<"输入的棋子不合法,请重新输入"<<endl;
}
else
break;
cin>>i;
cin>>j;
}
c[i][j]='o';
draw(c);
if(test(c,'o'))//判断是否获胜(A)
{
char replay;
cout<<"B方胜利!是否再来一局?Y/N:";
cin>>replay;
if (replay=='Y'||replay=='y')
{
_tmain(argc,argv);
} else
{
break;
}
}
x+=2;
}

}
return 0;
}

tanwenhai123 2012-03-23
  • 打赏
  • 举报
回复
新手????。。。。。。。。。努力学习啊
  • 打赏
  • 举报
回复
我也想编一个游戏啊!
暗夜微凉 2012-03-04
  • 打赏
  • 举报
回复
刚刚进来学习,只能看懂一点点.
xiangle111 2012-02-24
  • 打赏
  • 举报
回复
呵呵,有意思。你要是开发出六子棋,我给你写本书
haze_child 2012-02-23
  • 打赏
  • 举报
回复
学习++
liujun_ips 2012-01-10
  • 打赏
  • 举报
回复
所有人帖的代码只能输入数字?一个字母就崩了?
yuliguo123 2011-11-28
  • 打赏
  • 举报
回复
学习 很好的帖子
xuyapeng1991 2011-11-21
  • 打赏
  • 举报
回复
都是高手呀。。
xiaoou33 2011-11-02
  • 打赏
  • 举报
回复
学习!
li3208 2011-08-19
  • 打赏
  • 举报
回复
mark
CeeLv_Atom_HU 2011-08-15
  • 打赏
  • 举报
回复
顶一个~~~~~~~~~
meteorwg 2011-08-12
  • 打赏
  • 举报
回复
}
flag[i][j]='X';//指定位置放上棋子
system("cls"); draw(flag);
if(test(flag,'X'))//判断是否获胜(A)
{



}
flag[i][j]='O';
system("cls"); draw(flag);
if(test(flag,'O'))//判断是否获胜(B)
{


给点建议:在上面两处加上红色的代码 这样更好看一些。
jingavin0 2011-08-05
  • 打赏
  • 举报
回复
而且楼主没考虑如果5个子不是连续的情况下不算胜利,还有超过5个怎么办,至少也要判断下啊,而且每次落字不能单单判断落字的地方是否有问题,也要判断周围的情况
jingavin0 2011-08-05
  • 打赏
  • 举报
回复
就不明白了,为什么C++语言不用类来写,而用C来写
加载更多回复(174)
【为什么还需要学习C++?】 你是否接触很多语言,但从来没有了解过编程语言的本质?你是否想成为一名资深开发人员,想开发别人做不了的高性能程序?你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹? 那么C++就是你个人能力提升,职业之路进阶的不二之选。【课程特色】 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准库全部知识体系。2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。【学完后我将达到什么水平?】 1.对C++的各个知识能够熟练配置、开发、部署;2.吊打一切关于C++的笔试面试题;3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。【面向人群】 1.希望一站式快速入门的C++初学者; 2.希望快速学习 C++、掌握编程要义、修炼内功的开发者; 3.有志于挑战更高级的开发项目,成为资深开发的工程师。 【课程设计】 本课程包含3大模块基础篇本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。进阶篇本篇主要讲解编程中常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。提升篇:本篇可以帮助学员更加高效的进行c++开发,其中包含类型转换、文件操作、异常处理、代码重用等内容。

64,687

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧