【面向对象】小游戏“终结者”程序的设计与实现

本文作者回顾了在软件学院学习面向对象程序设计的经历,以C++为工具,与队友共同完成了一款名为'YingMu'的小游戏。文章介绍了游戏的功能需求、类图设计、关键类如Player、Enemy、Bullet和GameController的实现,并分享了项目过程中遇到的挑战和收获。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/details/7747205


面向对象程序设计

这是我们学习程序设计的第一课。我也在这门课上第一次接触程语言、写代码。我们以影印版的《C++ Program Design : An Introduction to Programming and Object-Oriented Design 》为教材。


现在想来那段“入门”的经历真是痛苦不堪,很多概念难以理解,就只能一点点把书中的代码一遍遍的敲。但每次跑出一点小东西也都觉着兴奋到不行。大一末的时候有个“大”的课程设计:两人一组编写一个小游戏。我和小琦一组,写了一个比较简略的闯关游戏,这次经历之后才真的对编程有了“入门”的感觉。


小游戏"YingMu"


【游戏功能需求说明】

本游戏是基于日本漫画《灌篮高手》而设计的,相信大家对游戏中的人物都相当熟悉。在游戏中我们采用了键盘上、下、左、右控制玩家的移动,空格键发射子弹。如果玩家碰到敌人,则游戏结束;消灭所有敌人,则通关。游戏共分为两关,每一关的地图是随机产生的,敌人的移动速度也逐渐加快。虽然功能看似简单,但其中乐趣无穷,是一款集娱乐、冒险为一体的游戏。
我们这次是在Microsoft Visual C++ 6.0,  EzWindow library的开发环境下设计完成的,一些程序的功能我们一时没有想到好的方法来实现,所以在这款游戏中没有呈现给大家。相信在以后的学习中,我们能更好地掌握并对这款小游戏进行升级更新。

【游戏总类图】




【游戏中的关键类】

Player

enum Floor{FLoor1=0,Floor2,Floor3,Floor4};

class Player {
	public:
		//constructor
		Player(SimpleWindow &w);
	public:
    	//inspectors
	    SimpleWindow& GetWindow() const;//得到玩家所在窗口
		Position GetPosition() const;  //得到玩家当前位置
		Direction GetDirection() const;  //得到玩家当前的方向
		BitMap& GetBmp(const Direction &d,int i); //得到玩家在相应的方向及步子上位图
		const BitMap& GetBmp(const Direction &d,int i) const; 
		Floor GetFloor()const;  //得到玩家当前所在层数
		bool IsDying();   //检查玩家是否死掉
		bool AtRightEdge() const;    //检查玩家是否走到窗口边缘
		bool AtLeftEdge() const;

	    //Facilitators
		void Create();  //创建玩家(即将玩家“放”在游戏窗口中)
		void Kill();    //“杀死”玩家(从窗口中擦掉)
		void Move();    //使玩家在键盘操控下做相应的移动
		void Fire();    //发射子弹
		void OKUp();    //设置玩家是否可以在层之间跳跃
		void OKDown();
		void CannotUpDown();

        //mutators
		void SetPosition(const Position &p); //设置玩家当前所有位图的位置 
		void SetFloor(Floor &f);  //玩家跳跃之后改变层的数据成员
		void SetDirection(const Direction &d); //设置玩家当前的方向
	
		//data member 
		vector<Bullet*> bullets;   /****************************************/
			                       //方便GameController中检查子弹和敌人     //
		                           //状况,所以放在public域中,设置为可见   //
                                   /****************************************/
	private:
		//facilities
		void Draw();
		void Erase();  /****************************************************/
		               //用户不直接操纵图片,而是通过调用 Creat() 和 Kill() //
                       //所以定义为 private                                 //
		               /*****************************************************/
		// Data members
		SimpleWindow &Window;
		vector<vector<BitMap> > Bmp; 
		Direction CurrentDirection;
		Position CurrentPosition;
		bool bUpOk;
		bool bDownOk;
		Floor CurrentFloor;//当前所处的层                    
评论 79
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值