您的当前位置:首页正文

软件设计之简单游戏制作报告

2022-08-03 来源:欧得旅游网


实 验 报 告

实验课程:软件工程

评定成绩 指导教师 实验名称:实验二: 游戏软件面向对象分析与设计 学号: 姓名: 班级: 完成日期: 年 月 日

一、 实验目的

(1) 通过(游戏)软件的分析、设计与实现过程,掌握软件构建中的面向对象思想。

(2) 掌握面向对象的分析、设计工具。

二、 需求分析

基本要求

1)单词管理:程序中用来做谜题的但崔必须放在一个数据库文件或一个磁盘文档 文件中保存。

2)猜字过程:先给用户显示猜字的数量,按照被猜单词的字母数量而定。单词都 是随机抽取的。假设谜底单词为“hello”,则在屏幕上输出(显示)“-----”。玩家输入一个(多个)字母进行猜测。如果这个字母不在单词中,系统提示玩家不对;如果猜对字母,比如玩家输入一个“l”,则屏幕上输出(显示)“- - ll -”。猜错的同时一个人模型在吊绳上一步一部的显示出来。最终画出完整的人模型位置,并提示游戏闯关失败。

设计要求

任选一个面向对象程序设计语言最充分的体现面向对象程序设计的思想。要明确指出面向对象程序设计中的类,方法以及属性的关系,作用。充分利用软件工程所学的工程思想,分别画出程序运行过程的UML图,最完整的展现科学的工程项目的设计全过程。

设计开发工具任选。最好设计成可视化用户界面。让玩家感受到玩游戏的体验。

三、 游戏软件描述(简述或用游戏界面图描述)

游戏简介

Hangman直译为“上吊的人”,是一个猜单词的双人游戏。由一个玩家想出一个单词或短语,另一个玩家猜该单词或短语中的每一个字母 [1] 。第一个人抽走单词或短语,只留下相应数量的空白与下划线。

想字的玩家一般会画一个绞刑架,当猜字的玩家猜出了短语中存在的一个字母时,想字的玩家就将这个字母存在的所有位置都填上。如果玩家猜的字母不在单词或短语中,那么想字的玩家就给绞刑架上小人添上一笔,直到7笔过后,游戏结束。

游戏软件描述

本次游戏设计我选择使用了Visual Studio 2017的C#语言类别中的WindowsFormAPP窗体应用。WinForm是·Net开发平台中对Windows Form的一种称谓。Windows窗体可用于设计窗体和可视控件,以创建丰富的基于Windows的应用程序。操作方便,新的数据提供程序管理:数据提供程序管理提供易于连接OLEDB和ODBC数据源的数据控件,包括Microsoft SQL Server、Microsoft Access、Jet、DB2以及Oracle等。刚开始想法也就是利用Win Form的方便的数据库功能,即把Hangman的单词短语以及对应的提醒语句放在数据库中一条一条的显示给玩家。还有一个原因是设计这个游戏之前VS的Windows窗体应用有所接触和了解。所以这次还是选择了该软件作为工具软件。

设计简介

第一步,游戏界面提供“Start Game”按钮,系统获取到随机单词,玩家输入自己的猜测结果,通过按“Enter”按钮完成输入。每次提示输入猜测结果时,给出猜测的准确度提示。 准确的猜测结果替换屏幕中的下划线,错误时在下方显示错误的字母并进行同步拼图。猜测完毕赢得游戏或者机会用完失败,均可以继续游戏,按“Restart”按钮,也可进入下一题。

第二步,猜短语,刚开始游戏时可以选择屏幕左边的单选按钮进行选择猜短语模式。

第三步,猜单词和短语混合,所猜内容皆不相同,弹出消息对话框,显示的可能是单词,可能是短语。如果游戏结果不理想,玩家还可以切换模式降低难度再次通关,可以继续游戏。。重复之前的步骤即可。

图1—传统的Hangman游戏的运行逻辑图

游戏界面描述

设计界面效果图:

Hangman游戏设计用到的组件如下:

Windows Form(窗体) ---3个:它可以分成基础选择和容器类控件组、日期与图片控件组、日期与微调控件组和软件系统框架类控件组。

Button(按钮) ---4个:当激活它时,能执行指定的功能。用户可以采用以下方法来激活按钮:用鼠标在其上单击,或者当按钮获得聚焦时按下“Return”或“Enter”键。

Panel(功能细分窗体) ---4个:控件用于为其他控件提供可识别的分组。

Label(标签) ---6个:功能是定义变量或标号的类型以及名称,而变量或标号的段属性和偏移属性由该语句所处的位置确定。

Checkbox(复选框) ---1个:让使用者与首页上的素材发生交互作用的一种方法。其中包含CheckBox控件就是我们一般所说的复选框,通常用于某选项的打开或关闭。

Groupbox(分组框) ---1个:作用是为其他控件提供可识别的分组

Textbox(文本框) ---1个:应用程序主要使用它来接收使用者于输入文字信息。 RadioButton(单选按钮) ---3个:为用户提供由两个或多个互斥选项组成的选项集。虽然单选按钮和复选框看似功能类似,却存在重要差异:当用户选择某单选按钮时,同一组中的其他单选按钮不能同时选定。相反,却可以选择任意数目的复选框。定义单选按钮组将告诉用户:“这里有一组选项,您可以从中选择一个且只能选择一个。

Picturebox(图形框) ---1个:可以显示来自位图、图标或者元文件,以及来自增强的元文件、JPEG 或 GIF 文件的图形。如果控件不足以显示整幅图象,则裁剪图象以适应控件的大小。

图2—Hangman游戏设计界面效果

每个组件有多条属性,在这个游戏中设计中主要用的不是全部。Panel控件一律不对用户可见的。最明显的是“Start Game”按钮和“Restart”按钮的对比。开始游戏时“Restart”按钮设为不可见,用户只能看见“Start Game”按钮。当“Start Game”按钮按下去以后“Start Game”的Visible属性改为False,对用户不可见,这时“Restart”按钮变得可见,玩家成功过关了还是吊死了都可以按这个按钮继续游戏。

三个RadioButton(单选按钮)按钮标为可见,用户可以选择其中一个来进行不同难度的游戏。当然textbox按钮是比较重要的,用它类接受用户的输入并判断玩家猜字的准确度。Picturebox框的作用也是比较重要的,它最直观的表达玩家的猜字准确率。设计这部分用到了6张图片,每次换一张图显示给用户的效果是图片上在进行画画。从头到左脚的顺序显示玩家猜字的准确度。

游戏运行效果图:

图3—游戏运行界面效果图

按Start Game按钮以后立马显示的Restart按钮和要猜的单词或短语的字母个数相等的下划线标志。玩家第一反应是数清下划线的个数并开始猜字。用户可以选择单个字母的输入和多个字母的一次性输入操作。输入正确和输入错误的字母分别显示在屏幕去上。跟着错误单词的递增机会数越来越少。机会次数的变更和图片的更换是同步的,即机会次数减少一个,图片上的被吊人的肢体多一个。机会次数减到0的时候显示游戏失败并且被吊的是一个完整的人模型。用户可以重新开始游戏或推出游戏。

单词和短语编辑界面

下面是单词和短语编辑界面的效果图:

图中有一个按钮用来编辑完的单词和短语的保存操作。当保存成功时会把保存成功 的标签不可见变为可见。表示用户编辑单词和短语编辑完成并保存成功。用户还可以自己添加单词或短语。我的设计方法是这个还可以用来英语单词或短语的学习软件。当你学习英语的时候先把单词或短语打进去。过了一段时间以后以复习的形式玩这个游戏,以便加强复习和简单娱乐效果。

图4—Hangman单词和短语编辑界面

四、 构建软件分析模型

(1) 用例分析(基于场景的元素)

开始猜字游戏和进行游戏过程,调用系统内部以随机给出的单词或短语, 提示用户输入猜字, 每次再输入完整后自动给出正误显示结果。 在 6 次之内未猜出者提示失败,如果成功,进行提示。

图5—Hangman游戏用例图

(2) 类及类关联分析(基于类的元素)

类图:

下面是Hangman猜单词游戏设计的类图。其中包含三个类,19个方法和13个属性。两个类主要用来游戏主界面的显示运行和编辑界面的相关操作。剩余的一个类,方法和属性协助两个主类完成整个游戏阶段的逻辑判断和显示过程。它们之间的关系和包含关系如下类图所示。

图6—Hangman游戏类图

(3) 行为模型(基于行为的元素,顺序图、状态图、协作图、活动图等)

按照游戏制作过程和运行顺序画出一下顺序图:

图7—猜单词游戏顺序图

顺序图中直接的表达出游戏的运行总流程。也包含对应的逻辑判断过程。从开始到结束的一套流程显示整个游戏顺序渐进的过程。

五、 软件设计模型

(1) 实现类模型(类的属性与方法精化)

类的具体实现以及方法

类的说明部分由关键字 class 与类名组成,类名的命名遵循 C#标识符的定义规则。它又是由数据成员(属性)和成员方法(方法)两部分组成。数据成员描述对象的属性;成员方法则刻画对象的行为或动作,每一个成员方法确定一个功能或操作。 从用户的角度看,C#源程序中的类分为两种:

系统定义的类:即 C#类库,它是系统定义好的类。C#语言由语法规则和类库两部分组成,语法规则确定 C#程序的书写规范;类库则提供了C#程序与运行它的系统软件之间的接口。 用户自定义类:系统定义的类虽然实现了许多常见的功能,但是用户程序仍然需要针对特定问题的特定逻辑来定义自己的类。

btnStart函数的功能 : 游戏执行的入口,在函数所在的程序头部包含可部分系统必须的头文件和完成其他功能的源文件。在该函数中还提供了游戏功能选择的选项, 提示玩家游戏可用的功能有哪些和这些功能的选项。 并给用户提供输入功能选项代码的接口, 当用户输入选项代码后, 即显示给用户相应的功能处理界面或结果。

btnClose函数的功能:

这个函数的功能最简单,调用了系统提供的Close()函数来关闭窗口,结束游戏。对代码部分的作用是全部部分还原成原始状态,为下一次启动做好准备。

txtGuess_KeyDown函数的功能:

该函数接受用户键盘输入的数据发送到字母判断的逻辑部分,逻辑部分负责判断玩家猜的字母是否与当次要猜的字母。在本游戏中起到桥梁作用。具体的逻辑简单。在判断玩家打进去的字母的判断的同时还要把对应的状态发送到拼图模块和显示模块。

Make Puzzle函数的功能:

该函数的主要功能是在用户界面最客观的显示用户猜字准确率。通过快速的换图片的形式给用户界面显示画人模型的效果。按照上面的函数的结果和其他模块的结果作为输入并完成显示效果。

属性

有的组件有它独有的属性,下面时两个属性的可见性属性的初始化操作

pnlGuess.Visible = true;//输入框变可见 btnStart.Visible = false;//开始按钮不可见

组件的相对布置和显示有关的属性配置初始化操作

txtGuess.Width = 100;//输入框宽度

txtGuess.MaxLength = 50;//输入框输入字符串长度

主要的数据结构

重要的数据结构形式就是如下的公有成员变量定义,后边的get,set是默认的方法的简写。{set;get;}是属性修饰符,也是C#2.0提供的语法结构。作为共享的属性。分别定义了拥有类型,数据类型以及属性和方法。其中数据类型包含整型(int),字符型(string)和布尔类型(bool)。在面向对象语言中(C++,java,C#等)get和set是对象属性特有的两个方法,属性是对字段的封装,是为了程序数据的安全性考虑的。

简单来说,字段有两种操作权限,就是获取和修改,就分别对应的是get和set方法了,可以通过制定get和set方法来限定字段的访问权限。 在C#中,有个称呼叫做访问器。 get 访问器

get 访问器体与方法体相似。它必须返回属性类型的值。执行 get 访问器相当于读取字段的值。

set 访问器

set 访问器与返回 void 的方法类似。它使用称为 value 的隐式参数,此参数的类型是属性的类型。也就说你声明什么类型,就要传递什么类型的参数。

private int WordId { get; set; }//定义公有成员变量,用于字数组的索引

private int Chances { get; set; } = 6;//定义公有成员变量,用于赋值初始机会次数 private bool AllowMultiLine { get; set; } // 确定是否可以输入多个字母 private string GuessDisplay { get; set; } // 保留屏幕上显示的下划线字符串 private string CorrectLettersGuessed { get; set; } // 正确字母列表 private string WrongLettersGuessed { get; set; } // 错误字母列表 private string PuzzleChoice { get; set; } // 选择拼图的字符串

下面两个共有成员变量时。返回一个字符串数组,包含当前的 string 对象中的子字符串,子字符串是使用指定的 Unicode 字符数组中的元素进行存放的。

private string[] Words { get; set; } // 保留单词列表 private string[] Phrases { get; set; } // 保留短语列表

六、 实验总结

通过猜单词游戏课程设计了解其典型功能: 即系统产生不重复的随机数字、 提供给玩家 6次猜测机会、 提供给玩家每次猜单词后的正确字母和位置, 让玩家根据这些信息继续下一次的猜测。 简单的设计蕴涵了多种功能, 简单而又全面。实验过程中, 通过查询

各资料基本掌握单词游戏功能的实现步骤, 并且熟练了解流程图设计与编画过程。 能够次实验的设计成功完字符列表类型成游戏, 准确猜出所须的单词或短语。感觉对所学的知识有更进一步的了解。

此程序虽然比较复杂,但程式化的东西很多。我们发现,格式化的东西让我们清楚地认识到了程序的结构,也给了我们清晰的思路。在结尾的部分的处理让我们增加了对各事件相应结果的分析,增加了思维的缜密性,有助于让我们体会到一个程序员所需要考虑的问题。获益匪浅。遇到不懂得东西,我还去图书馆进行资料的查阅。这个过程让我收获了很多,我的动手实践能力得到了加强。同时我也被C#语言的魅力所深深吸引,真切地感到C#语言在日常生活中应用的广泛。在做这次程序过程中,我对一些基础知识有了更加深入的理解,对编程的兴趣有了提高。同时复习了全国计算机二级考试内容,还让我对前一学年的C#语言课程内容有了回顾和全新的体会。

将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度得到了提升。 通过课程设计,我在下述各方面的能力应该得到锻炼:

1)进一步巩固、加深所学专业软件VS2017的基本操作技能, 理论联系实际,进一步培养我们综合分析问题,解决问题的能力。

2)全面考核我所掌握的基本理论知识及其实际操作能力,从而达到提高自身编程素质的目的。

3)利用所学知识,开发小型应用游戏(我觉得可以用来学英语),掌握运用C#语言编写调试应用系统程序,进行数据处理的综合能力。

4)学会了对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。 5)掌握面向对象程序设计的方法。这一点我觉得收获最大的。因为刚开始老师也要求必须要求使用面向对象的设计思想。对这一方面的锻炼让我收获最多。

6)刚开始尝试用连接数据库并把数据库的知识点应用到游戏当中去。但是通过尝试发现这样加大了我的设计难度,并且对自己选择的程序设计语言不是特别熟练导致无法通过数据库操作实现预期的效果。不过对这方面的操作技能有了很明显的提升。希望下次的设计当中进一步加强训练。

因篇幅问题不能全部显示,请点此查看更多更全内容