结合directx3D函数库3D视角游戏(软件工程第二次作业)
结合directx3D函数库3D视角游戏
小组(罗胜文 、 李长燕)
一.项目概况
随着因特网的普及和快速发展,国内的用户不断的增长。游戏已经成为许多用户不可或缺的娱乐项目。在玩过太多的平面2D游戏后,大部分玩家已经不在满足于2D平面的视觉效果,3D游戏采用立体空间坐标的概念,显得场景更加真实、逼真,因此更能吸引用户。这款游戏结合directx3D函数库3D视角游戏,类似于很流行的游戏《英雄联盟》,但它以3D的形式呈现,能够产生给人意想不到的视觉效果。
二.需求分析
1、把普通的平面游戏变成3D的游戏。
2、在过去一些流行游戏的基础上设计出新的游戏,加一些增量式的创新。
三.软件设计
工作平台:
采用C++语言,调用directx图形接口,windows8.1 x64 操作系统 visual studio 2013。
设计思路:
1、游戏的基本设计原则:保持简单性原则,分开数据处理和图像渲染,提高游戏性能。
2、采用面向对象的设计思路,重点在于3D图形的渲染,通过调用directx图形库函数完成。
四.程序描述
一.类名及描述
1、CameraClass:游戏地图视角
2、DInputClass:鼠标、键盘输入类,接受从鼠标、键盘传入的消息
3、SkyBoxClass:天空渲染类,渲染天空视图
4、SnowParticleClass:粒子系统类,用来渲染天空雪花飘落的类
5、XFileModelClass:加载资源和图形类
6、TerrainClass:纹理类
二、类相关调用关系图:
三、入口函数
//*****************************************************************************************
// Name: WinMain( )
// Desc: Windows应用程序入口函数
//*****************************************************************************************
int WINAPIWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)
{
//开始设计一个完整的窗口类
WNDCLASSEXwndClass={0} ; //用WINDCLASSEX定义了一个窗口类,即用wndClass实例化了WINDCLASSEX,用于之后窗口的各项初始化
wndClass.cbSize= sizeof( WNDCLASSEX ) ; //设置结构体的字节数大小
wndClass.style =CS_HREDRAW |CS_VREDRAW; //设置窗口的样式
wndClass.lpfnWndProc= WndProc; //设置指向窗口过程函数的指针
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hInstance= hInstance; //指定包含窗口过程的程序的实例句柄。
wndClass.hIcon=(HICON)::LoadImage(NULL,_T("GameMedia\\icon.ico"),IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE);//从全局的::LoadImage函数从本地加载自定义ico图标
wndClass.hCursor= LoadCursor(NULL, IDC_ARROW ); //指定窗口类的光标句柄。
wndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH); //为hbrBackground成员指定一个灰色画刷句柄
wndClass.lpszMenuName= NULL; //用一个以空终止的字符串,指定菜单资源的名字。
wndClass.lpszClassName= _T("ForTheDreamOfGameDevelop"); //用一个以空终止的字符串,指定窗口类的名字。
if( !RegisterClassEx(&wndClass ) ) //设计完窗口后,需要对窗口类进行注册,这样才能创建该类型的窗口
return -1;
HWNDhwnd = CreateWindow( _T("ForTheDreamOfGameDevelop"),WINDOW_TITLE, //喜闻乐见的创建窗口函数CreateWindow
WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, SCREEN_WIDTH,
SCREEN_HEIGHT, NULL, NULL, hInstance, NULL );
//Direct3D资源的初始化,调用失败用messagebox予以显示
if (!(S_OK==Direct3D_Init(hwnd,hInstance)))
{
MessageBox(hwnd,_T("Direct3D初始化失败~!"),_T("浅墨的消息窗口"), 0);//使用MessageBox函数,创建一个消息窗口
}
PlaySound(L"GameMedia\\Doom.wav",NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //循环播放背景音乐
MoveWindow(hwnd,200,10,SCREEN_WIDTH,SCREEN_HEIGHT,true); //调整窗口显示时的位置,窗口左上角位于屏幕坐标(200,10)处
ShowWindow(hwnd, nShowCmd ); //调用Win32函数ShowWindow来显示窗口
UpdateWindow(hwnd); //对窗口进行更新,就像我们买了新房子要装修一样
//进行DirectInput类的初始化
g_pDInput = new DInputClass();
g_pDInput->Init(hwnd,hInstance,DISCL_FOREGROUND |DISCL_NONEXCLUSIVE,DISCL_FOREGROUND |DISCL_NONEXCLUSIVE);
//消息循环过程
MSG msg= { 0 }; //初始化msg
while(msg.message != WM_QUIT ) //使用while循环
{
static FLOAT fLastTime = (float)::timeGetTime();
static FLOAT fCurrTime = (float)::timeGetTime();
static FLOAT fTimeDelta = 0.0f;
fCurrTime = (float)::timeGetTime();
fTimeDelta = (fCurrTime - fLastTime) / 1000.0f;
fLastTime = fCurrTime;
if( PeekMessage( &msg, 0, 0, 0, PM_REMOVE )) //查看应用程序消息队列,有消息时将队列中的消息派发出去。
{
TranslateMessage(&msg ); //将虚拟键消息转换为字符消息
DispatchMessage(&msg ); //该函数分发一个消息给窗口程序。
}
else
{
Direct3D_Update(hwnd,fTimeDelta); //调用更新函数,进行画面的更新
Direct3D_Render(hwnd,fTimeDelta); //调用渲染函数,进行画面的渲染
}
}
UnregisterClass(_T("ForTheDreamOfGameDevelop"), wndClass.hInstance);
return0;
}
五.测试报告
一.游戏界面:
二.背景天空
三.背景效果
四.操作执行
五.游戏地图
六.性能分析
1.总体性能分析
2.CPU使用分析:
3.GPU使用分析
4.内存占用分析
七.改进计划
1、 地形可以任意穿越,这对一个真正的3D游戏来说是不合理的,多以这个是以后改进的一个方向。
2、 角色的动态,现在还不能完成角色的创建,动态进行游戏,也是这个游戏需要改进的一个地方。
八.软件维护
在软件开发完成交付用户使用后,就进入了软件运行/维护阶段。为了保证软件在一个相当长的时期能够正常运行,对软件的维护就成为必不可少的工作了。软件维护是指在软件已经交付用户使用之后,为了改正错误或满足新的需求而进行修改软件的过程。而目前只有我们自己内测,所以维护嘛今后会在程序运行的过程中进行啦。首先我们地分析了现在相关软件的需求,主要是在网上查找相关资料,玩一些相类似的游戏。我们简单得写了一个测试计划和用例设计:根据测试计划、任务分配、功能点划分,设计合理的测试用例。我们和班上的一些同学根据测试用例的详细步骤,执行测试用例。我们对每个case记录测试的结果,有bug的在测试管理工具中编写bug记录。通过不断测试、追踪,直到被测软件达到测试需求基本要求,最后并没有重大bug,我们最后思考了一下用户体验效果和商业价值。
九.总结体会
通过这次的作业,对做一个小型的项目有了初步的了解。对于任何的项目,都要学会怎么样 编写文档,明白写文档对产品的重要性。在需求分析,最基本的要求是要知道需求是什么,项目的目标特征,完成的效果。在软件的开发和设计过程中,要先有一个明确的计划和方向,一般写的软件都不容易完成,需要在写的过程中不断学习新的知识来解决编程时候遇到的难题。另外,要学会与自己的队友沟通, 能够培养团队精神, 才能更好的完成项目。在软件开发完成后一定要做一些简单得测试,要不断检查和修改,使得项目更加完善。
结合directx3D函数库3D视角游戏(软件工程第二次作业)相关推荐
- 软件工程 第二周作业
##软件工程第二周作业 提出问题 1. 一般来说,想要自己的程序跑得又快又好,就要减少函数的反复调用,但有所得则必有所失,效能提高就有可能伴随着程序的稳定性的降低,这两者应该如何权衡呢? 2. 关于5 ...
- 软件工程第二次作业——模仿网站
我以我的JS发誓 我以我的解释器宣告 将世界上所有的HTML汇聚 将世界上应有之css样式改变 集中所有的解释器和JS 将这网页为我所用 the Teleport Ultra 倾听我内心的愿望 让它实 ...
- 软件工程第二次作业:基于Unity的3D魔方实现
基于Unity的3D魔方实现 王化明(2012211757).吴静(2012211523) 一.背景: 魔方,英文名为Rubik's Cube,又叫魔术方块,也称鲁比克方块.是匈牙利布达佩斯建筑学院 ...
- 北航2022软件工程第二次作业——产品评测、分析与规划
软件工程第二次分析作业 项目 内容 这个作业属于哪个课程 北京航空航天大学2022春季软件工程(罗杰 任健) 这个作业的要求在哪里 个人阅读作业-软件案例分析 我在这个课程的目标是 学习软件工程的基础 ...
- 2022OUC软件工程第二次作业-08组
第二次作业:深度学习基础 一.金知霖 一.视频学习心得及问题总结 人工智能:使一部机器像人一样进行感知.认知.决策.执行的人工程序或系统 人工智能三个层面:计算智能.感知智能.认知智能 机器学习的定义 ...
- 现代软件工程第二次作业-github初使用及CanTool需求文档
作业要求: 完成下面的题目,并在小组博客中写出整个操作过程及学习心得(图文并茂):(每人都要在小组博客中写出来,并注明姓名) 1.参照 http://www.cnblogs.com/xinz/p/38 ...
- 软件工程第二次作业完整版
一.成员 李晓晨 1500802116 马荣贞 1500802105 二.伙伴链接 http://www.cnblogs.com/marongzhen/p/6842061.html 二.代码链接 ht ...
- 高级软件工程第二次作业
1.Github地址 xinz 2.解题思路: 一开始拿到这道题的时候,对数独的概念不是那么清晰.通过题目中百度百科的概念,即被概括成满足以下三个条件的数字范围为1-9的棋盘:(1)每一行不能有重复的 ...
- 软件工程第二次作业——模仿主流网站:搜狗输入法
源码链接:https://gitee.com/tangjiahao/2017_software_engineering.git 原网页链接:https://pinyin.sogou.com/ 原网站: ...
最新文章
- 广东省计算机行业发展程度,广东省统计局-2020年1-4月广东规模以上工业生产运行简况...
- java当中日期类的相关操作(学习笔记)
- docker php nginx,docker 构建nginx + php
- 【Matplotlib】【Python】如何使用matplotlib绘制折现图
- 分析称2015年手机文娱将激增至540亿美元
- SSM 封装base(二) -封装分页
- 关于sqlite断电或者存储空间不足造成的数据文件损坏问题-转
- cloudare mysql 密码修改_ubuntu18.04安装mysql,开启远程登录,修改默认端口
- svn创建分支的做法
- java长连接_java如何实现http长连接
- 宇宙最强API接口调试工具Apipost
- Python图形处理
- [CTF从0到1学习] 一、CTF 概述
- 计算机的cpu占用到多少会卡,CPU占用100%!PC卡顿原来可以这么解决:多场景多任务也流畅...
- parameterType的用法
- 【读书笔记】数据化管理:洞悉零售及电子商务运营
- 1.1.4 分支, if, if else, if elseif else, switch,循环,for,break,continue,双重for,while, do while
- Git的基本概念和SourceTree的使用
- 2017-10-17离线赛
- 【openlayer2】清理图层OpenLayers.Layer.WMS
热门文章
- 总资产=净资产+负债,负债当然是资产
- js页面设置与打印(页眉页脚,页边距设置)
- mysql数据库中 索引的作用是什么意思_什么是数据库索引,索引有什么作用
- Windows编程---句柄
- java primitive types_Java中的原始类型(Primitive Types)与引用类型(Reference Values)...
- 〖大前端 - 基础入门三大核心之 html 篇⑧〗- 无序列表
- labview 的小波包变换工具包使用(一)(开发环境介绍)
- 这个图可以搜藏,嘎嘎嘎
- 香港动态ip服务器有哪些优点
- TAQ服务器npc多久自动交物资,魔兽世界怀旧服:TAQ开门任务进度 奥罗物资交齐 你的服怎样了?...