C 课程设计

发布 2022-09-30 15:31:28 阅读 6537

一、需求分析:

本次课程设计主要是做一个猜数字游戏,要求随机提供序列类型,并且可以按要求提供该序列的前n项,要求猜测第n+1项。这样的n可以作为游戏的难度,n越小,则难度越大;n越小,难度越小。本猜字游戏的难度分为3个级别:

1、简单 2、中等 3、困难。

当玩游戏者打开本游戏时会有一个对话框弹出,要求输入的你的姓名和年龄,还要从简单、中等、困难三个中选者你准备挑战的难度,然后点提交按纽进入了本猜字游戏的主程序框。本游戏会根据你选的难度,告诉你前n个数(难度越小,n越大;难度越的,n越小),然后你就可以在输入框填入你所猜的第n+1个数,在本游戏主界面的右面同时会显示你刚才登陆是输入的名字和年龄,还有你剩余的猜字和得分,游戏者每猜对一次加10分;猜错不扣分,但是你剩余的猜字次数将会减掉一次。如果你猜对第一关所有数字,恭喜你,你可以顺利进入下一关(本游戏一共关);如果你在限定的次数内没有猜对所给数字,对不起,本游戏结束,如果你还想玩此游戏,请重新登陆!

二、设计思想与过程:

关于本猜字游戏的设计,我们的设计思想是建立在对问题总体把握的基础上,按照课程设计的要求设计一个面向对象的程序。本游戏的总体构思是:先设计一个抽象基类;然后在这个基类的基础上,我们又设计一系列继承该基类的派生类;最后我们又根据用户的要求设计了猜字游戏界面(包括登陆界面和主程序界面)。

在该猜字游戏程序中我们利用随机函数来实现对不同派生类的访问,即每次玩该游戏的时候都会随机选择一个数列,通过控制程序提示玩家前n个数的多少,从而产生不同难度的数列让玩家猜,根据玩家猜的情况,我们设计了一个程序用于显示玩家猜对的次数、积分、剩余的次数。

具体设计过程如下:

1. 首先我们对该游戏应该实现什么样的功能做了全面的分析,加上我们日常对其他一些游戏的了解,我们的游戏规则设计如下:

a.运行本游戏应用程序(即首先会弹出一个对话框,要求玩家填入姓名、年龄,还要求玩家选择他准备挑战的难易程度(有简单、中等、困难三中选择),这些内容都填好以后,玩家便可点“ok”按纽登陆游戏,如果玩家不想玩本游戏可以点“cancel”按纽退出。游戏登陆界面如下:

b.登陆后,便进入了本游戏的主界面,如果你选择的难易程度是“易”,题目会显示数列的前六个数,让你猜第七个数字;如果选择的是“中”,题目会显示数列前四个数字,让你猜第五个数字;如果选择的是“难”,题目会显示数列前三个数字,让你猜第四个数字。游戏主界面的右面会显示玩家的相关信息,包括姓名、年龄、得分(初始分值为100,答对一题加10分,答错一题减10分)、难度、剩余机会(初始值为3,答对一题机会数不变,答错一题减1)。在下面输入框中输入你所猜测的下一个数,然后点“确定”,如果想退出游戏点“退出”。

游戏主界面如下:

2.该游戏程序的主要设计特点是面向对象的程序设计,也就是对类的设计。我们得首先设计出一个共享的抽象基类,因为开始时我们还不知道由该基类派生出去的派生类会有哪些共通的操作行为,所以我开始定义的基类只能算是一个抽象的概念,它不提供任何操作行为,只是为所有的派生类的提供一个共通接口,提供给以后需要增加的派生类所使用。

3.我们开始定义的基类好象只是定义了一个共通接口,其实不然,我们可以把所有派生类的共通操作定义在基类里面,这样就不用在每个派生类中定义,可以省掉很多麻烦,也可以增加程序的透明性。通过对类的继承和多态,可以省去我们很多操作。最重要的是当我们要写一个派生类程序时,我们可以不用去动以前写过的程序,让人感觉有着“一种(is-a-kind-of)”的关系。

只要在定义的派生类中包含基类程序(这个文件即可。这样我们就可以随时加入新的程序,而不用去更改先前的程序。

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

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

保密;难易程度设为:易),即在玩家不输入任何信息的情况下的默认处理。

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

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

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

三、程序概貌(实际上就是对类的描述):

本游戏的核心类如下。

3.1 游戏界面控制类。

3.1.1 cguss (

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

3.1.2 cgussdlg (

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

3.1.3 cuserinfodlg (

cuserinfodlg 是输入玩家信息的对话框。

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

3.2 玩家信息类。

cuserinfo (

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

3.3数列生成类。

i. cnumsquence (

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

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

这些类包括:

cfibonacci (

csquare (

ctriangular (

cpentagonal (

clucas (

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

3.3.2 随机生成的类。

chard (

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

3.3.3 通过模板函数来生成的类。

ctempseq (

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

3.4 异常处理类。

3.4.1 cex (

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

3.4.2 异常的派生类。

cexinput (输入异常类)

cexoverflow(exoverflow)(数组溢出异常类)

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

4.1 面向对象的设计方法。

在游戏数列生成类和异常处理类中,充分运用了面向对象的继承和虚拟多态的技术,大大简化的程序设计的难度,使得程序简明易懂,易与维护和扩展。

4.2 范型程序的设计。

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

4.3 异常处理机制。

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

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

4.4可视化的界面。

本游戏采用microsoft的mfc框架,运用多种控件来设计界面,使得游。

戏易与操作。

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

通过用面向推想的编程概念作为我们的设计游戏的主导思想,我们体会不少,不过由于时间非常的紧迫,我们也只能说说我们的一些主要体会:

在程序中我们设计了一个抽象基类cnumsquence和由这个基类派生出去的cfibonacci、cpell、csquare、ctriangular、cpentagonal、clucas,这使我们体会到了“is-a-kind-of”真正思想,也感觉到对面向对象程序设计确实抽象,这需要我们在编程实践去慢慢体会,慢慢总结。

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

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

会使我们的程序的修改和增删极为方便。

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

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

其实继承就是一个积累和发展的过程,就像文化的积累和发展一样,整个面向对象的编程过程是在向后兼容。

C 课程设计

自动走迷宫小游戏。根据课堂讲授内容,做相应的自主练习,消化课堂所讲解的内容 通过调试典型例题或习题积累调试c 程序的经验 通过完成辅导教材中的编程题,逐渐培养学生的编程能力 用计算机解决实际问题的能力。同时在设计的过程中发现自己的不足之处,对以前所学过的知识理解的更加深刻,掌握得更加牢固。迷宫生成。...

c 课程设计

哈尔滨 课程设计报告。课程 c 学号 姓名 班级 教师 1.管理系统的功能说明。课程信息管理 能够增加数据,删除数据,显示数据,修改数据,按姓名和首字母查询数据和一些基本的程序功能。2.存储数据的描述。coursenumber 课程号coursename 课程名subject 所属专业xingzhi...

C课程设计

面向对象程序设计课程设计。一 设计要求。1 课程设计以3 4人为一组,每人一个模块 2 课程设计时间为1周 在处理系统的时候,要从分析系统的需求入手,根据系统需求进行详细分析,明确系统功能,然后设计系统整体架构以及划分系统模块,按照模块分配小组中每个组员的具体任务,完成设计。二 系统设计规范。1 命...