C++课程设计报告模板 下载本文

C++课程设计报告

(NumSquence.cpp)这个文件即可。这样我们就可以随时加入新的程序,而不用去更改先前的程序。

4.在基类的基础上我又加入了一些派生类,用于产生可供用户猜测的数列,然后我们又写了产生随即数的随即函数(rand()),用于“中”,“难”这两种情况下的前N提示数的随机产生,这样就更增加了用户的猜测难度。还有因为用户输入的数据并不一定都是正确的,用户输入的数据有可能是不合法数据:比如输入数过大,数据为负等,在该输数字的地方输入字符串等,所以我们不能完全相信用户,我们得想办法解决这个问题,可以在用户输入错误的时候,给用户错误信息的提示,让用户再次输入,于是我们定义了函数(如check_string( char*p)等)来对它们进行检测,并作出相应的处理

5.玩家在开始玩本游戏时,有可能不输入名字、年龄和选择难易程度而直接点“OK”进入游戏,这很难让人想象会出现什么样的后果。于这种异常情况,我们想出了几个解决的办法,就是当玩家进入游戏主界面时,如果名字、年龄和选择难易程度这些信息为空,我们会强制为用户加入相关信息(名字设为:匿名;年龄设为:保密;难易程度设为:易),即在玩家不输入任何信息的情况下的默认处理。

6.在编写游戏的主程序时,为了完成对前面相关函数的调用和对类的访问,我们声明一个CNumSquence指针类型的数组,用来对所有派生类访问,使程序真正做到面向对象。

7.为了让玩家能够更直观的玩游戏,我们打算让程序在WINGDOWN界面下运行,于是我们就用MFC设计了登陆窗口、游戏主窗口、提示玩家是否继续玩的窗口三个界面,这样就使本游戏更加人性化,让玩家更容易玩本游戏,再加上一些规则说明,简直是太棒了。

8.到此,我们的游戏程序已经基本完成,最后我们对程序做了一下润色,

6

C++课程设计报告

对游戏界面做了一下美工,呵呵~~~!我们的游戏开发也算完成了,虽然有点累,不过还是满有成就感的!呵呵,不写了,不是因为时间紧迫,马上就有一连串的考试,我们还会把我们的游戏做得更好,好,就这样了。

三、程序概貌(实际上就是对类的描述): 本游戏的核心类如下

3.1 游戏界面控制类

3.1.1 CGuss ( Guss.cpp )

CGuss主要是控制这个游戏的加载,相当于Console 程序中的main函数。

3.1.2 CGussDlg (GussGlg.cpp)

CGussDlg 负责控制与玩家交互游戏的界面。提示各种游戏间的信息。

3.1.3 CUserInfoDlg (UserInfoDlg.cpp)

CUserInfoDlg 是输入玩家信息的对话框

3.1.4 IsMoreDlg 是询问玩家是否继续的对话框

3.2 玩家信息类

CUserInfo (UserInfo.cpp)

CUserInfo 记录玩家基本信息的类,包括玩家姓名、年龄、得分、难度等信息。

3.3数列生成类

i.

CNumSquence (NumSquence.cpp)

CNumSquence 是数列生成类的抽象基类,它提供数列生成类的基本操作借口。

3.3.2 一般数列生成类的派生类

7

C++课程设计报告

这些类包括:

CFibonacci (Fibonacci.cpp) CPell (Pell.cpp) CSquare

(Square.cpp)

CTriangular (Triangular.cpp) CPentagonal (Pentagonal.cpp) CLucas (Lucas.cpp )

这些数列都是通过固定的通式生成

3.3.2

随机生成的类

Chard (Hard.cpp)

Chard类是通过随机参数的生成类,用于游戏难度大的模式。

3.3.3

通过模板函数来生成的类 CTempSeq (TempSeq.cpp)

CTempSeq 是通过一个数列生成函数的为模板参数的模板类。通过传入模板函数我们可以任意生成数列。

四、本程序的亮点及亮点所带来的优越性:

8

3.4 异常处理类

3.4.1 CEx (Ex.cpp)

CEx是异常的抽象基类,提供异常的一般接口。

3.4.2 异常的派生类

CExInput (ExInput.cpp)(输入异常类) CExOverflow(ExOverflow)(数组溢出异常类)

C++课程设计报告

4.1 面向对象的设计方法

在游戏数列生成类和异常处理类中,充分运用了面向对象的继承和虚拟多态的技术,

大大简化的程序设计的难度,使得程序简明易懂,易与维护和扩展。

4.2 范型程序的设计

在游戏中有一种数列示通过一个模板类来生成的,这样就可以通过此类来任意生成数列,极大地提高了程序的弹性。 4.3 异常处理机制

在程序中,我们定义了一个异常类的体系,然后通过抽象的异常基类捕

获各种异常,记录下错误的操作,使程序更加的健壮。

4.4可视化的界面

本游戏采用MicroSoft的MFC框架,运用多种控件来设计界面,使

得游

五、对面向对象程序设计的体会:

通过用面向推想的编程概念作为我们的设计游戏的主导思想,我们体会不少,不过由于时间非常的紧迫,我们也只能说说我们的一些主要体会: 在程序中我们设计了一个抽象基类CNumSquence和由这个基类派生出去的CFibonacci、CPell、CSquare、CTriangular、CPentagonal、CLucas,这使我们体会到了“is-a-kind-of”真正思想,也感觉到对面向对象程序设计确实抽象,这需要我们在编程实践去慢慢体会,慢慢总结。

面向对象的编程概念的最主要的特性是:继承和多态。

关于多态,在面向对象的程序设计中它的含义是“相似”,两个对象如

9

戏易与操作。

C++课程设计报告

果具有一定的相似性但又有些区别的话,那么它们具有多态性;在C++中,我们通过基类的pointers和references,借助虚拟机制对派生类进行动态操作。用关键字virtual可使函数有了晚捆绑的灵活性(即动态绑定),virtual函数表示允许在相同家族中的类有不同的行为,这也正是多态形成的原因。virtual函数允许它与基类那个函数不同(即允许改写基类定义的函数)。会使我们的程序的修改和增删极为方便。

当然基类中函数无实质实现内容的话,也可将virtual函数赋值为0,则变为虚拟函数了,那么基类也就成了抽象基类,不能用来产生任何对象,只提供接口给派生类用,仅作为派生类的子对象来用。

关于继承,基类用以描述系统中一些对象的思想核心,派生出其他类型(派生类)用来表达了认识该核心的不同途径。在编程的过程中由于对基类的继承机制,使得一些共通的数据和操作只需写一份代码,而无须重复写多份代码,从而大大方便了编程,减少大量的工作量;还有,如果你以后想增加程序的功能,需要再加一个派生类,呵呵~这下基类就派上用场了,直接增加一个对基类继承的派生类,呵呵~,你就可以直接给老板打电话说我已经把新功能加进去了,哇~真的是很爽,太兴奋了!在使用中,我们发现:其实继承就是一个积累和发展的过程,就像文化的积累和发展一样,整个面向对象的编程过程是在向后兼容。

设计中我们采用循序渐近、逐步完善的策略,让继承与多态有充分的体现,而且融入了书中所学到的知识,算得上是理论与实践相结合吧! 六、本游戏主要程序如下:

程序源码保存在Guss文件夹中

10