基于OpenGL小游戏开发及实践.docx

上传人:wj 文档编号:2127065 上传时间:2023-05-02 格式:DOCX 页数:36 大小:166.52KB
下载 相关 举报
基于OpenGL小游戏开发及实践.docx_第1页
第1页 / 共36页
基于OpenGL小游戏开发及实践.docx_第2页
第2页 / 共36页
基于OpenGL小游戏开发及实践.docx_第3页
第3页 / 共36页
基于OpenGL小游戏开发及实践.docx_第4页
第4页 / 共36页
基于OpenGL小游戏开发及实践.docx_第5页
第5页 / 共36页
基于OpenGL小游戏开发及实践.docx_第6页
第6页 / 共36页
基于OpenGL小游戏开发及实践.docx_第7页
第7页 / 共36页
基于OpenGL小游戏开发及实践.docx_第8页
第8页 / 共36页
基于OpenGL小游戏开发及实践.docx_第9页
第9页 / 共36页
基于OpenGL小游戏开发及实践.docx_第10页
第10页 / 共36页
基于OpenGL小游戏开发及实践.docx_第11页
第11页 / 共36页
基于OpenGL小游戏开发及实践.docx_第12页
第12页 / 共36页
基于OpenGL小游戏开发及实践.docx_第13页
第13页 / 共36页
基于OpenGL小游戏开发及实践.docx_第14页
第14页 / 共36页
基于OpenGL小游戏开发及实践.docx_第15页
第15页 / 共36页
基于OpenGL小游戏开发及实践.docx_第16页
第16页 / 共36页
基于OpenGL小游戏开发及实践.docx_第17页
第17页 / 共36页
基于OpenGL小游戏开发及实践.docx_第18页
第18页 / 共36页
基于OpenGL小游戏开发及实践.docx_第19页
第19页 / 共36页
基于OpenGL小游戏开发及实践.docx_第20页
第20页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于OpenGL小游戏开发及实践.docx

《基于OpenGL小游戏开发及实践.docx》由会员分享,可在线阅读,更多相关《基于OpenGL小游戏开发及实践.docx(36页珍藏版)》请在冰点文库上搜索。

基于OpenGL小游戏开发及实践.docx

2015届毕业设计论文

基于OpenGL的小型游戏开发及实践

院、部:

计算机与信息科学学院

学生姓名:

杜磊

指导教师:

方小勇职称副教授

专业:

计算机科学与技术

班级:

1103

完成时间:

2015-6

摘要

信息时代的到来使得电脑越来越普及,人们对电脑游戏的需求也越来越高。

游戏的界面美观性,可操作性无疑是人们考虑的关键因素。

OpenGL是一种主流的图形处理工具,基于OpenGL开发的小游戏有更好的观赏性,本次论文论述的是基于OpenGL开发的五子棋小游戏。

五子棋,起源于中国古代传统的黑白棋游戏,简单易懂又不缺乏趣味性。

其中的对弈较量,不仅增强人的思维能力,开发人的智力,而且简单的游戏规则中蕴含着深奥的棋技,是修身养性,陶冶情操的一款经典游戏。

本次论文是基于OpenGL和C++语言在VisualStudio2008环境下编程,设计了一款人机对战、人人对战功能的五子棋游戏。

采用极大极小搜索算法及alpha-beta剪枝算法,采取优先级策略来判别棋局,实现了单机游戏的人工智能。

运用了OpenGL的alpha混合及深度测试等一系列的特性,将计算机图形学与算法相结合,旨在设计出一款界面客观性强,游戏可操作性强的一款小游戏软件。

通过学习,基本掌握OpenGL函数库的使用,能够制作简单的平台界面,实现人机交互功能,探讨和研究了博弈论的相关知识,学会将算法与日常事务的结合,运用算法去解决问题。

由于时间原因,界面的美观性有待改进,游戏的多样性以及难易程度的合理性并不是做的很好,希望在今后的学习中更加完善不足的功能。

关键词:

OpenGL;五子棋;小游戏;博弈论

5

ABSTRACT

Thearrivalofinformationagemakescomputersmoreandmorewidespread,peoplearealsomoreandmorehighdemandforcomputergames.Thegameinterfaceaesthetics,operabilityisundoubtedlythekeyfactorswhatpeopleconsider.OpenGLisamainstreamofgraphicsprocessingtools,basedonOpenGL,littlegamehaveabetterviewandadmireagender,thisthesisisbasedonOpenGLdevelopedgobanggame.

Gobang,originatedintheancientChinesetraditionalblackwhitegame,easytounderstandandnotalackofinterest.Thegame,notonlyenhancetheperson'sthinkingability,developersofintelligence,andthesimplerulesofthegamecontainsprofoundChessskills,cultivateone'smoralityraisesagender,edifysentimentofaclassicgame.

ThispaperisbasedonOpenGLandC++languageprogramminginVisualStudio2008environment,designedafunctionoftheman-machineagainstandeveryoneagainstgobanggame.Theminimaxsearchalgorithmandalpha-betapruningalgorithm,discriminantchess,takeprioritystrategytorealizethesingle-playergameAI.UsingaseriesoffeaturesaboutthealphablendofOpenGLanddepthtestandsoon,combiningcomputergraphicsandalgorithm,aimstodesignaninterfacestrongobjectivity,gamesstrongoperabilityofasmallgamesoftware.

ThroughlearningthatthebasictomastertheuseofOpenGLlibraryfunction,Icanmakeasimpleplatforminterface,realizethehuman-computerinteractionfunction,discussesandstudiestherelatedtheoryknowledge,learntoalgorithmcombinedwiththedailyaffairs,usingthealgorithmtosolvetheproblems.Duetotimereasons,interfaceaestheticsneedstobeimproved,thediversityofthegame,andtherationalityofeaseisnotdoingverywell,thelackofhopeinthefuturetolearntobemoreperfectfunction.

Keywords:

OpenGL;Gobang;game;gametheory

目录

1绪论 1

1.1课题研究的背景及意义 1

1.2五子棋的发展与现状 2

1.3OpenGL国内外研究现状 2

1.4本章总结 3

2基于OpenGL五子棋开发使用工具 4

2.1C++ 4

2.2OpenGL 4

2.2.1什么是OpenGL 4

2.2.2OpenGL的特点 5

2.3VisualStudio2008 5

2.4本章总结 6

3基于OpenGL五子棋算法的实现 7

3.1极大极小搜索中的评价函数 7

3.2极大极小搜索及alpha-beta剪枝 12

3.3本章总结 13

4基于OpenGL五子棋系统设计 14

4.1操作设计 14

4.1.1人机对战 14

4.1.2人人对战 15

4.1.3鼠标与键盘的操作 16

4.3界面设计 18

4.3.1OpenGL的图形生成 18

4.3.2基本图形的绘制方法 19

4.3.3主界面窗口设计 20

4.3.4棋盘界面设计 22

4.1本章总结 23

5系统实现 24

6总结 29

参考文献 30

致谢 32

附录 33

1绪论

本章节研究课题的背景及意义,明确做次课题的目的,通过查阅资料更好地熟悉课题。

1.1课题研究的背景及意义

人类之所以不断在进步,是因为我们人类一直不断的在思考,在学习完计算机图形学这门课程之后,我对图形学的研究很感兴趣,我在思考能不能用所学的知识来做一些实践,恰巧我平时喜欢棋类游戏,我就想基于OpenGL来开发一款游戏,而五子棋游戏程序的开发符合人类进步也是促进人类进步的一大动力之一。

五子棋游戏程序让人们方便快捷的可以下五子棋,让人们在何时都能通过下棋来提高逻辑思维能力,同时也培养儿童的兴趣以及爱好,让孩子更加聪明。

同时,五子棋游戏程序的开发也使得五子棋这个游戏得到了广泛的推广,让世界各地的人们知道五子棋,玩上五子棋,这已经不是局限。

五子棋游戏程序使得越来越多的人喜欢上了五子棋,热爱下五子棋,它是具有很好的带动性的。

于是我收集了国内外有关计算机图形学的资料,我发现国内外最近几年计算机图形学发展迅速,使得三维表现技术得以形成,这些三维表现技术使单调的二维界面逐步转变为丰富立体的三围界面,我们能够再现三维世界中的物体,能够用三维形体来表示复杂的信息,这种技术就是可视化(Visualization)技术。

可视化技术把数据转化为图形,使人能够在三维图形世界中直接对具有形体的信息进行操作,和计算机直接交流。

这都归功于计算机图形学、计算机可视化技术的发展。

人们对计算机可视化技术的研究已经历了一个很长的历程,而且形成了许多可视化工具,其中SGI公司推出的GL三维图形库表现突出,易于使用而且功能强大。

进而发展为OpenGL。

OpenGL作为一个图形硬件接口,很好地为程序员提供一个功能强大,低层次的渲染库,能够运用于任何软件平台,也得到了广泛的硬件支持。

OpenGL也为游戏开发提供强大的图形界面平台,使得游戏画面感丰富,提高可观赏性。

可见基于OpenGL的游戏开发将会成为主流市场,会给游戏行业带来新一番的收获和体验。

所以我想基于OpenGL来制作一款五子棋小游戏,对此课题的研究也将让我更近一步熟悉OpenGL,通过动手实践更好地学习新知识,巩固旧知识

1

1.2五子棋的发展与现状

充分的准备是成功的第一步,在确定了这一论文课题后,我收集了大量的有关于五子棋的资料,五子棋这一棋类运动已迅速在国际上发展起来。

外国人都十分看好这一不起眼的智力游戏,并认为五子棋不仅能提高思维、开发智力、手脑并用、修身养性而且富含哲理,具有东方的神秘和西方的直观,是中西文化的交汇点。

许多国家的人对五子棋都有不同的爱称,例如韩国人把五子棋称之为“情侣棋”,因为五子棋可以两个人下,别有一番趣味,所以此次设计中,我将设计人人对战功能,供双人玩这个游戏,言下之意,我希望设计一款情人之间可以下的五子棋,这样有利于增加情感的交流;欧洲人称之为“中老年棋”,表示五子棋适合中老年人的生理特点和思维方式,所以我这一次设计中希望设计人机对战的功能,这样老年人就可以跟电脑下棋,为老年人提供一个休闲娱乐的工具,由此可见,尽管国度不同,语言各异,但人们都可以借助五子棋这一简单而又深奥的棋艺进行交流、比赛,增进友谊,这也是我从五子棋的现状中得到启发想要设计的一款软件。

五子棋的流行令人瞠目结舌,目前有几十个国家都在下五子棋,也引申出各种级别和规模的比赛。

自1989年起,每两年都有五子棋世界锦标赛举行,从第一届在日本东京都到俄罗斯联邦的莫斯科、瑞典以及爱沙尼亚的塔林,一届比赛比一届精彩,日本人在这个比赛中一直都占据了领先的位置,除第三届的冠军是爱沙尼亚人之外,其余三届的冠军都是日本人。

日本目前对连珠(五子棋)技术的研究也相当普遍和全面,并且日本五子棋职业棋手是令人敬畏的,他们的水平是世界级的,并且在日益增长。

同时五子棋的理论研究与探索也呈现蓬勃发展的势头,从1858年第一部五子棋专著问世以来,目前,全世界有2000多种五子棋的书籍及期刊,且用各种语言发行。

五子棋在我国的各省市地区都有很大的发展,收到人们的喜爱。

最具有代表性的就属北京,举办了各种规模的赛事,其他省市也举办了大大小小的赛事。

所以我觉得做一个五子棋系统肯定有很多人喜爱。

1.3OpenGL国内外研究现状

OpenGL作为一个性能优越的图形应用程序设计界面(API)适合于广泛的计算机环境,从个人计算机、工作站到超级计算机,OpenGL都能实现高性能的图形功能。

由于许多在计算机界具有领导地位的计算机公司纷纷采用OpenGL作为图形应用程序设计界面,OpenGL应用程序具有广泛的移植性。

OpenGL已成为目前的图形开发标准。

OpenGL(OpenGLGraphicsLibrary,开发性图形库)是目前用于开发2D图形应用程序的首选环境,具有可移植性、可交换性等优点,是行业领域中最为广泛接纳的2D图形API,也是目前应用最为广泛的计算机图形标准,其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序。

通过对OpenGL的特点、功能、工作流程和绘图流程的学习,我们将会对OpenGL有一个初步的了解,建立起基本的概念。

在国外OpenGL是具有一定的生命力的,唯一能够取代微软对图形技术的完全控制的API。

但是由于SiliconGraphics公司已经不再以任何让微软不悦的方式推广OpenGL,所以采用OpenGL开发游戏还是具有一定风险。

鉴于OpenGL的特点,还是有许多非常重要的开发人员仍然在使用OpenGL进行游戏的开发与创作。

因此,硬件开发商目前正在想法设法地加强硬件对OpenGL的技术支持。

1.4本章总结

通过查阅资料和阅读文献,我了解到OpenGL小游戏制作的研究现状,了解一些商业上对OpenGL的运用,通过对五子棋的调研发现,喜欢这一游戏的人居多,所以我明确了本次课题的对象:

基于OpenGL设计出一款五子棋游戏。

2基于OpenGL五子棋开发使用工具

2.1C++

C++是在C语言的基础上开发的一种通用编程语言,应用广泛。

C++支持多种编程范式--面向对象编程、泛型编程和过程化编程。

C++语言灵活,运算符的数据结构丰富、具有结构化控制语句、程序执行效率高,而且同时具有高级语言与汇编语言的优点,与其它语言相比,可以直接访问物理地址,与汇编语言相比又具有良好的可读性和可移植性。

C++引入了面向对象的概念,使得开发人机交互类型的应用程序更为简单、快捷。

2.2OpenGL

2.2.1什么是OpenGL

OpenGL是一种图形与硬件的接口。

它包括了上百个图形函数,开发者可以用这些函数来建立三维模型和进行三维实时交互。

与其他图形程序设计接口不同,OpenGL提供了十分清晰明了的图形函数,因此初学的程序设计员也能利用OpenGL的图形处理能力和1670万种色彩的调色板很快地设计出三维图形以及三维交互软件。

OpenGL强有力的图形函数不要求开发者把三维物体模型的数据写成固定的数据格式,这样开发者不但可以直接使用自己的数据,而且可以利用其他不同格式的数据源。

这种灵活性极大地节省了开发者的时间,提高了软件开发效益。

长期以来,从事三维图形开发的技术人员都不得不在自己的程序中编写矩阵变换、外部设备访问等函数,这样为调制这些与自己的软件开发目标关系并不十分密切的函数费脑筋,而OpenGL正是提供一种直观的编程环境,它提供的一系列函数大大地简化了三维图形程序。

(1)OpenGL提供一系列的三维图形单元供开发者调用。

(2)OpenGL提供一系列的图形变换函数。

(3)OpenGL提供一系列的外部设备访问函数,使开发者可以方便地访问鼠标、键盘、空间球、数据手套等这种直观的三维图形开发环境体现了OpenGL的技术优势,这也是许多三维图形开发者热衷于OpenGL的缘由所在。

2.2.2OpenGL的特点

OpenGL具有标准化:

它是唯一真正开放的,独立于供应商的、跨平台的图形标准。

稳定性:

OpenGL用时间证明它在各个平台上运用良好,它具有明确而控制良好的规范,并具有向后兼容性,使现有的应用程序不会失效。

扩展性:

许多开发商利用这一特性通过对API进行扩展来对OpenGL的功能进行升级。

可缩放性:

基于OpenGL的应用程序可以在各种系统上运行,其范围从家用电脑到PC机,从工作站到超级计算机,可以说,OpenGL应用程序可以适应开发人员选择的各种目标平台。

易用性:

OpenGL具有良好的结构,直观的设计和逻辑命令。

与其他的图形程序包相比,OpenGL应用程序的代码行数少。

此外,OpenGL封装了有关基本硬件信息,使开发人员无须针对具体的硬件进行专门的设计。

可靠性和可移植性:

在OpenGL兼容的任何硬件上,不管使用什么操作系统,同一个应用程序的显示结果均相同。

与其它图形程序包相比,OpenGL应用程序的代码行数少。

此外,OpenGL封装了有关基本硬件的信息,使开发人员无需针对具体的硬件进行专门的设计。

在CAD/CAM/CAE、医学图像处理、虚拟现实、娱乐、广告等不同领域中,开发人员可以利用OpenGL的这些能力自由发挥自己的创造性。

2.3VisualStudio2008

Visualstudio2008是微软自行研发的一款开发系统,支持Windows平台下各类应用软件和应用服务的开发。

作为C++与OpenGL的开发平台,能很好地进行代码编写和调试。

具有良好的运用性和友好性。

Visualstudio2008为程序员提供了一个面向对象的Windows编程接口MFC(MicrosoftFoundationClass),它大大地简化了Windows编程工作。

此次小游戏开发中我也使用了编程接口MFC。

MFC提供了一个标准化的结构,这样开发人员不必从头设计创建和管理一个标准Windows应用程序所需的程序,而是“站在巨人肩膀上”,从一个比较高的起点编程,故节省了大量的时间;其次,它提供了大量的代码,指导用户编程时实现某些技术和功能。

对用户来说,用MFC开发的最终应用程序具有标准的、熟悉的Windows界面,这样的应用程序易学易用。

2.4本章总结

作为一名计算机专业的学生,利用网络资源学习是一项基本的技能,我通过网络进一步学习了本次设计所用到的开发工具,很大的提高了我编程水平。

3基于OpenGL五子棋算法的实现

此章节中将介绍基于OpenGL五子棋所涉及到的一些算法,采用解析代码的方法,阐述博弈论中的深度搜索策略。

3.1极大极小搜索中的评价函数

极大极小搜索策略一般都是使用在一些博弈类的游戏之中,例如本次课题的五子棋游戏。

要讨论极大极小搜索算法,首先要明白什么是搜索。

最基本的搜索方法是暴力搜索:

所谓暴力搜索就是采用循环语句将所有可能的情况搜索一遍,这个搜索方法在本例中不适用,因为如果采用暴力搜索,把最终的结果得到的话,搜索树的深度太大了,机器不能满足。

所以我们考虑另一个搜索策略,即深度搜索。

规定一个搜索的深度,在这个深度范围内进行深度优先搜索。

极大极小搜索算法的本质就是深度搜索,在搜索过程中,对本方有利的搜索点上应该取极大值,而对本方不利的搜索点上应该取极小值。

这里的极大极小值是相对而言的。

在设计人与机器对弈的情况下,我应该站在机器的角度考虑,为机器设计出最佳的走棋策略。

机器和人对弈,轮到机器走棋了,那么我们会遍历机器的每一个可能走棋方法,然后对于前面机器的每一个走棋方法,遍历人的每一个走棋方法,然后接着遍历机器的每一个走棋方法,如此下去,直到得到确定的结果或者达到了搜索深度的限制。

当达到了搜索深度限制,此时无法判断结局如何,一般都是根据当前局面的形式,给出一个得分,计算得分的方法被称为评价函数,不同游戏的评价函数差别很大,需要很好的设计。

本课题中,我设计的评价函数如下(函数名为:

EvaluateSituation(char*situation)):

在这个五子棋游戏中,定义棋盘的大小为15*15的方格举矩阵,也就是225小格的正方形棋盘。

用数组charsitu[15][15]来表示。

五子棋的规则是,有五个同颜色的子相连成一条直线,在横向,纵向,左斜路,右斜路上,即为获胜。

我们用“0”来表示我方的棋子,用“+”来表示敌方的棋子。

则我们用两种情况来分析得分,用一个Int型变量score来记录分数。

首先我们来寻找<00000>,<+0000>,<0000+>,<00+00>,<0+000>,<000+0>的情况,以下用主要的代码以及我对代码的解释:

在横路上搜索,核心的代码如下:

For(i=0;i<10;i++)//横向只需搜索十个格子,有五个格子是被棋子占用,因为我们搜索的是连续5个棋子的情况,搜索十个格子就会达到目的;

For(j=0;j<15;j++)

if((situ[i][j]==-1)&&(situ[i+1][j]==-1)&&(situ[i+2][j]==-1)&&(situ[i+3][j]==-1)&&(situ[i+4][j]==-1))//连续的五个格子都占有棋子;

score+=500000;//对黑子进行匹配<00000>的情况(500000分)

elseif((situ[i][j]==-1)&&(situ[i+1][j]==-1)&&(situ[i+2][j]==0)&&(situ[i+3][j]==-1)&&(situ[i+4][j]==-1))

score+=720;//对黑子进行匹配<00+00>的情况(720分)

elseif((situ[i][j]==0)//对黑子进行匹配<+0000>的情况(720分))

score+=720;

elseif((situ[i+4][j]==0)//对黑子进行匹配<0000+>的情况(720分))

score+=720;

elseif((situ[i+2][j]==0)//对黑子进行匹配<0+000>的情况(720分))

score+=720;

elseif((situ[i+3][j]==0)//对黑子进行匹配<000+0>的情况(720分))

score+=720;

//同样的道理,对白子进行匹配:

elseif((situ[i][j]==1)&&(situ[i+1][j]==1)&&(situ[i+2][j]==1)&&(situ[i+3][j]==1)&&(situ[i+4][j]==1)

score-=500000;//对白子进行匹配<00000>的情况<-500000分>

elseif((situ[i][j]==1)&&(situ[i+1][j]==1)&&(situ[i+2][j]==0)&&(situ[i+3][j]==1)&&(situ[i+4][j]==1))

score+=720;//对白子进行匹配<00+00>的情况(720分)

elseif((situ[i][j]==0)//对白子进行匹配<+0000>的情况(720分))

score+=720;

elseif((situ[i+4][j]==0)//对白子进行匹配<0000+>的情况(720分))

score+=720;

elseif((situ[i+2][j]==0)//对白子进行匹配<0+000>的情况(720分))

score+=720;

elseif((situ[i+3][j]==0)//对白子进行匹配<000+0>的情况(720分))

score+=720;

在纵路上搜索,核心的代码及解释如下:

For(0<=i<15)

For(0<=j<11)

//与横路上同理,i的值不变j的值依次+1寻找符合标准的情况

例如匹配黑子<00000>的情况:

If((situ[i][j]==-1)&&(situ[i][j+1]==-1)&&(situ[i][j+2]==-1)&&(situ[i][j+3]==-1)&&(situ[i][j+

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

当前位置:首页 > PPT模板 > 商务科技

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

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