论文部分内容阅读
[摘要]随着嵌入式技术及手机互联网技术的发展,手机游戏业也进入了一个新的网络游戏时代。好多大学设置了嵌入式游戏设计课程,在嵌入式平台上设计了沙壶球游戏,介绍了该游戏的设计思路及设计算法,物体的变速运动算法和碰撞检测算法,模仿现实世界的沙壶球游戏,实现出一个双人对战的电子游戏。对培养适应社会需求的嵌入式技术人才有着重要意义。
[关键词]嵌入式技术沙壶球游戏课程设计
[中图分类号]G434 [文献标识码]A一、引言
嵌入式系统设计涵盖了嵌入式系统开发中的设备驱动程序设计、控件设计、管理软件设计及游戏软件设计等内容。随着手机、PAD、智能电子产品等嵌入式设备与网络的优良结合,使嵌入式游戏市场进一步扩大[1]。作为一种休闲活动,沙壶球起源于15世纪英国,老少皆宜,在中国大地逐渐风靡。将沙壶球、嵌入式技术以及电子游戏相结合,使用标准C语言,开发出一款嵌入式系统环境下的电子沙壶球游戏,便是嵌入式沙壶球游戏设计的目标。沙壶球游戏具有一定技巧性,在速度、力量、变化性及竞争性方面都极具挑战[2]。沙壶球游戏主要分为直滑式和反弹式两大类。本次设计主要实现直滑式游戏。
二、嵌入式沙壶球游戏概述
开球方球手向球桌的另一端推出他的第一枚球,第二位球手以同样方式也推出他的第一枚球,并设法将对手的球击落或超过对手的球。双方交替出球,直到8枚球全部推出,至此,一轮比赛结束。推出最远球的球手为本轮的胜方,计算分值。下面介绍沙壶球游戏的设计方法。
1.界面显示,主要负责用户可见的各种界面元素的显示及处理。
2.运动仿真及相关检测、处理部分,这是整个程序的核心部分。它主要负责游戏中各种运动的仿真计算及相关的检测计算、处理等。
下面显示了沙壶球游戏设计的流程图,如图1所示。
三、沙壶球游戏算法部分
1.数学建模
这个游戏需要完成的是对现实生活中的沙壶球游戏进行仿真[3]。现实中的沙壶球游戏最重要的就是其运动以及碰撞的物理过程,要对它进行电子游戏仿真,关键就是要将其物理过程数字化,并对这些数字加以计算、处理,最后达到真实模拟其物理过程的目的。实际上,对现实中沙壶球游戏的物理过程进行数字化并处理,也就是对其进行数学建模。
图1:沙壶球游戏设计的流程图
游戏中涉及到的物理过程,大都可以利用物理学中的力学和运动学公式加以解决。在该游戏的设计中,用到的物理学公式大致有:
(1) (矢量式)
(2)(矢量式)
(3)vt2-v02=2*a*s(标量式)
(4)动能守恒定律:
(标量式)
(5)动量守恒定律:
(矢量式)
其中, (矢量)、v0(标量,只取大小不取方向)为初速度,
(矢量)、vt(标量,只取大小不取方向)为末速度,(矢量),a(标量,只取大小不取方向)为加速度,t为时间,
(矢量),s(标量,只取大小不取方向)为位移,m0、m1、m2等为质量,其它(矢量)、(矢量)等均为速度。
就目前这个沙壶球游戏来说,需要考虑设定的数值包括:最大出手速度(对应力量槽的最大值),最小出手速度(对应力量槽的最小值),最佳出手速度(对应力量槽的一个值)以及摩擦阻力加速度等。首先选定的是最佳出手速度,考虑使用8.0象素/帧,其它的数值均以此值为基础进行设定。考虑8象素/帧的最佳出手速度应使沙壶球正好到达球桌远端边缘,并考虑球桌的全长大约400象素(实际为440象素),由公式vt2-v02=2*a*s,计算出摩擦阻力加速度大约为0.08象素/帧2,方向与沙壶球运动方向相反。接着需要设定的是最小出手速度。考虑应使游戏有机会进入游戏出球结束画面,那么最小出手速度应该设定为沙壶球恰好可以在球桌上滑行到中间位置的速度(即大约滑行220象素的速度)。再次由公式vt2-v02=2*a*s,并带入已计算出并设定好的摩擦阻力加速度0.08象素/帧2,考虑角度偏差后,可得最小出手速度大约为6.2象素/帧。最后剩下的是最大出手速度。由于沙壶球在出手速度超过最佳出手速度时将跌落球槽中,所以这个值的设定只需比最佳出手速度大些即可,考虑使最佳出手速度位于力量槽中部,故选定最大出手速度为10.0象素/帧。
2.编程思想
(1)沙壶球的数据结构
typedef struct tagBALL {
int x,y; //球心坐标
float vX,vY; //x,y向速度
float aX,aY; //x,y向加速度
float angle; //球的移动角度
int movable; // 1可移动,0不可移动
int visible; // 1可见,0不可见
U8* bmpBall; //沙壶球图片
}BALL,*PBALL; //沙壶球结构
(2)发球角度的设定
图2中deltaX为发球方向与球的x坐标之差。
α=arctan(425/deltaX)。
在对球的初始化中可知,球的初始位置与桌底相距15px,故deltaY为(440-15)px。
图2:发球角度图
(3)发球力度的设定
在指定的位置显示一个力量槽,力量的值会增减往复变化,即力量槽中黑色填充部分的大小会不断变化[4]。发球力度函数的参数是力量的最大值和最小值。其返回值一定处于这两个值之间。它是根据力量槽的高度、力量槽的最大最小值的差及黑色填充部分的大小按比例计算出来的。
(4)初速度、加速度的正交分解
图3中,v为由发球力度函数获得的力量值,α为由发球角度函数获得的发球角度。
则vx=vcosα; vy=vsinα
则有:ax=acosα; ay=asinα
图3:初速度、加速度的正交分解图
(5)碰撞检测
当两球的球心距d≤2r时可判定两个球相撞。图4为碰撞后两球碰撞行为处理。
图4:碰撞后位置算法图
图4中v0为入射球的速度,v1、v2为碰后两球的速度。
Angle = pBall->Angle-ball[i].Angle
由知,v1=v0sin(Angle),v2=v0cos(Angle)
求出二球碰后的速度大小后,再进行正交分解,可得到它们的x向及y向分量。
四、总结
嵌入式游戏的表现力已经不输于大型机,不再是几种色彩的几何图形变化,多媒体的发展使游戏多样化。人们从游戏中可以得到视觉、听觉甚至触觉的感官刺激,如果将来新的技术可以带来新的感官刺激,它将很快运用到游戏技术中(比如全息摄像技术和全角度摄像技术)。所以将来必定出现大量的嵌入式游戏开发商,将嵌入式技术应用到游戏中,使游戏的操作更方便,感觉更逼真。
基金项目:北京信息科技大学《嵌入式系统及安全》课程建设项目
[参考文献]
[1]胡昭民.游戏设计概论(第3版).北京:清华大学出版社,2011
[2](美)Scott Jacobs.游戏编程精粹7[M].北京:北人民邮电出版社,2010
[3]王小妮、魏桂英、杨根兴.嵌入式组件设计[M].北京航空航天大学出版社,2012
[4](美)Andrew Binstock. 程序员实用算法[M]. 北京:机械工业出版社,2009
(作者单位:北京信息科技大学 理学院 北京)