结合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. 软件工程 第二周作业

    ##软件工程第二周作业 提出问题 1. 一般来说,想要自己的程序跑得又快又好,就要减少函数的反复调用,但有所得则必有所失,效能提高就有可能伴随着程序的稳定性的降低,这两者应该如何权衡呢? 2. 关于5 ...

  2. 软件工程第二次作业——模仿网站

    我以我的JS发誓 我以我的解释器宣告 将世界上所有的HTML汇聚 将世界上应有之css样式改变 集中所有的解释器和JS 将这网页为我所用 the Teleport Ultra 倾听我内心的愿望 让它实 ...

  3. 软件工程第二次作业:基于Unity的3D魔方实现

    基于Unity的3D魔方实现 王化明(2012211757).吴静(2012211523)  一.背景: 魔方,英文名为Rubik's Cube,又叫魔术方块,也称鲁比克方块.是匈牙利布达佩斯建筑学院 ...

  4. 北航2022软件工程第二次作业——产品评测、分析与规划

    软件工程第二次分析作业 项目 内容 这个作业属于哪个课程 北京航空航天大学2022春季软件工程(罗杰 任健) 这个作业的要求在哪里 个人阅读作业-软件案例分析 我在这个课程的目标是 学习软件工程的基础 ...

  5. 2022OUC软件工程第二次作业-08组

    第二次作业:深度学习基础 一.金知霖 一.视频学习心得及问题总结 人工智能:使一部机器像人一样进行感知.认知.决策.执行的人工程序或系统 人工智能三个层面:计算智能.感知智能.认知智能 机器学习的定义 ...

  6. 现代软件工程第二次作业-github初使用及CanTool需求文档

    作业要求: 完成下面的题目,并在小组博客中写出整个操作过程及学习心得(图文并茂):(每人都要在小组博客中写出来,并注明姓名) 1.参照 http://www.cnblogs.com/xinz/p/38 ...

  7. 软件工程第二次作业完整版

    一.成员 李晓晨 1500802116 马荣贞 1500802105 二.伙伴链接 http://www.cnblogs.com/marongzhen/p/6842061.html 二.代码链接 ht ...

  8. 高级软件工程第二次作业

    1.Github地址 xinz 2.解题思路: 一开始拿到这道题的时候,对数独的概念不是那么清晰.通过题目中百度百科的概念,即被概括成满足以下三个条件的数字范围为1-9的棋盘:(1)每一行不能有重复的 ...

  9. 软件工程第二次作业——模仿主流网站:搜狗输入法

    源码链接:https://gitee.com/tangjiahao/2017_software_engineering.git 原网页链接:https://pinyin.sogou.com/ 原网站: ...

最新文章

  1. 广东省计算机行业发展程度,广东省统计局-2020年1-4月广东规模以上工业生产运行简况...
  2. java当中日期类的相关操作(学习笔记)
  3. docker php nginx,docker 构建nginx + php
  4. 【Matplotlib】【Python】如何使用matplotlib绘制折现图
  5. 分析称2015年手机文娱将激增至540亿美元
  6. SSM 封装base(二) -封装分页
  7. 关于sqlite断电或者存储空间不足造成的数据文件损坏问题-转
  8. cloudare mysql 密码修改_ubuntu18.04安装mysql,开启远程登录,修改默认端口
  9. svn创建分支的做法
  10. java长连接_java如何实现http长连接
  11. 宇宙最强API接口调试工具Apipost
  12. Python图形处理
  13. [CTF从0到1学习] 一、CTF 概述
  14. 计算机的cpu占用到多少会卡,CPU占用100%!PC卡顿原来可以这么解决:多场景多任务也流畅...
  15. parameterType的用法
  16. 【读书笔记】数据化管理:洞悉零售及电子商务运营
  17. 1.1.4 分支, if, if else, if elseif else, switch,循环,for,break,continue,双重for,while, do while
  18. Git的基本概念和SourceTree的使用
  19. 2017-10-17离线赛
  20. 【openlayer2】清理图层OpenLayers.Layer.WMS

热门文章

  1. 总资产=净资产+负债,负债当然是资产
  2. js页面设置与打印(页眉页脚,页边距设置)
  3. mysql数据库中 索引的作用是什么意思_什么是数据库索引,索引有什么作用
  4. Windows编程---句柄
  5. java primitive types_Java中的原始类型(Primitive Types)与引用类型(Reference Values)...
  6. 〖大前端 - 基础入门三大核心之 html 篇⑧〗- 无序列表
  7. labview 的小波包变换工具包使用(一)(开发环境介绍)
  8. 这个图可以搜藏,嘎嘎嘎
  9. 香港动态ip服务器有哪些优点
  10. TAQ服务器npc多久自动交物资,魔兽世界怀旧服:TAQ开门任务进度 奥罗物资交齐 你的服怎样了?...