面向对象的编程技术课程设计.doc_第1页
面向对象的编程技术课程设计.doc_第2页
面向对象的编程技术课程设计.doc_第3页
面向对象的编程技术课程设计.doc_第4页
面向对象的编程技术课程设计.doc_第5页
免费预览已结束,剩余31页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象的编程技术课程设计 教学大纲一 课程简介课程编号: 09464059课程名称:面向对象的编程技术课程设计Course Designf Object-Oriented Programming Technology课程类型:实践环节(必修)学 时:1周(实验16学时) 学 分:1开课学期:6开课对象:计算机科学与技术专业先修课程:C语言、面向对象编程技术、数据结构等二 实验目的面向对象的编程技术课程设计是一门独立开设的实验课程,旨在进一步强化学生对类、封装、继承、多态等面向对象基本概念的理解和OOP(面向对象编程)实际动手能力,并进一步拓展到OOD(面向对象设计)原则、技巧和初步的OOA(面向对象分析)方法。为此设计了3个可选方向:(1)C+模式设计,侧重理解编程中一些基本的模式设计,如Singleton、Factory模式,掌握一定的编程规范和程序设计技巧。(2)C+电脑游戏开发:侧重利用面向对象的拟人化思想解决复杂问题和OOD技巧。(3)VC+ MFC程序开发:侧重OOA方法和可视化软件开发。通过本实验,使学生了解C+的有关面向对象的语法及思想,掌握VC或C+BUILDER等开发工具的可视化程序设计方法,全面提高学生面向对象程序的综合设计能力。具体掌握的基本能力有以下几方面:1 掌握基本面向对象C+程序设计方法,熟悉C+程序设计的步骤;2 通过进行可视化程序设计,进一步熟悉可视化C+开发工具的使用和开发,提高动手能力,提高分析问题和解决问题的能力;三 实验内容及学时安排序号实 验 名 称实 验 内 容学时数实验属性要求方向1C+模式设计Singleton、Factory等经典模式编程与应用。16设计必做方向2C+电脑游戏开发模拟敌我各种坦克、各种炮弹的运动,模拟地形和各种障碍物,设计上述对象之间的交互16设计必做方向3VC+ MFC程序开发分析并设计一个小型的MIS应用,制作具有可视化界面的程序16设计必做合 计16学时四 实验要求1基本掌握设计课题的基本步骤和方法;2掌握可视化开发开具的使用;3根据课题的要求进行上机实验调试;4掌握面向对象编程的基本思路和方法。五 教材及参考文献 1C+语言程序设计(第3版),郑莉,清华大学出版社,2003-122C+编程思想(第3版) 候捷,机械工业出版社哈 2002-93Design Pattern Explanation with C+ Implementation K_Eckel 2005-44PC游戏编程(窥门篇),谭文洪,重庆大学出版社,2002-053Visual C+课程设计与系统开发案例,伍俊良,清华大学出版社,2002-11六 实验环境实验要求如下环境:操作系统:Windows98,Windows XP, Windows 2000; 开发工具: Visual C+,C+Builder;七 成绩考核面向对象的编程技术课程设计实验采用课程设计实验报告和课程设计实验应用系统程序综合评定成绩,其中课程设计实验报告占60%;课程设计应用系统程序占40%。课程设计提交一份综合实验报告,一份程序源代码,课程设计应用系统程序采取上机检验的方式确定分数。八 课程设计实验报告的基本格式课程设计实验报报告的基本内容至少包括封面、正文、附录三部分。1封面封面包括“面向对象的编程技术课程设计实验报告”、班级、姓名、设计时间等信息。2正文(1)应用程序的名称;(2)应用程序的主题、设计目的;(3)应用程序简介:设计目的、功能介绍、基本内容、主要技术、运行环境等;(4)应用程序的总体设计结构图、类层次图、主要运行界面的介绍;(5)创新和难点:阐述创新的得意之处;在开发过程中遇到的重点、难点问题及解决过程。(6)课程设计中目前存在的问题;(7)设计实践过程中的心得体会。3附录附录中至少包括:附录1: 程序的安装、使用说明。面向对象编程技术课程设计(之方向一综合编程与简单设计模式)指导书 1、课程设计的目的与意义 学会综合运用C教材中的基础理论知识,并学习专业编程中广为借鉴的一些经典的编程模式,联系具体事例,解决实际问题,达到深入领会理论,分析解决实际问题,培养一定的编程实践能力的目的。 本设计出发点是紧扣教材,灵活运用,加深对教材内容的理解和拓展学习的知识面。 注意:本课程题目主要考察学生对课本知识的综合运用能力和基本的C编程能力,不提供参考源程序。 2、课程设计基本要求 (1). 学习设计模式中创建型模式中的Factory模式和Singleton模式,总结对这两种模式的理解和认识。(参见附录1和附录2) (2). 完成具有以下功能的简单模型系统:系统中有一个唯一(Singleton)的水果生产工厂,能生产成品水果产品,如苹果(Apple)、梨子(Pear)、香蕉(Banana)、桃子(Peach)等等,生产工厂能根据用户的选择或要求(用简单文字选择界面实现)生产指定的水果并提供给客户。 (3). 阐述你自己在实现过程中遇到的问题和解决的过程。 (4). 撰写课程设计报告,总结心得体会。 3、课程设计技术要点提示: (1). 程序中建立水果生产工厂类(参考Factory模式),但保证该类只能实例化唯一的一个水果工厂(参考Singleton模式)。 (2). 建立与各种水果(苹果、香蕉、梨子等)相对应的类库结果,并设计各种水果的抽象基类(如命名为Fruit类),建立抽象水果类的使用接口,在具体的水果派生类中加以实现,并通过多态的方式在主程序中加以使用。 (3). 在主程序中建立简单文字选择界面,提供给客户使用。 4、课程设计试验报告基本格式 课程设计试验报告的基本内容包括封面、正文、目录、附录四部分。 (1). 封面:包括“面向对象编程技术课程设计试验报告”、专业、班级、学号、姓名、设计时间等基本信息。 (2). 目录:课程设计文档的文档目录。 (3). 正文包括: a) 应用程序名称。 b) 应用程序的主体、设计目的。 c) 应用程序简介:功能介绍、基本内容、主要技术、运行环境。 d) 应用程序的总体设计结构图、类层次图、主要运行界面介绍。 e) 创新与难点:阐述个人设计主要成功之处,开发中遇到的困难和解决的方法。 f) 课程设计过程的心得体会。 (4). 附录:包括源程序和简易使用说明等。 (5). 课程设计报告用计算机打印。 附录1: Factory模式 在面向对象系统设计中经常可以遇到以下的两类问题: 为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。这里很容易出现的一个问题n多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就编写诸如new ;的代码。这里带来两个问题: 1)客户程序员必须知道实际子类的名称(当系统复杂后,命名将是一个很不好处理的问题,为了处理可能的名字冲突,有的命名可能并不是具有很好的可读性和可记忆性,就姑且不论不同程序员千奇百怪的个人偏好了),2)程序的扩展性和维护变得越来越困难。 2)还有一种情况就是在父类中并不知道具体要实例化哪一个具体的子类。这里的意思为:假设我们在类A中要使用到类B,B是一个抽象父类,在A中并不知道具体要实例化那一个B的子类,但是在类A的子类D中是可以知道的。在A中我们没有办法直接使用类似于new 的语句,因为根本就不知道是什么。 以上两个问题也就引出了Factory模式的两个最重要的功能: 1)定义创建对象的接口,封装了对象的创建; 2)使得具体化类的工作延迟到了子类中。 模式选择 通常使用Factory模式来解决上面给出的两个问题。在第一个问题中,我们经常就是声明一个创建对象的接口,并封装了对象的创建过程。Factory这里类似于一个真正意义上的工厂(生产对象)。在第二个问题中,我们需要提供一个对象创建对象的接口,并在子类中提供其具体实现(因为只有在子类中可以决定到底实例化哪一个类)。 第一中情况的Factory的结构示意图为: 图1:Factory模式结构示意图1 图1所以的Factory模式经常在系统开发中用到,但是这并不是Factory模式的最大威力所在(因为这可以通过其他方式解决这个问题)。Factory模式不单是提供了创建对象的接口,其最重要的是延迟了子类的实例化(第二个问题),以下是这种情况的一个Factory的结构示意图: 图2:Factory模式结构示意图1 图2中关键中Factory模式的应用并不是只是为了封装对象的创建,而是要把对象的创建放到子类中实现:Factory中只是提供了对象创建的接口,其实现将放在Factory的子类ConcreteFactory中进行。这是图2和图1的区别所在。 实现: 完整代码示例(code): (代码采用C+实现,并在VC 6.0下测试运行通过) 代码片断1:Product.h /Product.h #ifndef _PRODUCT_H_ #define _PRODUCT_H_ class Product public: virtual Product() = 0; protected: Product(); private: ; class ConcreteProduct:public Product public: ConcreteProduct(); ConcreteProduct(); protected: private: ; #endif /_PRODUCT_H_ 代码片断2:Product.cpp /Product.cpp #include Product.h #include using namespace std; Product:Product() Product:Product() ConcreteProduct:ConcreteProduct() coutConcreteProduct.endl; ConcreteProduct:ConcreteProduct() 代码片断3:Factory.h /Factory.h #ifndef _FACTORY_H_ #define _FACTORY_H_ class Product; class Factory public: virtual Factory() = 0; virtual Product* CreateProduct() = 0; protected: Factory(); private: ; class ConcreteFactory:public Factory public: ConcreteFactory(); ConcreteFactory(); Product* CreateProduct(); protected: private: ; #endif /_FACTORY_H_ 代码片断4: Factory.cpp /Factory.cpp #include Factory.h #include Product.h #include using namespace std; Factory:Factory() Factory:Factory() ConcreteFactory:ConcreteFactory() coutConcreteFactory.endl; ConcreteFactory:ConcreteFactory() Product* ConcreteFactory:CreateProduct() return new ConcreteProduct(); 代码片断5:main.cpp /main.cpp #include Factory.h #include Product.h #include using namespace std; int main(int argc,char* argv) Factory* fac = new ConcreteFactory(); Product* p = fac-CreateProduct(); return 0; 代码说明: 示例代码中给出的是Factory模式解决父类中并不知道具体要实例化哪一个具体的子类的问题,至于为创建对象提供接口问题,可以由Factory中附加相应的创建操作例如Create*Product()即可。 Factory模式在实际开发中应用非常广泛,面向对象的系统经常面临着对象创建问题:要创建的类实在是太多了。而Factory提供的创建对象的接口封装(第一个功能),以及其将类的实例化推迟到子类(第二个功能)都部分地解决了实际问题。 采用Factory模式后系统可读性性和维护都变得elegant许多。 附录2: Singleton模式 Singleton模式解决问题十分常见,怎样去创建一个唯一的变量(对象)?在基于对象的设计中我们可以通过创建一个全局变量(对象)来实现,在面向对象和面向过程结合的设计范式(如C+中)中,我们也还是可以通过一个全局变量实现这一点。但是当我们遇到了纯粹的面向对象范式中,这一点可能就只能是通过Singleton模式来实现了,可能这也正是很多公司在招聘开发人员时候经常考察Singleton模式的缘故吧。 模式选择 Singleton模式典型的结构图为: 图2-1:Singleton Pattern结构图 在Singleton模式的结构图中可以看到,我们通过维护一个static的成员变量来记录这 个唯一的对象实例。通过提供一个staitc的接口instance来获得这个唯一的实例。 实现 完整代码示例(code,见下页) Singleton模式的实很简单,以下给出实现它的所有代码,采用C+实现,并在VC 6.0下运行通过。 代码片断1:Singleton.h /Singleton.h #ifndef _SINGLETON_H_ #define _SINGLETON_H_ #include using namespace std; class Singleton public: static Singleton* Instance(); protected: Singleton(); private: static Singleton* _instance; ; #endif /_SINGLETON_H_ 代码片断2:Singleton.cpp /Singleton.cpp #include Singleton.h #include using namespace std; Singleton* Singleton:_instance = 0; Singleton:Singleton() coutSingleton.endl; Singleton* Singleton:Instance() if (_instance = 0) _instance = new Singleton(); return _instance; 代码片断3:main.cpp /main.cpp #include Singleton.h #include using namespace std; int main(int argc,char* argv) Singleton* sgn = Singleton:Instance(); return 0; 说明: Singleton模式的实现无须补充解释,需要说明的是,Singleton不可以被实例化,因此我们将其构造函数声明为protected或者直接声明为private(对比抽象类)。 Singleton模式在开发中经常用到,且不说我们开发过程中一些变量必须是唯一的,比如说打印机的实例等等。 Singleton模式经常和Factory模式在一起使用,因为系统中工厂对象一般来说只要一个,这里的工厂对象实现就是同时是一个Singleton模式的实例,因为系统我们就只要一个工厂来创建对象就可以了。 面向对象程序设计课程设计(之方向二VC+ MFC应用)指导书1设计一:“用VC+制作一个人事管理系统”11 课程设计的目的和意义人事管理系统具有数据库应用系统的典型特征,同时系统结构与现实生活联系紧密,便于没有分析、设计经验的同学进一步扩展,应此它的开发简单而又不失一般性。本设计的目的是使同学们初步掌握VC+ MFC应用程序的结构和开发。12 课程设计要求(满分8590)(1) 完成具有以下功能的人事管理系统:人事信息的增、删、改、查和排序,并能成功演示其运行。(2) 阐述在开发过程中遇到的问题及解决过程。(3) 解决VC在开发数据库应用时“日期/时间字段”的查询和更新问题。(可以采用其他新方法)(4) 论述你对“MFC AppWizard(exe)”生成的应用程序的框架的认识、理解和开发心得。(5) 选做:同学们可根据自己的调研进一步扩充系统功能,如“万能查询”,即可以按所有字段查询。附:教学大纲中的有关要求: 成绩考核面向对象的编程技术课程设计实验采用课程设计实验报告和课程设计实验应用系统程序综合评定成绩,其中课程设计实验报告占60%;课程设计应用系统程序占40%。课程设计提交一份综合实验报告,一份程序软盘,课程设计应用系统程序采取上机检验的方式确定分数。课程设计实验报告的基本格式课程设计实验报报告的基本内容至少包括封面、正文、附录三部分。1封面封面包括“面向对象的编程技术课程设计实验报告”、班级、姓名、设计时间等信息。2正文(1)应用程序的名称;(2)应用程序的主题、设计目的;(3)应用程序简介:设计目的、功能介绍、基本内容、主要技术、运行环境等;(4)应用程序的总体设计结构图、类层次图、主要运行界面的介绍;(5)创新和难点:阐述创新的得意之处;在开发过程中遇到的重点、难点问题及解决过程。(6)课程设计中目前存在的问题;(7)设计实践过程中的心得体会。3附录附录中至少包括:附录1: 程序的安装、使用说明。2设计一:“用VC+制作一个人事管理系统”开发指导 21 数据库设计采用Access数据库:“人事管理系统.mdb”数据库中有一张“人事管理数据表”方法一:利用VC+创建数据工程VC主菜单 | 文件 | 新建 | 工程标签中的数据库工程 | 输入工程名和保存位置 ,ok|进入数据源选择对话框,选机器数据源 | new,用户数据源,下一步| 数据源类型选 Microsoft Access Driver*.mdb下一步,完成| 先create 一个库“人事管理系统.mdb”,然后输入数据源名称,ok| 回到数据工程窗体,双击弹开,Tables右键,准备在数据库中new一张“人事管理数据表”。不规范的VC+安装版无法“New Table”,所以只好把前面工作全删掉,准备采用方法二。方法二:用Office中的Access软件建库、建表、输入数据,配置ODBC数据源“人事管理数据表”结构如下:字段名称字段类型字段大小索引必须填写职工编号数字长整型有(无重复),主键是职工姓名文本20是职工性别文本2是所在部门文本30是职工年龄数字整型是工作时间日期/时间10 短日期是基本工资数字单精度是职称文本20是简历备注默认是输入数据:配数据源: 控制面板 | 管理工具| 双击数据源(ODBC)指W2K,98或xp下可能位置不同| User DSN | Add | 数据源类型选 Microsoft Access Driver*.mdb,完成| 输入数据源名称“人事管理系统”,“选择”刚创建好的mdb文件,确定22 创建人事管理应用程序框架VC+ | 文件 | 新建 | 工程标签中的MFC AppWizard(exe)向导 |输入工程名和保存位置 ,ok选“单文档”,“支持文档/视图架构”,next选不带文件支持的数据库视图,点Data Source,选中刚建好的ODBC数据源及其中的表 此时就可以finish。看一下摘要。向导已帮你生成程序框架理解此框架见参考书23 制作人事管理主窗体向导已生成主窗体:Dialog下的IDD_MY_FORM。在此对话框中加10个静态标签控件(只是用来提示其旁边的编辑框),如下表:控件ID控件类型控件标题IDC_STATIC_BT静态标签人事管理系统IDC_STATIC_ZGBH静态标签职工编号IDC_STATIC_ZGXM静态标签职工姓名IDC_STATIC_ZGXB静态标签职工性别IDC_STATIC_SZBM静态标签所在部门IDC_STATIC_ZGNL静态标签职工年龄IDC_STATIC_GZSJ静态标签工作时间IDC_STATIC_JBGZ静态标签基本工资IDC_STATIC_ZC静态标签职称IDC_STATIC_JL静态标签简历每个控件下右键 | 属性,可设置其ID和标题在对应的静态标签右边放9个编辑框控件,每个控件下右键 | 属性,可设置其ID。 控件ID控件类型绑定数据库字段IDC_EDIT_ZGBH编辑框控件职工编号IDC_EDIT_ZGXM编辑框控件职工姓名IDC_EDIT_ZGXB编辑框控件职工性别IDC_EDIT_SZBM编辑框控件所在部门IDC_EDIT_ZGNL编辑框控件职工年龄IDC_EDIT_GZSJ编辑框控件工作时间IDC_EDIT_JBGZ编辑框控件基本工资IDC_EDIT_ZC编辑框控件职称IDC_EDIT_JL编辑框控件简历为每个编辑框控件绑定数据源字段:选定一个编辑框控件,右键 | 建立类向导 | 成员变量标签 |class name列表下选CmySet(数据库的结果集)。左边是数据库字段资源,右边是在类中为其分配的成员变量,但m_column*不好记,又不能改,只好全部删掉(Delete Variable)再手工建立(Add Variable),换为好记的名字将编辑框(在CmyView视图类中)与上述变量绑定:Add Variable然后选而不是输入。你会发现惟独IDC_EDIT_GZSJ与m_gzsj(工作时间)联不上(没有m_pSet-m_gzsj可选) ,看一下m_gzsj的定义,在“人事管理系统Set.h”文件中。 用的是Ctime类,此类有些毛病(年份范围有限)以下花了很大精力解决“日期/时间字段”问题,本来可以把数据库的“工作时间”字段改为“文本”类型,这样向导就会自动对应Cstring,从而回避此问题。之所以不回避,主要目的是想通过解决此问题,让同学们了解程序的结构。,并且应该初始化为0(即NULL)(据说用SQL Server数据库就没问题,难道是与Access不匹配?),因此检查一下CmySet类的构造函数:m_gzsj=NULL;发现惟独没有对m_gzsj初始化,因此加一句m_gzsj=0;再回去看看,结果还是不能绑定(还是没有m_pSet-m_gzsj可选)。 所以还是不用Ctime类,改用COleDateTime类,改头文件:改构造函数中的初始化:再回去看看,结果可以绑定了,注意类型变为COleDateTime。再到视图类中看看影射函数DoDataExchange(),已有映射了。保存,编译出错,提示DDX_FieldText(pDX, IDC_EDIT_GZSJ, m_pSet-m_gzsj, m_pSet);中DDX_FieldText : none of the 10 overloads can convert parameter 3 from type class COleDateTime可见 COleDateTime与CString无法转换方法1:自己转 (请用此方法完成后面的“增加记录”)int dyear,dmonth,dday;dyear= m_pSet-m_gzsj.GetYear();dmonth= m_pSet-m_gzsj.GetMonth();dday= m_pSet-m_gzsj.GetDay();CString dstr;dstr.Format(“%d-%d-%d”,dyear,dmonth,dday);DDX_FieldText(pDX, IDC_EDIT_GZSJ, dstr, m_pSet);编译,运行 开始正确,但点“下一记录”,出错,考虑:DDX_FieldText(pDX, IDC_EDIT_GZSJ, dstr, m_pSet);中最后的指针已没有用处,将此句改为:DDX_Text(pDX, IDC_EDIT_GZSJ, dstr); 编译,运行,暂时正确(还未经过UPDATE验证)方法2:不用Cstring,即不用编辑框控件IDC_EDIT_GZSJ,取消其与m_gzsj的绑定,再删掉此编辑框控件;在对话框中加一个“Date Time Picker”控件,资源索引ID为IDC_DATETIMEPICKER_GZSJ,并与m_gzsj绑定。此时视图类中的影射函数DoDataExchange()增加了一句:DDX_FieldDateTimeCtrl(pDX, DATETIMEPICKER_GZSJ, m_pSet-m_gzsj, m_pSet)。 但编译报错:没有DDX_FieldDateTimeCtrl标识(应该是VC的BUG),故改为:DDX_DateTimeCtrl(pDX, DATETIMEPICKER_GZSJ, m_pSet-m_gzsj);运行也正确(还未经过UPDATE验证)2.4 为系统实现增加、删除、排序和查询功能 2.4.1增加4个按钮,ID如下表:控件ID控件类型控件标题IDC_BUTTON_ADD命令按钮增加记录IDC_BUTTON_DEL命令按钮删除记录IDC_BUTTON_SORT命令按钮排序记录IDC_BUTTON_FILTER命令按钮筛选记录2.4.2 增加新的对话框(窗体)及创建类成员在查询或过滤记录时,需要一个对话框,用于输入查询的条件,增加对话框的方法:VC主菜单,“插入”|“资源”|“对话框(Dialog)类型”| 放一个“分组框控件”,标题为“请输入过滤查询条件”| 在分组框内放一个“编辑框”控件新建对话框在工程中是不可识别的,须为其定义一个新的“类”并作一个类的声明,才可在工程中调用,对话框中“右键”| “类向导”,提示必须创建新类,创建,并命名为CDlgQuery 切到“成员变量”标签,为编辑框控件IDC_EDIT1增加成员变量m_query2.4.3编制按钮的单击响应代码回到IDD_MY_FORM对话框,(1) 双击“增加记录”按钮,完成下列代码:void CMyView:OnButtonAdd() / TODO: Add your control notification handler code herem_pSet-AddNew();m_pSet-Update();/更新记录集m_pSet-Requery();/重新提取数据m_pSet-MoveLast();/移动下一条记录UpdateData(FALSE);/更新视图(2) 双击“删除记录”按钮,完成下列代码:void CMyView:OnButtonDel() / TODO: Add your control notification handler code here m_pSet-Delete();m_pSet-MoveNext();if (m_pSet-IsEOF()m_pSet-MoveLast();if (m_pSet-IsBOF()m_pSet-SetFieldNull(NULL);UpdateData(FALSE);(3)“筛选记录”按钮的响应代码:按职工编号查询,要用到对话框IDD_DIALOG1(CDlgQuery类)来输入筛选条件,所以“人事管理系统View.cpp”中要加入“#include DlgQuery.h”。CDlgQuery Dlgquery;CString value;if (Dlgquery.DoModal()=IDOK)/“模式窗口方式打开,结束前不能操纵父窗口”value=职工编号=+Dlgquery.m_query+;m_pSet-m_strFilter=value;m_pSet-Requery();UpdateData(FALSE);(4) 双击“排序记录”按钮,完成下列代码:按职工编号排序 m_pSet-m_strSort=职工编号;m_pSet-Requery();UpdateData(FALSE);说明:对于数据库操作可以采用异常处理机制下的保护代码,如下所示:try/被保护的代码catch (CDBException* e)MessageBox(e-m_strError);/对于异常信息的处理,这里是简单输出错误的信息例:对于删除记录的代码可以这样写:trym_pSet-Delete();m_pSet-MoveNext();if (m_pSet-IsEOF()m_pSet-MoveLast();if (m_pSet-IsBOF()m_pSet-SetFieldNull(NULL);UpdateData(FALSE);catch (CDBException* e)MessageBox(e-m_strError);面向对象的编程技术课程设计(之方向3-电脑游戏制作)指导书1课程设计的目的和意义在中国,电子游戏曾一度被大家斥为“电子海洛因”。然而电子游戏在青年学生中大受欢迎却又是一个不争的事实。正如水能载舟,亦能覆舟一样,任何事物都有其两面性。与其千方百计地封堵,还不如让同学们从技术的角度来研究它,这样既可以掌握复杂系统的设计技巧,也可以破除对电子游戏的神秘感。我相信,一个人如果自己能制作游戏,如果能清楚地知道那个绚丽多彩的虚拟世界背后无非就是一些类、变量、函数的话,他就不可能再沉迷于打游戏与一堆对象、内存变量和函数较劲。同时,从技术上讲,游戏程序的开发异常复杂,能充分体现面向对象的拟人化思想和面向对象设计技巧。通过游戏程序的制作,可以帮助学生真正掌握面向对象程序设计的精髓。 2课程设计要求 附:教学大纲中的有关要求: 成绩考核面向对象的编程技术课程设计实验采用课程设计实验报告和课程设计实验应用系统程序综合评定成绩,其中课程设计实验报告占60%;课程设计应用系统程序占40%。课程设计提交一份综合实验报告,一份程序软盘,课程设计应用系统程序采取上机检验的方式确定分数。课程设计实验报告的基本格式课程设计实验报报告的基本内容至少包括封面、正文、附录三部分。1封面封面包括“面向对象的编程技术课程设计实验报告”、班级、姓名、设计时间等信息。2正文(1)应用程序的名称;(2)应用程序的主题、设计目的;(3)应用程序简介:设计目的、功能介绍、基本内容、主要技术、运行环境等;(4)应用程序的总体设计结构图、类层次图、主要运行界面的介绍;(5)创新和难点:阐述创新的得意之处;在开发过程中遇到的重点、难点问题及解决过程。(6)课程设计中目前存在的问题;(7)设计实践过程中的心得体会。3附录附录中至少包括:附录1: 程序的安装、使用说明。21 设计一:“子弹打飞机” (满分90)(1) 要求白手起家,独立完成,即不允许套用现成的案例,程序要能看出“土香气”。能成功演示,报告中还要给出主要代码(设计思想可参考设计三中的 TankWar剖析.doc(或pdf))(2) 主要功能:飞机横向飞过;炮塔不能移动,在垂直方向上发出单发炮弹(f键),判断炮弹是否击中飞机。(重 点在于模拟物体的运动,同学们不会MFC图形编程没关系,可以在控制台下采用字符方式模拟飞机等;也可以用Turbo C+ 3.0来编程,)22 设计二:“基地保卫战” (满分95)(1) 要求白手起家,独立完成,即不允许套用现成的案例,程序要能看出“土香气”。能成功演示,报告中还要给出主要代码 (设计思想可参考设计三中的 TankWar剖析.doc(或pdf))(2) 要功能:一堆敌机从天而降,炮塔可以左右移动(键)发出连发炮弹束(f键),在飞机撞上炮塔前击落它。23 设计三:“坦克大战” (满分100)(1) 参考(PC游戏编程(窥门篇)谭文洪著)中的“坦克大战”(TankWar工程),并对其进行完善、扩充,程序要能看出专业水平和商业化产品的效果。(2) 要求:修改案例中“子弹可以穿透石头墙”的错误;增加上帝模式(无敌);修改一种敌军坦克,使之威力更大(要求坦克画面采用学生自己的头像)(需要重新编译资源包;之所以“改”而不是“增”,是因为同学们无法修改地图编辑器,另一个办法是在程序运行后动态加入);回答 “坦克大战”指导书.doc(或pdf) 和 TankWar剖析.doc(或pdf)中带有蓝色.?标记的问题。3 设计一:“子弹打飞机”开发指导(1)为了突出面向对象思想,回避图形界面、音效等商业化元素带来的复杂性,建议采用同学们熟悉的控制台应用和字符界面。(2)为此给出turbo c+几个常用函数的vc+模拟程序(VC+控制台模拟函数.txt)。严重声明,其中几个函数是DOS的处理方式,标准的windows程序平并不这么用,而是有自己的处理方式。这里只是模拟,因为同学们短时间内不可能掌握windows的处理方式。目前还没有人完全正确模拟这几个函数,其中gettext函数中的(unsigned long *)b处是我瞎碰出来的,与puttext不对偶,完全没有道理,运行时也有内存泄漏。希望同学们参照VC+帮助(MSDN)中有关控制台输入输出的内容,帮我解决这个问题。void gotoxy(int x, int y) /光标移到(x,y)(DOS时代,字符方式下,屏幕宽80、高25) COORD point; / new cursor position coordinatesHANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);/ handle of console screen bufferpoint.X = x; point.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),point); void clrscr() /清屏 COORD coordScreen = 0, 0 ; DWORD cCharsWritten; CONSOLE_SCREEN_BUFFER_INFO csbi; DWORD dwConSize; HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); GetConsoleScreenBufferInfo(hConsole, &csbi); dwConSize = csbi.dwSize.X * csbi.dwSize.Y; FillConsoleOutputCharacter(hConsole,TEXT( ),dwConSize,coordScreen,&cCharsWritten); GetConsoleScreenBufferInfo(hConsole, &csbi); FillConsoleOutputAttribute(hConsole,csbi.wAttributes,dwConSize,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论