实时游戏的设计及实现

新生课论文

 2012-12-13 14:43

 

中南大学

 

实时游戏的设计及实现

 

 

 

 

 

 

 



学院:信息科学与工程学院

班级:XXXXXXX

姓名:XX

学号:XX 



 

 

  • 摘要

本文将通过对实时游戏的研究与分析,建立出一套实现实时游戏的设计方法与通用框架,并将实现一个游戏实例《装甲之战》。

  • 引言

随着电子计算机与互联网的高速发展,游戏产业不断壮大,研究与设计游戏已成为迫切需要。本文主要探讨游戏的设计方法与实现方式,游戏的经济效应与社会效应不在本文的探讨之内。

  • 正文

实时游戏是指能实时接收用户输入、及时进行处理并实时输出的游戏。实时游戏产生于上世纪八十年代,并一直发展至今。实时游戏的硬件需求较高,其发展依靠硬件技术的进步。

实时游戏的大致流程为:输入→运算→输出。其主要模块包括:用户界面、游戏逻辑、流程控制、输出模块。其中用户界面可以分为主菜单、显示信息、操作元素等子模块,输入信息包括鼠标输入、键盘输入;游戏逻辑可以分为AI、碰撞检测、运动等子模块;输出模块则负责画面的绘制、更新以及音频的输出。

其运行步骤大致如下图所示:


以《装甲之战》为例,现介绍各模块的实现方法,采用的程序设计语言:C语言,编译环境:VC++6.0

初始化:设计函数Init()1、进行全局变量的赋值。2、加载配置文件,并将配置信息保存到全局变量中。3、用户窗口的建立以及绘图的初始化。

用户界面:1Logo的设计:用一张较大的图片,在初始化工作完成之后,将图片显示于窗体之上,并延长一段时间。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)……  //错误处理

 

游戏图片制作:采用PainterPhotoShop分别进行创作和后期加工。

游戏声音制作:采集游戏所需的各种声音,利用声音处理软件进行截取与加工。

至此,一个完整的实时视频游戏完成了。

游戏运行效果图:

 


  • 致谢

对指导论文写作的新生课老师和对程序设计及素材提供帮助的人士表示感谢!

参考文献:《Windows程序设计》、《Windows游戏编程大师技巧》。

游戏中部分图片及声音的来源于互联网。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值