C#实现魔方仿真游戏的设计.docx
《C#实现魔方仿真游戏的设计.docx》由会员分享,可在线阅读,更多相关《C#实现魔方仿真游戏的设计.docx(12页珍藏版)》请在冰豆网上搜索。
C#实现魔方仿真游戏的设计
C#设计报告
魔方仿真游戏的设计
绪论
课题的选题背景
真实的魔方总是让人不停地钻研,人们通过旋转魔方,开发自己的思维,可是有时候买一个魔方还是一件很麻烦的事情,很多人都有自己的电脑,他们有时候也想能否在电脑上就能体验一下玩魔方的感觉。
课题的国内外研究现状
如今有很多通过Java,Flash,或者OpenGL基于C/C++开发的魔方游戏,它的各个面也只是用颜色绘制。
而用C#开发的魔方作品几乎没有。
但是DirectX这个开发包的出现让这成为了现实,然而,对于DirectX的研究在国外甚多,在国内用DirectX开发的作品确实太少,在这方面资料也显得非常缺乏,能找到的资料大多数都是外国的,英文版本的。
本人所做的主要工作
本人通过引进开发包DirectX基于C#,来实现绘制三维的仿真实的九宫格虚拟魔方,并且通过鼠标控制其整体的旋转,和各个层的旋转。
课题需求分析
课题的功能需求
绘制三维仿真魔方:
绘制一个六面体,是一个3*3*3形式的魔方
魔方的整体的缩放与旋转:
通过鼠标控制
魔方的旋转:
通过鼠标点击按钮,控制其对应面的旋转
课题的性能需求
在电脑上最好能都简单的通过鼠标控制魔方游戏
使其操作更简单。
涉及的主要工作原理和关键技术介绍
三维图形绘制原理技术介绍
采用VisualC#语言对DirectX进行三维图形开发,首先介绍一下Device类,Device类用于完成DirectX里所有绘图操作,我们可以把这个类假想为图形卡,场景里所有其他图形对象都依赖于Device,计算机里可以有多个Device。
通过Direct3D绘制的每个对象都是有三角形组成的,一个三角形由三个点组成,而每个点都定义成一个向量来指定点的X、Y和Z坐标。
DirectX中有一种定义顶点的结构,那就是CustomVertex类,只需要在渲染函数中添加绘制图形代码即可绘图。
绘制图元(primitives)根据其绘制方式,Device类主要提供了如下四个方法,本次课程设计主要采用了如下绘图方法:
publicvoidDrawUserPrimitives(PrimitiveTypeprimitiveType,intprimitiveCount,objectvertexStreamZeroData);
DrawUserPrimitives()方法通过读取系统内存中的顶点数据来绘制图元。
每次调用DrawUserPrimitives()方法时,顶点数据都是从系统内存中传递到显卡中,但通常对于大部分数据没有变换的情况下,采用这种方式绘制图元将导致每次渲染时都要从系统内存中调用重复的数据,当顶点数据量较大时,会导致程序运行速度非常慢。
绘制分段直线采用PrimitiveType.LineList类型。
魔方旋转原理技术介绍
魔方的旋转主要是通过算法记录旋转前各个小块的颜色,旋转后重新对其着色。
对图形不停地进行渲染。
关键问题解决思路
三维魔方的描述问题的解决方法
定义了一个Block类,用来表示一个小的六面体,以及它所在的位置的世界坐标,和给它的每个面着色。
包括旋转某个面后,被旋转小块的重新着色的实现。
魔方整体旋转问题的解决方法
通过鼠标点击拖动,控制魔方的整体旋转。
定义了一个鼠标监听函数,鼠标移动后,坐标的改变将引起视图显示的角度的变化,然后视觉上给人以不同的效果。
3.3.3魔方每一层旋转和打乱问题的解决方法
每一层的旋转,定义了一个旋转函数,每次指定旋转层,根据其中心块的表面颜色,来执行旋转函数。
旋转函数通过改变块的颜色,视觉上给人以旋转后的效果,即重新对魔方的部分要求被改变的小块进行着色。
打乱魔方则是通过随机指定旋转面,然后调用旋转函数。
进行很多次的随机旋转后就会显现打乱后的魔方。
系统设计
系统总体结构、模块或流程
图一:
系统的总体结构
根据礼品魔方的功能,主要分三个模块,三维魔方的显示,魔方的整体翻转,还有魔方的各层的旋转。
显示三维图形子模块的设计
图二:
显示三维图形
三维图形的绘制是通过DirectX中的device设备实现的,通过摄像机,将世界坐标系中的图形转换到视图矩阵,然后采用PositionColored形式来定义顶点格式结构
魔方的整体翻转子模块的设计
图三:
魔方的整体翻转
魔方的整体翻转:
是通过鼠标监听函数接受鼠标输入来改变三维图形的显示角度,控制矩阵的偏移。
魔方的各层旋转子模块的设计
图四:
魔方各层旋转结构图
魔方各层的旋转:
是通过记录改变各个小块的面的颜色情况来实现旋转的。
魔方的打乱
魔方的打乱只是多次随机调用魔方的层旋转函数。
系统实现
在主菜单上选择“项目——添加引用”,然后在.NET中添加和,如下图所示:
打开窗体和类的代码,为其添加DirectX引用,如下:
using;
usingpartialclassCubeUI:
Form
{
raw(x,y,z);
}
}
}
=false;osition=newVector3(x,y,z);osition=newVector3(x,y,z+scale);
vertices[2].Position=newVector3(x+scale,y,z+scale);
vertices[3].Position=newVector3(x+scale,y,z);
vertices[4].Position=newVector3(x,y+scale,z);
vertices[5].Position=newVector3(x,y+scale,z+scale);
vertices[6].Position=newVector3(x+scale,y+scale,z+scale);
vertices[7].Position=newVector3(x+scale,y+scale,z);
合软件运行的最低要求。
测试环境首先要保证能支撑软件正常运行。
2.选用比较普及的操作系统和软件平台。
本软件采用:
MicrosoftWindowsXPProfessional版本2002servicepack2和MicrosoftVisualStudio2008
服务器上的第三方软件:
VS自带的DirectX(主要用于图形游戏开发)
3.营造相对简单、独立的测试环境。
除了操作系统,测试机上只安装软件运行和测试必需的软件,以免不相关的软件影响测试实施。
4.无毒的环境。
利用有效的正版杀毒软件检测软件环境,保证测试环境中没有病毒。
采用360检测。
测试记录
项目名称:
一个简单的礼品魔方
功能:
绘制一个虚拟的三维魔方,可以随机打乱魔方,且可以实现随意的转动。
测试结果:
开始运行后:
呈现出的三维魔方。
附带一些操作旋转的按钮和说明。
按住鼠标右键拖动鼠标实现魔方整体翻转。
可以实现上下左右前后翻转。
点击打乱按钮:
实现打乱魔方
魔方各个面的旋转:
红色面:
旋转前的情况
点击红色按钮后,旋转90°后的情况
白色面:
旋转前:
旋转90度后的情况
……
……
……
魔方旋转成功后如图。
软件安装运行说明书
程序的运行必须要安装Microsoft开发的DirectX开发工具包SDK,并且添加其引用。
下载地址:
&FamilyID=3021d52b-514e-41d3-ad02-438a3ba730ba
心得体会
此次课程设计,主要历时一个月,但其从前期的确定指导老师,到选题,然后根据老师的指导,进行前期准备则不止一个月。
本人通过图书馆、网络等各种途径查询我此次所做课题的国内外研究情况,礼品魔方几乎没有过实现,各种魔方游戏倒是有不少,不过其实现方式都是依靠C++/C、OpenGL、GDI、Java、Flash、Flex、Silverlight、DirectX等对图形图像处理都非常强大的工具或者语言等开发包实现的。
然而,由于本人学习的专业是方向的,只对C#和比较熟悉,才开始本打算用来实现成B/S结构的一个礼品魔方。
但是这方面实现太过于困难,几乎很难找到实现三维开发的先例。
最后把本人的情况和现今的市场开发情况相结合,选择了DirectX和C#的组合这个研究方向,花了无限的精力,实现了这样一个礼品魔方,现如今也只是一个能玩的游戏。
还远远没有达到老师所期望的高度,希望在后续的时间里,能对其进一步改进,完善某些功能。
经过这次课程设计,我在查阅资料的同时几乎熟悉了如今软件行业,各种工具,语言的特点,他们的开发特点,他们开发上的利与蔽。
知道了对于图形软件开发的困难度。
对于今后在开发一个项目时,对于语言和工具的选择会有一个更好的拿捏。
遗憾的是这个项目还有某些功能没有实现。
不过对于以后的研究方向有了一定的规划。
还有就是得感谢范伟老师给了这么一个选题,让我涉及到了以前几乎不了解的图形开发。
相信对于我以后的发展会带来无尽的帮助,还有就是得感谢老师,给予的指导,才有可能个人完成这样一个项目。
参考文献
肖泽云.《基于visualC#的DirectX开发实例》【M】.三峡大学:
三峡水利与环境学院
刘先省&陈克坚&董淑娟等.《VisualC#程序设计教程》【M】.北京:
机械工业出版社,
甘泉.《PC游戏编程(DirectX8)》【M】.重庆:
重庆大学出版社.
Microsoft.《visualstudio2008MSDN》.Microsoft
XX
谷歌