2012-12-13 14:43
中南大学
实时游戏的设计及实现
学院:信息科学与工程学院
班级:XXXXXXX
姓名:XX
学号:XX
-
摘要
本文将通过对实时游戏的研究与分析,建立出一套实现实时游戏的设计方法与通用框架,并将实现一个游戏实例《装甲之战》。
-
引言
随着电子计算机与互联网的高速发展,游戏产业不断壮大,研究与设计游戏已成为迫切需要。本文主要探讨游戏的设计方法与实现方式,游戏的经济效应与社会效应不在本文的探讨之内。
-
正文
实时游戏是指能实时接收用户输入、及时进行处理并实时输出的游戏。实时游戏产生于上世纪八十年代,并一直发展至今。实时游戏的硬件需求较高,其发展依靠硬件技术的进步。
实时游戏的大致流程为:输入→运算→输出。其主要模块包括:用户界面、游戏逻辑、流程控制、输出模块。其中用户界面可以分为主菜单、显示信息、操作元素等子模块,输入信息包括鼠标输入、键盘输入;游戏逻辑可以分为AI、碰撞检测、运动等子模块;输出模块则负责画面的绘制、更新以及音频的输出。
其运行步骤大致如下图所示:
以《装甲之战》为例,现介绍各模块的实现方法,采用的程序设计语言:C语言,编译环境:VC++6.0。
初始化:设计函数Init();1、进行全局变量的赋值。2、加载配置文件,并将配置信息保存到全局变量中。3、用户窗口的建立以及绘图的初始化。
用户界面:1、Logo的设计:用一张较大的图片,在初始化工作完成之后,将图片显示于窗体之上,并延长一段时间。2、主菜单的显示:设计函数ShowMenu(),负责根据用户的输入来进行选项的变更以及动作的执行。3、输出信息与几面元素函数ShowInfo():主要负责在游戏进行时设置控制按钮以及显示用户信息。
输入模块:通过调用WinAPI函数GetAsnyKey()来获取指定按钮的状态,并将此信息反馈给流程控制模块,由流程控制模块分析并处理。
游戏逻辑:1、人工智能:先检查对方坦克的位置,得出坐标差值,调整运动方向或执行其他动作。2、碰撞检测:判断各元素是否碰撞到其他物体或动作是否有效。3、运动:用于移动各元素以及执行各种动作。
输出模块:先将各元素的图画绘制到缓冲页面中,再将缓冲页面复制到显示屏上,也即双缓冲技术。此举是为了避免游戏时的闪烁。同时利用WinAPI函数PlaySound()输出相应的音频;
游戏的程序框架至此已基本形成,对各个子模块进行编码即可完成游戏的程序部分。
游戏源代码概览:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
int
APIENTRY WinMain(……)
{ ……
//调用初始化函数
……
//消息循环获取
}
LRESULT
CALLBACK WndProc(
HWND
hWnd,
UINT
message,
WPARAM
wParam,
LPARAM
lParam)
{……
//消息处理
}
void
Init(
HINSTANCE
hInstance,
int
nCmdShow)
{ ……
//全局变量初始化
……
//配置文件初始化
……
//窗口初始化
……
//绘图初始化
}
void
ShowMenu()……
//显示菜单
void
SaveProgress()……
//保存进度
void
LoadProgress()……
//读取进度
void
GameLoop()
//游戏流程控制
{
switch
(g_gamestate)
{
case
……
//游戏状态处理
}
}
void
GameRun()
//游戏运行的控制函数……
void
GameAI (
int
*x,
int
*y,
struct
tpTank *tank)……
//人工智能
void
TankEvent()……
//装甲事件处理
{ ……
//移动坦克
……
//地图碰撞检测
……
//地图碰撞检测
……
//坦克间碰撞检测
}
void
CreateGun(
struct
tpTank *tank)……
//制造子弹采用链表等数据结构
void
GunEvent()
//子弹事件处理
{
……
//移动子弹
……
//子弹碰撞边界
……
//子弹碰撞检测:坦克
……
//子弹碰撞检测:地图
}
void
GameDraw()
//绘图函数
{
……
//视窗控制
……
//画背景
……
//画地图
……
//画坦克
……
//画子弹
……
//画动画
}
int
StartAni(
int
index,
int
x,
int
y,
enum
E_ANISTATE state)
{
……
//动画播放控制
}
void
Destroy()……
//释放内存
void
OnError(
char
info[],
enum
E_EORROR err)……
//错误处理
|
游戏图片制作:采用Painter和PhotoShop分别进行创作和后期加工。
游戏声音制作:采集游戏所需的各种声音,利用声音处理软件进行截取与加工。
至此,一个完整的实时视频游戏完成了。
游戏运行效果图:
-
致谢
对指导论文写作的新生课老师和对程序设计及素材提供帮助的人士表示感谢!
参考文献:《Windows程序设计》、《Windows游戏编程大师技巧》。
游戏中部分图片及声音的来源于互联网。