计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx

上传人:b****1 文档编号:10687765 上传时间:2023-05-27 格式:DOCX 页数:34 大小:201.46KB
下载 相关 举报
计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx_第1页
第1页 / 共34页
计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx_第2页
第2页 / 共34页
计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx_第3页
第3页 / 共34页
计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx_第4页
第4页 / 共34页
计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx_第5页
第5页 / 共34页
计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx_第6页
第6页 / 共34页
计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx_第7页
第7页 / 共34页
计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx_第8页
第8页 / 共34页
计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx_第9页
第9页 / 共34页
计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx_第10页
第10页 / 共34页
计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx_第11页
第11页 / 共34页
计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx_第12页
第12页 / 共34页
计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx_第13页
第13页 / 共34页
计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx_第14页
第14页 / 共34页
计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx_第15页
第15页 / 共34页
计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx_第16页
第16页 / 共34页
计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx_第17页
第17页 / 共34页
计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx_第18页
第18页 / 共34页
计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx_第19页
第19页 / 共34页
计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx

《计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx》由会员分享,可在线阅读,更多相关《计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx(34页珍藏版)》请在冰点文库上搜索。

计算机应用技术论文基于wince的小游戏设计本科毕业论文.docx

计算机应用技术论文基于wince的小游戏设计本科毕业论文

 

毕业设计

题目:

基于WinCE的小游戏设计

系部:

信息工程系

专业:

计算机应用技术

班级:

12计算机应用技术

(2)班

姓名:

王芳

指导教师:

李婷

 

摘要

从2001年开始,游戏作为一种产业已经渐渐地为中国大众接受,它所带来的经济效益和社会效益更是人们之前所没有估计到的,当游戏作为一种很重要的娱乐手段被大众接受时,游戏产业就已经注定会带来巨大的经济效益。

连连看游戏是一款经典小游戏,操作简单,适合所有玩定。

连连看游戏软件在Windows环境下,基于MFC框架设计开发,可以实现初始化界面,用户使用鼠标点击两张相同图案的小方块进行消除,并有多种图案样式的功能选择,丰富了游戏的娱乐性。

此连连看游戏程序界面美观,操作简单,具有一定的趣味性,是一款老少皆宜的休闲佳品。

本文通过需求分析与方案论证,首先对开发连连看游戏程序进行初步的分析,然后通过总体设计的详细设计论述了系统的开发和实现过程。

 

关键词连连看单机游戏;游戏开发

 

第1章绪论..................................................................1

1.1课题背景...................................................................1

1.2课题意义...................................................................1

1.3课题内容及目标......................................................................1

第2章总体设计...............................................................2

2.1开发工具和运行环境.........................................................2

2.1.1开发工具...............................................................2

2.2连连看游戏的设计步骤.......................................................2

2.2.1程序画面的实现.........................................................2

2.2.2程序代码的添加.........................................................2

2.3基类源代码详解.............................................................3

2.3.1基类的构造函数介绍....................................................3

2.3.2基类中其余函数代码的解释..............................................4

2.4卡片类源代码详解...........................................................5

2.4.1Object类..............................................................5

2.4.2卡片类的构造函数......................................................5

2.4.3卡片类中其余函数代码的解释............................................5

2.5卡片集合类源代码详解.......................................................5

2.5.1卡片集合类的构造函数...................................................5

2.5.2与卡片处理、绘制、重置相关的函数.......................................6

2.5.3游戏程序中对屏幕单击的处理.............................................8

2.5.4判断两张卡片之间是否可以连通...........................................8

2.6游戏类源代码详解...........................................................9

2.6.1“离屏技术”的画面绘制方法..............................................9

2.6.2游戏程序的初始化.......................................................9

2.6.3游戏对象的处理........................................................10

2.6.4绘制卡片之间的连接线DrawLine函数.....................................10

第3章游戏状态.............................................................12

3.1游戏状态概述..............................................................12

3.2“连连看"游戏程序状态的介绍................................................12

3.3程序状态的添加所引起的代码变化............................................12

3.3.1卡片集合类............................................................12

3.3.2游戏类................................................................12

3.4变化部分代码详解..........................................................12

3.4.1卡片集合类............................................................12

3.4.2游戏类................................................................13

第4章计时器................................................................16

4.1程计时器功能简介..........................................................16

4.2计时器类的添加............................................................16

4.3代码变化的类及新添加的模块代码详解........................................17

4.3.1计时器类..............................................................17

4.3.2游戏类................................................................20

4.4计时功能中时间显示方式的改变..............................................20

4.4.1变化后的时间显示方式..................................................20

4.4.2时间显示方式的代码变化................................................21

4.4.3代码变化后的计时器类代码详解..........................................22

4.4.4代码变化后的游戏类代码详解...........................................24第5章系统测试..............................................................25

结束语.......................................................................26

致谢.........................................................................27

参考文献.......................................................................28

第1章绪论

1.1课题背景

“连连看”是目前非常流行的一款休闲类游戏。

由于它的游戏规则简单、画面精美、操作简便,而赢得了很多玩家的喜欢。

在游戏开始运行以后,只需要在多种图形当中,按照游戏的规则(两个图形的连线当中不能有别的图形遮挡,并且两个图形之间最多只允许有两个拐点)找出两个图案相同的图形,然后用鼠标把两者连接在一起,就可以消去彼此相连的两个图菜。

在规定的时间内,玩家消掉的图案越多,其得分也越高。

1.2课题意义

开发连连看游戏程序的目的是为了人们休闲的需要,在紧张的工作之余休闲类的小游戏能够给人们带来最大程度的放松,也可以增加人们之间的交流、沟通,通过游戏还可以认识更多的朋友,达到人们之间相互娱乐的目的,而且小游戏还不会浪费资源,不像大型游戏占据资源和牵扯精力,可谓工作娱乐两不误。

通过此次课题的设计,掌握如何制作一个游戏软件,以及制作游戏软件的整个流程,制作游戏软件的步骤,为以后的就业工作打下基础。

1.3课题内容及目标

连连看游戏主要是鼠标两次点击的图片是否能消去的问题。

前提是点击两张相同的图片,若点击的是同一张图片或者是两张不同的图片,则不处理。

在两张相同图片所能连通的所有路径中,如果存在一条转弯点不多于两个的路径,就可以消去;如果没有,则不可以。

此程序的课题内容及目标如下。

1.随机生成游戏界面

2.选择两个图案相同的方块,并且不超过两个转弯的连线将它们连接起来,便可以消除这对方块,每一局玩家需要在规定的时间内消除所有的方块,当完成任务,系统会提示,然后重新开始游戏。

3.当玩家有事,也可以选择暂停。

通过对以上功能的实现,达到界面美观,操作简单,增加游戏的娱乐性、趣味性,使玩家对此游戏产生兴趣。

第2章总体设计

2.1开发工具和运行环境

2.1.1开发工具

本程序采用MicrosoftVisualStudio2008作为开发工具。

WindowsCE的设计目标是:

模块化及可伸缩性、实时性能好、通信能力强大、支持多种CPU。

从操作系统内核的角度看,WindowsCE具有灵活的电源管理功能,包括睡眠/唤醒模式。

在WindowsCE中,还使用了对象存储(ObjectStore)技术,包括文件系统、注册表及数据库。

它还具有很多高性能、高效率的操作系统特性,包括按需换页、共享存储、交叉处理同步、支持大容量堆(Heap)等。

WindowsCE拥有良好的通信能力。

它广泛支持各种通信硬件,亦支持直接的局域网连接以及拨号连接,并提供与PC、内部网以及Internet的连接,包括用于应用级数据传输的设备至设备间的连接。

在提供各种基本的通信基础结构的同时,WindowsCE还提供与Windows9x/NT的集成和通信。

WindowsCE的图形用户界面相当出色。

它拥有基于MicrosoftInternetExplorer的Internet浏览器,此外,还支持TrueType字体。

开发人员可以利用丰富灵活的控件库在WindowsCE环境下为嵌入式应用建立各种专门的图形用户界面。

WindowsCE甚至还能支持诸如手写体和声音识别、动态影像、3D图形等特殊应用。

WindowsCE是一个多任务的操作系统,可以同时执行多个任务,并在他们之间来回切换,这其实是Windows的简化版本,可以通过我们熟悉的Windows的操作方式来控制WindowsCE,它也带有“我的文档”,也有很多软件如PocketWord、PocketExcel等。

WindowsCE同时内置了多媒体功能,通过WindowsMediaPlayer可以播放MP3,甚至是视频。

WindowsCE具有可扩充的CompactFlash/MMC/SD插槽,通过扩充卡可以实现多种功能,例如网页浏览、无线接入或者增加更大的存储空间。

2.2、“连连看”游戏的设计步骤

2.2.1程序画面的实现

1.运行VisualC#,新建一个PocketPC2003的应用程序。

把工程的名字命名为“LinkGame”。

2.添加游戏程序相关的资源图片。

2.2.2程序代码的添加

1.展示游戏中所有对象的基类Object。

把诸如图形绘制相关的位置坐标、选择图形区域等操作都放在了这个类中。

这种代码组织结构不但使整个程序看上去结构非常清晰,也很好地体现了面向对象概念的精髓所在。

即把共性的东西抽象出来,放在一起,方便后面具体对象的实现。

2.卡片类Card。

Card类继承自基类Object,因为卡片类中包含了卡片绘制等一些基本的功能,因此从这个意义上讲,继承自Object是最合适的。

以后只需要修改基类Object的相关代码,就可以实现用不同图形的卡片绘制(比如,选择不同的卡片作为背景进行绘制等)

卡片集合类主要负责卡片集合相关的事项。

比如,绘制整个卡片数组、实现背景卡片的随机排序、处理鼠标在卡片集合上的单击等。

可以说,游戏中关键的功能,如处理鼠标单击,判断两张卡片是否可以可见、连通等功能都是在这里实现的。

3.游戏程序的主类frmMaim.cs。

frmMain.cs中主要包含了游戏的主循环、应用程序的初始化、对象的处理、对象的绘制等游戏程序的主要功能。

概括地讲,该游戏程序都是依靠这个类“串”起来的。

因此,建议读者首先要了解该类中如何把游戏程序的各个功能组合在一起,在此基础上再来仔细研究其余类中代码的具体实现。

2.3、基类源代码详解

在程序代码中提到的Object类是所有对象的基类。

在这个游戏中,图形的绘制、选中标示的绘制等都需要计算目的位置的坐标、源图像的坐标等。

因此,根据面向对象的思想,把所有这些经常用到的属性都抽象成了一个基类。

在这个基类当中包含了一些基本的操作,这样当再派生出具体类(比如,背景卡片)的时候,只需要继承自这个基类就可以了,这就是Object类的作用。

2.3.1基类的构造函数介绍

在一个类中,首先需要实现的就是该类的构造函数。

例如:

pubucObject(GamegRifle)

{

this.game=game;

}

publicObject(Gamegame,Imageimage,ImageAttributesimageAttr

:

this(game)

{

this.image=image;

this.imageAttr=imageAttr;

}

上面这两个构造函数的函数名称是完全一样的,都是Object,只有里面的参数不相同。

我们把这种在同一个类中函数名称相同,而参数类型不同的现象叫做函数的重载。

使用重载函数可以使程序代码在编译的时候,根据函数参数的不同自动地选择相应的函数进行编译。

这样可以大大降低程序的复杂程度。

在“this.game=game”、“this.image=image”和“this.imageAttr=imageAttr”中,this后面的game、image和imageAttr为Object类中的变量,在它们的前面加上this就表示是Object类中的变量;等号后面的那些值则为参数列表中传递过来的参数。

在第2个构造函数的参数列表后面“:

this(game)”的作用是调用Object(Gamegame)。

用户可以把this看作是Object,这样this(game)自然就可以被看成是Object(game),也就是调用第1个构造函数了。

这样做的好处在于,当对Object(Gamegame)进行修改以后,第2个构造函数是不需要修改的。

当然,也可以在第2个构造函数中添加以下语句:

this.game=game

虽然这样也可以实现原来函数的功能,但是如果第1个构造函数发生了变化,第2个构造函数也需要进行相应的修改。

2.3.2基类中其余函数代码的解释

publicboolVisible

{

get

{

returnthis.visible;//返回对象是否可见

}

}

当卡片被消去以后,就处于不可见的状态,反之,则处于可见状态。

这就是Visible函数的作用。

publicvirtuatVoidProcess()//对对象进行相应的处理和操作。

默认值为空,需要的时候可以在子类重写该函数

2.4、卡片类源代码详解

2.4.1Object类

“:

Object”表示卡片(Card)类是Object类的子类,它继承了父类的所有功能,同时又具备自己的一些特性。

2.4.2卡片类的构造函数

pubIlcCard(Gamegame,Imageimage,ImageAttributesimageAttr,intleft,inttop)

base(game,lmage,imageAttr)

这个构造函数参数列表后面的“:

base(game,image,imageAttr)”表示构造函数在初始化的时候,会将Card参数列表里面的game、image和imageAttr传递给基类构造函数Obiect(Gamegame,Imageimage,ImageAttributesimageAttr),这样就实现了初始化所属游戏game、源图像image和颜色属性imageAttr的功能。

2.4.3卡片类中其余函数代码的解释

publicoverridevoidReset()//重置对象

{

Show();//重置对象为可见

}

2.5卡片集合类源代码详解

2.5.1卡片集合类的构造函数

publicCards(Gamegame,ImageimageCard,ImageAttributesimageAttrCard)

{

this.game=game;//设置游戏对象

this.rows=HEIGHT/Card.HEIGHT;//计算卡片集合的行数

this.cols=WIDTH/Card.WIDTH;//计算卡片集合的列数

this.count=this.cols*this.rows;//计算卡片数

this.cards=newCard[this.count];//生成卡片对象数组

for(introw=0;row

{

for(intcol=0;col

{

intindex=this.cols*row+col;//计算卡片索引,其取值范围为0~71。

intleft=Card.WIDTH*col+LEFT;//计算卡片左上角X坐标

inttop=Card.HEIGHT+row+TOP;//计算卡片左上角Y坐标

上面这段代码中的Card.WIDTH*col得出的是当前卡片的左上角距离第一张卡片左上角的距离,再加上后面的LEFT,就得到了当前卡片左上角的X坐标。

同理,我们也可以得到当前卡片左上角的Y坐标。

inttype=(index/2)%Card.TYPE_MAX;//设置卡片类型为两两相同

index/2实现了卡片类型两两相同,再进行“%Card.TYPE_MAX”的计算则实现了对20种卡片类型的选择。

在该函数执行完以后,数组集合Cards中每相邻的2个卡片的图形是一样的。

2.5.2与卡片处理、绘制、重置相关的函数

publicvoidProcess()

{

//处理卡片对象数组

for(inti=0;i

{

if(this.cards[i].Visible)

{

this.cards[i].Process();

}

上面的这段代码中,调用的cards[i].Process()实际上没有实现任何的功能。

那么为什么还要添加这段代码呢?

这是因为在面向对象的程序设计当中,Cards类既然作为一个集合类,就需要处理每一个元素,这是作为集合类的一个要求。

因此,在这里添加这段代码,以保证Cards类的完整性。

publicvoidDraw(Graphicsgx)//绘制卡片集合

{

for(inti=0:

i

count;i++)

{

if(this.cards[i].Visible)

{

this.cards[i].Draw(gx);//调用Card类中的Dmw()函数进行绘制

}

}

}

下面这段代码实现了对卡片集合的重新设置。

publicvoidReset()//重置集合

{

for(inti=0;i

{

this.cards[i].Reset();

}

 for(inti=1;i

{

intj=this.game.Random.Next(i,this.count);

inttype=this.cards[i-1].Type;

this.cards[i-1].Type=this.cards[j].Type;

this.cards[j].Type=type;

}

下面来看看如何通过for循环语句实现卡片数组的随机排序。

上面循环语句里面的Random.Next是返回大于等于i,且小于this.count的整数。

从前面的介绍

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2