📄 game.c
字号:
/******************************************************************/
/* Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved. */
/*******************************************************************
File : game.c
Desc : 游戏
Author : liaochaoyang
Date : 2007-08-27
Notes :
$Log: game.c,v $
Revision 1.2 2008/06/19 04:42:26 Administrator
代码整理!
Revision 1.1.1.1 2008/05/07 04:14:50 Administrator
no message
Revision 1.1.1.1 2008/03/06 13:28:24 Lingzhaojun
no message
Revision 1.14 2008/01/10 09:25:30 Lingzhaojun
发布0110版本
Revision 1.13 2008/01/09 08:13:20 Liaochaoyang
no message
Revision 1.12 2008/01/08 09:49:27 Lingzhaojun
合并蓝魔970代码
Revision 1.11 2008/01/04 08:20:53 Liaochaoyang
修改了按键
Revision 1.10 2007/12/29 01:56:15 Liaochaoyang
no message
Revision 1.9 2007/11/08 07:50:24 Xiebangwang
修改了游戏按键 根据测试出来的问题进行了更新
Revision 1.8 2007/10/31 12:35:55 Liaochaoyang
修改了暂停处理以及退出时的bugs
Revision 1.7 2007/10/31 04:03:11 Liaochaoyang
添加了itoa函数的实现 修改了游戏分数的显示
Revision 1.6 2007/10/30 13:24:22 Liaochaoyang
修改了随机数的产生机制!
Revision 1.5 2007/10/29 12:55:55 Liaochaoyang
去掉了ARM编译时的warning
修改了板子上运行时不能进入中间选项的bugs
Revision 1.4 2007/10/12 02:48:45 Liaochaoyang
no message
Revision 1.3 2007/10/09 09:17:42 Lingzhaojun
统一整理GUI头文件的包含,只包含"guictrl\Gui.h"即可引用GUI全部资源
Revision 1.2 2007/10/08 02:19:54 Lingzhaojun
添加CVS版本自动注释脚本
*********************************************************************/
#include "include.h"
#include "game.h"
#include "guictrl\Gui.h"
#include "..\application\game\fly\game.h"
#include "..\system\gui\window.h"
#include "..\..\system\gui\guidisp.h"
#include "stdlib.h"
extern WINDOW_PROCREG GameFlyProcMap[];
extern IMAGE_BMPDATA gGuiDspBmpHead ;
extern PWINDOW gGuiDspCurrUpdateWindow;
HTIMER FlyTimer;
//INT32U IGuiDspGetBmpIDHead( PROCHANDLE procHandle ,INT16U ID ,INT32U *size);
void DrawBmpIdExH2V(INT16S x, INT16S y, INT16U id ,
UHRECT *srcRect, DispMode xTransp)
{
INT16S tmpx;
if (srcRect != NULL)
{
UHRECT tmpRect;
IMAGE_BMPDATA bmpInfo;
PROCHANDLE procHandle = GuiDspGetWindowResProc(gGuiDspCurrUpdateWindow , id);
#if 0
PROCHANDLE procHandle;
INT32U bmpDataOffset;
procHandle = GuiDspGetWindowResProc(gGuiDspCurrUpdateWindow , id);
if (procHandle == INVALID_PHANDLE)
return;
//获取高度和宽度
if ((bmpDataOffset = IGuiDspGetBmpIDHead(procHandle , id , size)) == 0)
return;
#endif
GetBmpHeadWidth(procHandle, id , &bmpInfo); //获取一张图片的宽和高
tmpRect.h = srcRect->w;
tmpRect.w = srcRect->h;
tmpRect.x = srcRect->y;
tmpRect.y = bmpInfo.h - srcRect->x - srcRect->w;
//tmpx = (x - srcRect->w);
tmpx = 240 - x - srcRect->w ;
if (tmpx < 0)
{
//----
tmpRect.y += (0 - tmpx);
tmpRect.h -= (0 - tmpx);
//----
tmpx = 0;
}
if (tmpx > 240)
return;
DrawBmpIdEx(y, tmpx , id ,
&tmpRect, xTransp);
}
else
{
IMAGE_BMPDATA bmpInfo;
PROCHANDLE procHandle = GuiDspGetWindowResProc(gGuiDspCurrUpdateWindow , id);
#if 0
PROCHANDLE procHandle;
INT32U bmpDataOffset;
e
procHandle = GuiDspGetWindowResProc(gGuiDspCurrUpdateWindow , id);
if (procHandle == INVALID_PHANDLE)
return;
//获取高度和宽度
if ((bmpDataOffset = IGuiDspGetBmpIDHead(procHandle , id , size)) == 0)
return;
#endif
//tmpx = x - gGuiDspBmpHead.w ;
GetBmpHeadWidth(procHandle, id , &bmpInfo);
tmpx = 240 - x - bmpInfo.w;
//*
if (tmpx < 0)
tmpx = 0;
//*/
if (tmpx > 240)
return;
DrawBmpIdEx(y, tmpx , id ,
NULL , xTransp);
}
}
void DrawBmpIdH2V(INT16S x, INT16S y, INT16U id, UHRECT *noused, DispMode nouse)
{
//PROCHANDLE procHandle;
//INT32U bmpDataOffset;
INT16S tmpx;
IMAGE_BMPDATA bmpInfo;
PROCHANDLE procHandle = GuiDspGetWindowResProc(gGuiDspCurrUpdateWindow , id);
#if 0
procHandle = GuiDspGetWindowResProc(gGuiDspCurrUpdateWindow , id);
if (procHandle == INVALID_PHANDLE)
return;
//获取高度和宽度
if ((bmpDataOffset = IGuiDspGetBmpIDHead(procHandle , id)) == 0)
return;
#endif
GetBmpHeadWidth(procHandle, id , &bmpInfo);
//tmpx = x - gGuiDspBmpHead.w;
tmpx = 240 - x - bmpInfo.w;
if (tmpx < 0) tmpx = 0;
DrawBmpIdEx(y, tmpx, id ,
NULL , nouse);
}
#ifdef FLY_DEBUG
GT_U32 gFly_Debug_StringNum;
#endif
//声音
/*MIXERCONTEXT g_GameSound[MAX_MIXER_CHANNEL];
INT16S g_SoundBuf[BufCnt][SoundBufLenW*2];
INT8U g_SoundBufIdx;
INT16S gChannelBuf[SoundBufLenW];
FLYSOUND gFlySound;
INT16U gSoundIdx;*/
//秘籍
GT_U8 gFly_GameSecret[10]; //秘籍输入
GT_U8 gFly_GameSecretControl; //秘籍输入计数
GT_U8 gFly_GameSecretNum; //当前使用的秘籍
GT_U8 gFly_SaveInfo[FLY_SAVE_FILE_LEN];
GT_U8 gFly_SaveName;
GT_U8 gFly_SaveLevel;
BOOLEAN gFly_KeyMap[7];
GT_BOOL gFly_Timer; // 定时器
GT_U16 gFly_BackScrLen; //背景长度
GT_U16 gFly_TempDelay; //游戏延时变量
GT_U8 gFly_BombDeday; //保险动画控制
GT_U8 gFly_Mission; //当前关数
GT_BOOL gFly_MissionComplete; //通关
GT_U32 gFly_PlayerScore; //游戏积分
GT_U16 gFly_ScrCount; //屏幕移动控制
GT_U16 gFly_BackScr ; //背景偏移量
GT_U8 gFly_GamPause; //游戏暂停设置
GT_BOOL gFly_GameOver; //游戏结束
GT_BOOL gFly_Save; //积分保存标志
GT_BOOL gFly_GameFinish; //游戏完成
GT_U8 gFly_EnemyMissionNum; //载入对应关
GT_S8 gFly_ContinueNum; //允许继续次数
GT_BOOL gFly_EneMake; //是否允许出现敌人
GT_S8 gFly_EneCnt; //敌人个数控制
GT_U16 gFly_AppearEneCnt; //出现敌人个数控制
GT_U8 gFly_BulletCnt; //出现子弹个数控制
GT_U8 gFly_BlaPtCnt; //出现爆炸个数控制
GT_U8 gFly_GoodsCnt; //出现物品个数控制
GT_U8 gFly_MisBulletCnt; //出现导弹个数控制
GT_U8 gFly_CurMisBulletNum; //当前可发射导弹个数
GT_U8 gFly_MisBulletType; //导弹类型
GT_U8 gFly_PlyerInit; //玩家初始化 短暂无敌
GT_BOOL gFly_PlyerDestroy; //玩家飞机是否摧毁
GT_U8 gFly_AppearType; //已经出现的敌人类型
GT_BOOL gFly_BossAppear; //出现BOSS标志
GT_S8 gFly_BossIdx; //BOSS索引号
GT_U8 gFly_BossActPart; //BOSS移动步骤
GT_BOOL gFly_DirectionInit; //BOSS起始方向
GT_U8 gFly_BossBulletDirection1; //BOSS固定方向子弹的发射方向(第1个发射点)
GT_U8 gFly_BossBulletDirection2; //BOSS固定方向子弹的发射方向(第2个发射点)
GT_U8 gFly_BossBulletDirection3; //BOSS固定方向子弹的发射方向(第3个发射点)
GT_S8 gFly_BossMoveDownY; //BOSS上下移动范围
GT_S8 gFly_BossMoveUpY; //BOSS上下移动范围
GT_U8 gFly_CurBossBulletNum; //BOSS最大子弹序列数
GT_U8 gFly_CurBossShootNum; //当前发射子弹个数
GT_U16 gFly_BossShootDelay; //发射延时
GT_U8 gFly_FireDelayControl; //射击延时
GT_U8 gFly_PlayerOtherBomb; //其它种类BOMB
FLY_ENEMY gFly_Enemy[FLY_ENEMY_MAX]; //敌人
FLY_BULLET gFly_Bullet[FLY_BULLET_MAX]; //子弹
FLY_MISBULLET gFly_MisBullet[FLY_MISBULLET_MAX]; //导弹
FLY_BLAST gFly_BlastPt[FLY_BLAST_MAX]; //爆炸
FLY_GOODS gFly_Goods[FLY_GOODS_MAX]; //物品
GT_U8 gFly_SelectPlayer; //当前选择的玩家
FLY_PLAYER gFly_Player; //玩家
FLY_BOMB gFly_Bomb; //保险
GT_U8 gFly_BombType[FLY_BOMB_MAX]; //拥有保险的类型
GT_BOOL gFly_BombFlag; //保险释放中
GT_BOOL gFly_Shoot_SL[FLY_ENEMY_MAX]; //敌人是否连射
GT_U8 gFly_ShootNum_SL[FLY_ENEMY_MAX]; //当前连射个数
GT_BOOL gFly_PlayerFire; //玩家开火\射击标志
// GT_BOOL gFly_MemFree; //内存检测
GT_U8 gFly_Alarm; //闹钟检测
GT_U8 gFly_ShowScore[9]; //积分
int ok_OR_PAUSE;
//选项
GT_S8 gFly_Select; //进入的选项
GT_BOOL gFly_SelectCyc; //闪耀控制
GT_U8 gFly_SelectHelp; //选择帮助还是排行榜选项
GT_S8 gFly_MissionAct; //动画控制变量
GT_U8 gFly_OptionsSelect; //游戏设置选项控制
GT_U8 gFly_GameLevel; //游戏难度
GT_U8 gFly_GameCurLevel; //当前游戏难度
GT_U8 gFly_soundState; //游戏声音状态
GT_U8 gFly_soundCurState; //当前游戏声音状态
GT_U8 gFly_soundValve; //游戏声音等级
GT_U8 gFly_soundCurValve; //当前游戏声音等级
GT_BOOL gFly_OptionsOK; //确认
GT_BOOL gFly_OptionsCancel; //退出
GT_BOOL gFly_saveOptionsInfo; //是否保存
GT_BOOL gFly_SoundFile; //是否存在声音文件
GT_BOOL gFly_PressKey; //按键弹起/按下控制(改BUG用)
//Buffer图象
GT_U16 gFly_ShowPlayerLife[8*8]; //生命图标
GT_U16 gFly_ShowPlayerBomb[3][8*8]; //保险图标
GT_U16 gFly_EnemyBullet[7948]; //子弹
GT_U16 gFly_EnemyBulletOffset[62]; //每颗子弹在数组中的偏移
GT_U16 gFly_EnemyBlast[8][14*12]; //两个小爆炸
//显示图象资源ID
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -