五子棋 C++
2014-08-07 18:53
363 查看
下午在开源网上看到一个用c语言写的五子棋的程序,于是想着自己也写一个。一来练习练习基础,二是上次写的贪吃蛇中,类和类之间的通讯方式采用的是依赖关系,但总感觉那样做各个类之间的独立性还不是太好,正好可以拿这个试试。其实上次的贪吃蛇中可以见到观察者模式的影子,只不过通常的观察者模式中有多个观察者,而那里只有一个观察者。五子棋的结果表明,类与类之间采取组合的方式更有效(至少在这里是这样的)。
五子棋编程中的重点是如何去判断四个方向上五子是否连成线。这里的思想是,以玩家当前放下的棋子为中心点,依次从四个方向上去判断。对于其中某个方向,比如水平方向,假设玩家放下的棋子的坐标为(x,y),则判断方法为:从点(x,y-4)开始,一直到点(x,y),看这五个点是否连成线,否则判断从点(x,y-3)一直到点(x,y+1)是否连成线,以此类推,如果从(x,y-4)到(x,y+4)这九个点中都没有连续的五个点连成线,说明水平方向上找不到五点成线。其他三个方向也可以按这种方式去判断。当然这里实现了对错误输入的处理。源代码见这里。
补充一个从键盘上获取特定类型的数据方法:
int a,b;
cin>>a>>b;
while(cin.fail())
{
cout<<"input error"<<endl;
cin.clear(); //清除fail状态
cin.sync(); //清除缓冲区
cin>>a>>b;
}
五子棋编程中的重点是如何去判断四个方向上五子是否连成线。这里的思想是,以玩家当前放下的棋子为中心点,依次从四个方向上去判断。对于其中某个方向,比如水平方向,假设玩家放下的棋子的坐标为(x,y),则判断方法为:从点(x,y-4)开始,一直到点(x,y),看这五个点是否连成线,否则判断从点(x,y-3)一直到点(x,y+1)是否连成线,以此类推,如果从(x,y-4)到(x,y+4)这九个点中都没有连续的五个点连成线,说明水平方向上找不到五点成线。其他三个方向也可以按这种方式去判断。当然这里实现了对错误输入的处理。源代码见这里。
补充一个从键盘上获取特定类型的数据方法:
int a,b;
cin>>a>>b;
while(cin.fail())
{
cout<<"input error"<<endl;
cin.clear(); //清除fail状态
cin.sync(); //清除缓冲区
cin>>a>>b;
}
相关文章推荐
- (转)C++五子棋程序
- 五子棋1.0版,c++初学
- c++网络多人五子棋
- C++ FAQ Lite[8]--引用(更新)
- 开发工具大比拚之Visual C++ vs. Delphi(三)
- 开发工具大比拚之Visual C++ vs. Delphi(二)
- 开发工具大比拚之Visual C++ vs. Delphi(一)
- Byte杂志C++调查报告
- 对今年内将出版的几本C++书的简评
- VC不是梦想,C++需要自由的心
- C++之父B. Stroustrup近期言论
- 用纯粹的C++编写COM组件
- 在Delphi与C++之间实现函数与对象共享
- C/C++的思索 C++之父访谈录 [上帝的玩笑吗?]
- 突破C++的虚拟指针--C++程序的缓冲区溢出攻击
- C++: BIG5到GB
- C++ FAQ Lite[13]--算符重载(新)
- C++ FAQ Lite[7]--类和对象(更新)
- C++ FAQ Lite[17]--异常和错误处理(更新)
- C++ FAQ Lite[9]--内联函数(更新)