LabWindows/CVI虚拟仪器设计技术场景与游戏设计之: 打蜜蜂
//游戏结束面板
void popmessage (void)
{
pophandle = LoadPanel (0, "bee.uir", PANEL_POP);
//以模态对话框形式显示游戏结束面板
InstallPopup (pophandle);
}
//异步定时器回调函数
int CVICALLBACK keystroke(int reserved, int timerId, int event, void *callbackData, int eventData1, int
eventData2)
{
int left;
int right;
int up;
int down;
int a;
switch (event)
{
case EVENT_TIMER_TICK:
// 获得虚拟键↑↓←→的按键状态,以及是否按下a 键
right = GetAsyncKeyState(VK_RIGHT);
left = GetAsyncKeyState(VK_LEFT);
up = GetAsyncKeyState(VK_UP);
down = GetAsyncKeyState(VK_DOWN);
a = GetAsyncKeyState('A');
// 向左移动
if (left != 0)
{
SetCtrlAttribute (panelHandle, PANEL_PICTURE_GUN, ATTR_LEFT, gun.left–2);
}
// 向右移动
if (right != 0)
{
SetCtrlAttribute (panelHandle, PANEL_PICTURE_GUN, ATTR_LEFT, gun.left+2);
}
// 向上移动
if (up != 0)
{
SetCtrlAttribute (panelHandle, PANEL_PICTURE_GUN, ATTR_TOP, gun.top–2);
}
// 向下移动
if (down != 0)
{
SetCtrlAttribute (panelHandle, PANEL_PICTURE_GUN, ATTR_TOP, gun.top+2);
}
// 按下a 键,发射子弹
if (a && (!shootflag))
{
SetCtrlAttribute (panelHandle, PANEL_PICTURE_BULLET, ATTR_LEFT, gun.left+gun.
width/2–8);
SetCtrlAttribute (panelHandle, PANEL_PICTURE_BULLET, ATTR_TOP, gun.top);
SetCtrlAttribute (panelHandle, PANEL_PICTURE_BULLET, ATTR_VISIBLE, 1);
sndPlaySound("bullet.wav", SND_SYNC);
shootflag = 1;
}
break;
}
return 0;
}
(3) 程序注释
① sndPlaySound 函数播放指定音频文件。此函数为PlaySound 函数的子集,主要是为保持向后兼容而设置。文件声明在mmsystem.h 中,导入库为winmm.lib 。函数原型为:
BOOL sndPlaySound(LPCSTR lpszSound, UINT fuSound);
lpszSound :指定播放音频文件名,该参数可以是WAVE 文件名或是在系统注册表WIN.INI
中定义的系统事件音频文件。如果该参数设置为NULL 则停止正在播放的音频文件。fuSound:播放标志。
播放标志说明如表4-10 所示。
表4-10 播放标志说明
常量名 | 常量值 | 说明 |
SND_ASYNC | 0x0001 | 用异步方式播放音频文件 |
SND_LOOP | 0x0008 | 重复播放音频文件,与SND_ASYNC 标志同时使用 |
SND_MEMORY | 0x0004 | 播放载入到内存中的音频文件 |
SND_NODEFAULT | 0x0002 | 不播放缺省音频文件 |
SND_NOSTOP | 0x0010 | 立即播放音频文件 |
SND_SYNC | 0x0000 | 同步播放音频文件 |
返回值:成功返回True ,否则返回False 。
② GetAsyncKeyState 函数判断按键是处于按下状态,还是处于弹起状态。函数原型为:
SHORT GetAsyncKeyState(int vKey);
vKey:虚拟键值。
返回值:返回指定键是否处于按下状态,若为1,则键被按下,否则为弹起状态。
③ GetKeyPressEventVirtualKey 函数当回调函数响应EVENT_KEYPRESS 事件时,调用GetKeyPressEventVirtualKey 函数获得虚拟键值。如果回调函数eventData1 参数包含字符而非虚拟键时,函数返回0 值。函数原型为:
int GetKeyPressEventVirtualKey (int eventData2); eventData2 :面板或控件回调函数的eventData2 参数。
返回值:返回虚拟键值,如有非虚拟键按下,返回0。
④ GetKeyPressEventCharacter 函数当回调函数响应EVENT_KEYPRESS 事件时,调用GetKeyPressEventCharacter 函数获得按键字符。如果回调函数eventData1 参数包含虚拟键而非字符时,函数返回0 值。函数原型为:
int GetKeyPressEventCharacter (int eventData2);
eventData2 :面板或控件回调函数eventData2 参数。
返回值:返回字符值,如有非字符按下,返回0。
⑤ InstallPopup 函数显示模态对话框。函数原型
LabWindows 虚拟仪器 CVI 场景 游戏 相关文章:
- 用于雷达测试和验证的自动化测试设备(05-15)
- 基于LabWindows的录波分析仪的设计(03-01)
- LabWindows/CVI虚拟仪器设计技术基本控件使用之: Tab 控件(11-13)
- LabWindows/CVI虚拟仪器设计技术场景与游戏设计之:时钟制作(11-13)
- LabWindows/CVI虚拟仪器设计技术场景与游戏设计之: 下雪场景(11-13)
- LabWindows/CVI虚拟仪器设计技术基本控件使用之:回调函数(11-13)