主题:C++之棋类游戏从0开始
C++的陷阱感觉比C还多,做一些项目的话,估计能有一些收获。如果你有兴趣的话,不防让思维跟随本文做一次有氧运动,没准某一时刻你的编程思路又开启了一道新的门路。
一、棋类游戏基本分析过程。
打开百度,你可以输入中国象棋,国际象棋,军棋来查找图片,将这三张图片下载回来,放在一起,我们观察一下这三种棋有什么共同点?如果你不能得到如下一种观点,说明你的观察力欠佳,对着这三张图再仔细捉摸一下。这三种棋都有一个共同点,就是由棋盘和棋子组成,对了,还有一个问题:那么棋子放在哪里?棋子在棋盘上是有坐标的,所以有一个隐藏的共同点就是坐标,我们将这三点放在一起再看:这类棋类游戏的共同点就是由棋盘、棋子和坐标组成的。再扩展一下思路,下棋,当然要有下棋的人喽,这类游戏都是二人对下游戏,而且我们可以用一个计时器来计算下棋的时间,这一下是不是又多出了二个概念呢?Player--玩家和Timer--时间。OK,这就是面象对象编程的初步,数据抽象。本示例中我们将同时支持这三种游戏,呵呵,是不是兴奋了?
二、用类来表示概念。http://www.zhonghuabz168.com
http://www.shandongbz168.com
和C语言有些类似,C语言一般用struct结构来表示一种类型的概念,C++中用class类来表示概念,最后我们将会给出整个程序的UML图,这里我们以实现中国象棋为例,可以先创建三个头文件和三个CPP文件:ClsChessBase.h,ClsChessPoint.h,ClsChinaBoard.h,和它们对应的CPP实现文件。
同时为了使我们的游戏程序代码便于管理,我们使用C++的特性:名字空间(namespace)来进行管理,采用名字空间可以避免全局命名污染问题,同时可以跨文件使用,在不同的头文件中使用namespace就象在一个文件中一样。这里我们为游戏取一个namespace ChessGame{ },所有的类和相关的代码将放在这个域里。
三、代码风格问题:http://www.zhengzhoubz168.com
http://www.chongqingbz168.com
类的首字母必须大写,私有成员必须以private显式标出,成员函数可以按自己熟悉的风格命名,不做强制要求。偶习惯使用下划线函数命名方式。尽量不使用#define语句,请使用const,enum,inline来替换,使用STL标准库,不能用using namespace std;这样的语句,在程序中统一使用如std::cout,std::string这样的标准命名方式。绝不使用全局变量,用static类成员变量代替。因为程序中某些代码需要你自己写(当然最后会给出完整的代码),所以你必须遵守本代码风格提出的要求。http://www.zhongxing999.com
http://www.zhongxingbz168.com
http://www.chengdubanzheng99.com
记住,只有你亲自动手写代码,你才会从中获取知识,最好的方式就是看完本文后,关了本文,自己打代码。
四、继承与(IS-A)-- 分析棋子类。
一、棋类游戏基本分析过程。
打开百度,你可以输入中国象棋,国际象棋,军棋来查找图片,将这三张图片下载回来,放在一起,我们观察一下这三种棋有什么共同点?如果你不能得到如下一种观点,说明你的观察力欠佳,对着这三张图再仔细捉摸一下。这三种棋都有一个共同点,就是由棋盘和棋子组成,对了,还有一个问题:那么棋子放在哪里?棋子在棋盘上是有坐标的,所以有一个隐藏的共同点就是坐标,我们将这三点放在一起再看:这类棋类游戏的共同点就是由棋盘、棋子和坐标组成的。再扩展一下思路,下棋,当然要有下棋的人喽,这类游戏都是二人对下游戏,而且我们可以用一个计时器来计算下棋的时间,这一下是不是又多出了二个概念呢?Player--玩家和Timer--时间。OK,这就是面象对象编程的初步,数据抽象。本示例中我们将同时支持这三种游戏,呵呵,是不是兴奋了?
二、用类来表示概念。http://www.zhonghuabz168.com
http://www.shandongbz168.com
和C语言有些类似,C语言一般用struct结构来表示一种类型的概念,C++中用class类来表示概念,最后我们将会给出整个程序的UML图,这里我们以实现中国象棋为例,可以先创建三个头文件和三个CPP文件:ClsChessBase.h,ClsChessPoint.h,ClsChinaBoard.h,和它们对应的CPP实现文件。
同时为了使我们的游戏程序代码便于管理,我们使用C++的特性:名字空间(namespace)来进行管理,采用名字空间可以避免全局命名污染问题,同时可以跨文件使用,在不同的头文件中使用namespace就象在一个文件中一样。这里我们为游戏取一个namespace ChessGame{ },所有的类和相关的代码将放在这个域里。
三、代码风格问题:http://www.zhengzhoubz168.com
http://www.chongqingbz168.com
类的首字母必须大写,私有成员必须以private显式标出,成员函数可以按自己熟悉的风格命名,不做强制要求。偶习惯使用下划线函数命名方式。尽量不使用#define语句,请使用const,enum,inline来替换,使用STL标准库,不能用using namespace std;这样的语句,在程序中统一使用如std::cout,std::string这样的标准命名方式。绝不使用全局变量,用static类成员变量代替。因为程序中某些代码需要你自己写(当然最后会给出完整的代码),所以你必须遵守本代码风格提出的要求。http://www.zhongxing999.com
http://www.zhongxingbz168.com
http://www.chengdubanzheng99.com
记住,只有你亲自动手写代码,你才会从中获取知识,最好的方式就是看完本文后,关了本文,自己打代码。
四、继承与(IS-A)-- 分析棋子类。