⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 game.c

📁 飞机游戏
💻 C
📖 第 1 页 / 共 5 页
字号:
/******************************************************************/
/*  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 + -