青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

coreBugZJ

此 blog 已棄。

游戲 切水果

本程序是模仿流行的水果忍者游戲,移動(dòng)鼠標(biāo),來切除空中運(yùn)動(dòng)的水果,水果為隨機(jī)生成,作自由上拋落體運(yùn)動(dòng)。被切到的水果將裂為兩半,自由落下。切除一個(gè)水果加一分,分?jǐn)?shù)在右上角顯示。炸彈會(huì)混在水果中拋出,一但切到炸彈,炸彈會(huì)爆炸,且分?jǐn)?shù)歸零。






/*
Fruit.c

Copyright (C) 2011, coreBugZJ, all rights reserved.

游戲 切水果。
使用 自己的 ImageZ 圖形庫 加載顯示圖像 ( ImageZ_201112291853 )。
支持 Win32 和 Linux 平臺(tái)。
Win32 平臺(tái)下使用 API 做界面。
Linux 平臺(tái)下使用 Xlib 做界面。
ImageZ 本身跨平臺(tái)。Win32 下提供 ImageZ.lib 和 ImageZ.dll。Linux 下提供 libImageZ.a。

玩法:鼠標(biāo)移動(dòng)即可切水果,有加分。切到雷,則分?jǐn)?shù)歸零。

版本:201112292200
*/


        /* 此宏若定義,則 Linux 平臺(tái);否則 Win32 平臺(tái) */
/* #define  FRUIT_LINUX */


#ifdef  FRUIT_LINUX
/* Linux */

#include <X11/Xlib.h>
#include <sys/time.h>
#include <signal.h>

#else /* FRUIT_LINUX */
/* Win32 */

#include <Windows.h>
#pragma comment( lib, "ImageZ.lib" )

#endif /* FRUIT_LINUX */

#include <string.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

#include "ImageZ.h"


        /* 游戲區(qū)域?qū)捀?*/
#define  BOARD_WIDTH   640
#define  BOARD_HEIGHT  480

        /* 窗口寬高 */
#define  WND_WIDTH     (BOARD_WIDTH)
#define  WND_HEIGHT    (BOARD_HEIGHT)

        /* 水果種類數(shù),即 水果信息結(jié)構(gòu)體 數(shù)組大小 */
#define  NUM_FRUIT    10
        /* 空中未被切的水果數(shù)最大值 */
#define  NUM_INFO     3
        /* 空中所有的物體數(shù)最大值,即 空中物體信息結(jié)構(gòu)體 數(shù)組大小 */
#define  NUM_INFO_H   (NUM_INFO + 256)
        /* 切割時(shí)的折線段點(diǎn)數(shù)最大值 */
#define  NUM_POINT    1024
        /* 數(shù)字 */
#define  NUM_NUMBER   10


/* 空中物體信息結(jié)構(gòu)體 標(biāo)志值 */
        /* 未使用,可分配 */
#define  FLAG_NOT_USE      0
        /* 水果 */
#define  FLAG_FRUIT        1
        /* 左半水果 */
#define  FLAG_HALF_LEFT    2
        /* 右半水果 */
#define  FLAG_HALF_RIGHT   3
        /* 雷 */
#define  FLAG_THUNDER      4
        /* 爆炸 */
#define  FLAG_CRASH        5
        /* 本結(jié)構(gòu)體正在處理中 */
#define  FLAG_DEAL         6


/* 游戲狀態(tài) */
        /* 停止 */
#define  STATE_STOP        0
        /* 運(yùn)行中 */
#define  STATE_RUNNING     1


        /* 生成的水果是雷的概率 */
#define  THUNDER_PROB      9
        /* 雷 一幀區(qū)域 */
#define  THUNDER_WIDTH      64
#define  THUNDER_HEIGHT     64
        /* 雷一行幀數(shù) */
#define  THUNDER_LINE_NUM   16
        /* 雷總幀數(shù) */
#define  THUNDER_FRAME_NUM  16

        /* 爆炸一幀區(qū)域 */
#define  CRASH_WIDTH       440
#define  CRASH_HEIGHT      300
        /* 爆炸一行幀數(shù) */
#define  CRASH_LINE_NUM    4
        /* 爆炸總幀數(shù) */
#define  CRASH_FRAME_NUM   8

        /* 幀間隔,單位 MS */
#define  DELTA_TIME        100

        /* 垂直加速度,單位 像素/幀/幀 */
#define  ACCEL_Y           4
        /* 新水果 垂直速度 最大值,單位 像素/幀 */
#define  MAX_VY            55
        /* 新水果 垂直速度 最小值,單位 像素/幀 */
#define  MIN_VY            40
        /* 新水果 水平速度 最大值的2倍,單位 像素/幀 */
#define  MAX_VX            30
        /* 水果切開后,左半 水平速度,單位 像素/幀 */
#define  LEFT_VX           (-15)
        /* 水果切開后,右半 水平速度,單位 像素/幀 */
#define  RIGHT_VX          15
        /* 水果旋轉(zhuǎn)因子,多少幀旋轉(zhuǎn)90度 */
#define  ROTATE_FACTOR     1

        /* 水果半徑,單位 像素。水果一律以圓形建模 */
#define  RADIUS       28


        /* 水果信息結(jié)構(gòu)體,用于管理水果圖片 */
struct _Fruit
{
        int     radius;              /* 半徑 */
        ImageZ  img, imgLe, imgRi;   /* 圖像 整個(gè),左半,右半 */
};
typedef  struct _Fruit  Fruit;

        /* 空中物體信息結(jié)構(gòu)體,用于管理空中物體 */
struct _Info
{
        int     px, py;    /* 位置,像素 */
        int     vx, vy;    /* 速度,像素/幀 */
        int     flag;      /* 標(biāo)志 */
        int     type;      /* 類型,即 水果信息結(jié)構(gòu)體 數(shù)組下標(biāo) */
        ImageZ  img;       /* 對(duì)應(yīng)圖片 */
};
typedef  struct _Info  Info;

        /* 顯示圖片,平臺(tái)相關(guān),分別實(shí)現(xiàn) */
#ifdef  FRUIT_LINUX
/* Linux */

        /* 顯示器信息結(jié)構(gòu)體 */
struct _Disp
{
        Display  *dsp;
        Window   wnd;
        GC       gc;
        Visual   *vis;
};
typedef  struct _Disp  Disp;
Disp  disp;

        /* 在游戲初始化前,初始化顯示器 */
void preInitGame( Display *dsp, Window wnd, GC gc, Visual *vis ) {
        disp.dsp = dsp;
        disp.wnd = wnd;
        disp.gc  = gc;
        disp.vis = vis;
}

        /* 將圖像子區(qū)域顯示在窗口子區(qū)域 */
void showImage( int dispLeft, int dispTop,
        int width, int height,
        ImageZ img, int imgLeft, int imgTop  ) {
        R32 res = displayImageZ( disp.dsp, disp.wnd,
                        disp.gc, disp.vis,
                        dispLeft, dispTop,
                        width, height,
                        img, imgLeft, imgTop  );
}

#else /* FRUIT_LINUX */
/* Win32 */

        /* 顯示器信息結(jié)構(gòu)體 */
struct _Disp
{
        HWND hWnd;
};
typedef  struct _Disp  Disp;
Disp  disp;

        /* 在游戲初始化前,初始化顯示器 */
void preInitGame( HWND hWnd ) {
        disp.hWnd = hWnd;
}

        /* 將圖像子區(qū)域顯示在窗口子區(qū)域 */
void showImage( int dispLeft, int dispTop,
        int width, int height,
        ImageZ img, int imgLeft, int imgTop  ) {
                HDC hdc = GetDC( disp.hWnd );
                R32 res = displayImageZ( hdc, dispLeft, dispTop, width, height, img, imgLeft, imgTop );
                ReleaseDC( disp.hWnd, hdc );
}

#endif /* FRUIT_LINUX */


        /* 是否正在運(yùn)行 */
int     isRunning;
        /* 游戲狀態(tài) */
int     state;
        /* 得分 */
int     score;
        /* 水果信息結(jié)構(gòu)體 數(shù)組,用于管理水果圖片 */
Fruit   fruit[ NUM_FRUIT ];
        /* 空中物體信息結(jié)構(gòu)體 數(shù)組,用于管理空中物體 */
Info    info[ NUM_INFO_H ];
        /* 切割時(shí)的折線段中的點(diǎn) */
int     ptX[ NUM_POINT ], ptY[ NUM_POINT ], ptNum;
        /* 背景圖 */
ImageZ  imgBk;
        /* 幀緩存 */
ImageZ  imgFrame;
        /* 數(shù)字 */
ImageZ  imgNum[ NUM_NUMBER ];
        /* 爆炸,此時(shí),空中物體信息結(jié)構(gòu)體 中 type 表示爆炸幀下標(biāo) */
ImageZ  imgCrash;
        /* 雷,此時(shí),空中物體信息結(jié)構(gòu)體 中 type 表示爆炸幀下標(biāo) */
ImageZ  imgThunder;
        /* 刀 */
ImageZ  imgSword;


void updateGame( int sig );

        /* 啟動(dòng)定時(shí)器 */
void initTimer() {
#ifdef  FRUIT_LINUX
/* Linux */

        struct itimerval  new_timeset;
        long   n_sec, n_usecs;

        signal( SIGALRM, updateGame );

        n_sec   = DELTA_TIME / 1000;
        n_usecs = ( DELTA_TIME % 1000 ) * 1000L;

        new_timeset.it_interval.tv_sec  = n_sec;
        new_timeset.it_interval.tv_usec = n_usecs;
        new_timeset.it_value.tv_sec     = n_sec;
        new_timeset.it_value.tv_usec    = n_usecs;

        setitimer( ITIMER_REAL, &new_timeset, NULL );

#else /* FRUIT_LINUX */
/* Win32 */

        SetTimer( disp.hWnd, 1, DELTA_TIME, NULL );
       
#endif /* FRUIT_LINUX */
}

        /* 關(guān)閉定時(shí)器 */
void cancelTimer() {
#ifdef  FRUIT_LINUX
/* Linux */

        /* defs */

#else /* FRUIT_LINUX */
/* Win32 */

        KillTimer( disp.hWnd, 1 );

#endif /* FRUIT_LINUX */
}

        /* 限定范圍的隨機(jī)數(shù) */
int randMod( int mod ) {
        if ( 1 > mod ) mod = 1;
        return rand() % mod;
}

        /* 初始化圖像 Alpha 域,因 bmp 不支持透明,視純白為透明色 */
void initAlpha( ImageZ img ) {
        U32 x, y, w, h, r, g, b, a;
        U08 *ptrimg;

#define  THRE_H  240
#define  THRE_L  120

        if ( (!isImageValidZ(img)) || (isImagePaletteUsedZ(img)) ) {
                return;
        }

        w = getImageWidthZ( img );
        h = getImageHeightZ( img );

        for ( y = 0; y < h; ++y ) {
                ptrimg = img->pPixel + y * img->linePitch;
                for ( x = 0; x < w; ++x ) {
                        b = ptrimg[ IMAGEZ_OFFSET_BLUE_Z  ];
                        g = ptrimg[ IMAGEZ_OFFSET_GREEN_Z ];
                        r = ptrimg[ IMAGEZ_OFFSET_RED_Z   ];
                        if ( (THRE_H < b) && (THRE_H < g) && (THRE_H < r) ) {
                                a = 0;
                        }
                        else {
                                a = 255;
                        }

                        ptrimg[ IMAGEZ_OFFSET_ALPHA_Z ] = (U08)(a);
                        ptrimg += IMAGEZ_COLOR_SIZE_Z;
                }
        }
#undef  THRE_L
#undef  THRE_H
}

        /* 初始化游戲 */
void initGame() {
        int i;
        char base[ 30 ] = "./Res/fruit";
        char ext[ 30 ]  = ".png";
        char lef[ 30 ]  = "left";
        char rig[ 30 ]  = "right";
        char num[ 30 ];
        char name[ 90 ] = "";

        srand( (unsigned int)time( NULL ) );

        imgBk      = createImageFromFilePngZ( "./Res/imgBk.png" );
        imgFrame   = createImageFromImageInfoZ( imgBk );
        imgCrash   = createImageFromFilePngZ( "./Res/crash.png" );
        imgThunder = createImageFromFilePngZ( "./Res/thunder.png" );
        imgSword   = createImageFromFilePngZ( "./Res/sword.png" );

        score = 0;

        ptNum = 0;

        memset( info, 0, sizeof(info) );

        memset( fruit, 0, sizeof(fruit) );
        for ( i = 0; i < NUM_FRUIT; ++i ) {
                fruit[ i ].radius = RADIUS;

                strcpy( name, base );
                sprintf( num, "%d", i );
                strcat( name, num );
                strcat( name, ext );
                fruit[ i ].img = createImageFromFilePngZ( name );

                strcpy( name, base );
                sprintf( num, "%d", i );
                strcat( name, num );
                strcat( name, lef );
                strcat( name, ext );
                fruit[ i ].imgLe = createImageFromFilePngZ( name );

                strcpy( name, base );
                sprintf( num, "%d", i );
                strcat( name, num );
                strcat( name, rig );
                strcat( name, ext );
                fruit[ i ].imgRi = createImageFromFilePngZ( name );
        }

        for ( i = 0; i < NUM_NUMBER; ++i ) {
                sprintf( name, "./Res/%d.bmp", i );
                imgNum[ i ] = createImageFromFileBmpZ( name );
                initAlpha( imgNum[ i ] );
        }

        state = STATE_RUNNING;
        isRunning = 1;
        initTimer();
}

        /* 新水果初始化 */
void initFruitInfo( Info *pInf ) {
        if ( NULL == pInf ) {
                return;
        }
        pInf->flag = FLAG_DEAL;

        destroyImageZ( pInf->img );
        pInf->img = NULL;

        pInf->px   = randMod( BOARD_WIDTH / 3 ) + BOARD_WIDTH / 6;
        pInf->py   = BOARD_HEIGHT - MAX_VY;
        pInf->vx   = randMod( MAX_VX ) - MAX_VX / 2;
        pInf->vy   = -randMod( MAX_VY - MIN_VY ) - MIN_VY;

        if ( randMod( THUNDER_PROB ) != 0 ) {
                pInf->type = randMod( NUM_FRUIT );
                pInf->img  = createImageFromImageZ( fruit[ pInf->type ].img );
                pInf->flag = FLAG_FRUIT;
        }
        else {
                pInf->type = 0;
                pInf->img  = imgThunder;
                pInf->flag = FLAG_THUNDER;
        }
}

        /* 切掉水果 */
void cutFruitInfo( Info *pInf ) {
        int i, j;

        if ( NULL == pInf ) {
                return;
        }

                /* 雷 */
        if ( FLAG_THUNDER == pInf->flag ) {
                pInf->flag = FLAG_DEAL;

                pInf->img   = imgCrash;
                pInf->px   -= CRASH_WIDTH / 2;
                pInf->py   -= CRASH_HEIGHT / 2;
                pInf->type  = 0;
                pInf->flag  = FLAG_CRASH;

                score = 0;
                return;
        }

                /* 不是水果 */
        if ( FLAG_FRUIT != pInf->flag ) {
                return;
        }

        pInf->flag = FLAG_DEAL;

        i = NUM_INFO;
        while ( (NUM_INFO_H > i) && (FLAG_NOT_USE != info[ i ].flag) ) {
                ++i;
        }
        info[ i ].flag = FLAG_DEAL;
        j = i + 1;
        while ( (NUM_INFO_H > j) && (FLAG_NOT_USE != info[ j ].flag) ) {
                ++j;
        }
        info[ j ].flag = FLAG_DEAL;

        if ( NUM_INFO_H > j ) {
                destroyImageZ( info[ i ].img );
                info[ i ].img  = createImageFromImageZ( fruit[ pInf->type ].imgLe );
                info[ i ].px   = pInf->px;
                info[ i ].py   = pInf->py;
                info[ i ].type = pInf->type;
                info[ i ].vx   = LEFT_VX;
                info[ i ].vy   = 0;
                info[ i ].flag = FLAG_HALF_LEFT;

                destroyImageZ( info[ j ].img );
                info[ j ].img  = createImageFromImageZ( fruit[ pInf->type ].imgRi );
                info[ j ].px   = pInf->px + getImageWidthZ(info[ i ].img);
                info[ j ].py   = pInf->py;
                info[ j ].type = pInf->type;
                info[ j ].vx   = RIGHT_VX;
                info[ j ].vy   = 0;
                info[ j ].flag = FLAG_HALF_RIGHT;
        }
        else {
                info[ i ].flag = FLAG_NOT_USE;
                info[ j ].flag = FLAG_NOT_USE;
        }

        pInf->flag = FLAG_NOT_USE;
        ++score;
}

        /* 檢查是否切到 */
int checkCut( Info *pInf ) {
        int cx, cy, r, r2, i;

        if ( NULL == pInf ) {
                return 0;
        }

        if ( FLAG_THUNDER == pInf->flag ) {
                cx = THUNDER_WIDTH  / 2 + pInf->px;
                cy = THUNDER_HEIGHT / 2 + pInf->py;
                r  = RADIUS;
        }
        else if ( FLAG_FRUIT == pInf->flag ) {
                cx = getImageWidthZ(pInf->img)  / 2 + pInf->px;
                cy = getImageHeightZ(pInf->img) / 2 + pInf->py;
                r  = fruit[ pInf->type ].radius;
        }
        else {
                return 0;
        }
        r2 = r * r;

        for ( i = 0; i < ptNum; ++i ) {
                if ( (ptX[i]-cx) * (ptX[i]-cx) + (ptY[i]-cy) * (ptY[i]-cy) < r2 ) {
                        return 1;
                }
        }

        return 0;
}

        /* 定時(shí)器回調(diào)函數(shù),一幀,更新游戲數(shù)據(jù) */
void updateGame( int sig ) {
        static  int  rf = 0;
        int  i, j, w, h, le;

                /* 已經(jīng)結(jié)束 */
        if ( 0 == isRunning ) {
                return;
        }

                /* 繪制背景 */
        paintImageZ( imgFrame, 0, 0,
                imgBk, 0, 0,
                getImageWidthZ(imgBk), getImageHeightZ(imgBk) );

                /* 繪制刀 */
#define  SWORD_POINT  12
        if ( SWORD_POINT <= ptNum ) {
                ImageZ img = NULL;
                int    lef, top, dx, dy, xh, xt, yh, yt;

                img = createImageCropZ( imgSword, 0, 0, 100, 100 );

                xh = yh = xt = yt = 0;
                for ( i = 1; i <= SWORD_POINT; ++i ) {
                        if ( SWORD_POINT / 2 >= i ) {
                                xt += ptX[ ptNum - i ];
                                yt += ptY[ ptNum - i ];
                        }
                        else {
                                xh += ptX[ ptNum - i ];
                                yh += ptY[ ptNum - i ];
                        }
                }
                xh /= SWORD_POINT / 2;
                yh /= SWORD_POINT / 2;
                xt /= SWORD_POINT / 2;
                yt /= SWORD_POINT / 2;

                dx = xt - xh;
                dy = yt - yh;

                rotateImageZ( img,
                        atan2( (double)(-dy), (double)dx ),
                        ITP_BILINEAR_Z, NULL );
                cropImageZ( img, (getImageWidthZ(img)-100)/2, (getImageHeightZ(img)-100)/2, 100, 100 );

                /*
                xt = ptX[ ptNum - 1 ];
                yt = ptY[ ptNum - 1 ];
                if ( 0 <= dx ) {
                        if ( 0 <= dy ) {
                                lef = xt - 55;
                                top = yt - 55;
                        }
                        else {
                                lef = xt - 55;
                                top = yt - 35;
                        }
                }
                else {
                        if ( 0 <= dy ) {
                                lef = xt - 35;
                                top = yt - 55;
                        }
                        else {
                                lef = xt - 35;
                                top = yt - 35;
                        }
                }
                */

                lef = ptX[ ptNum - 1 ] - ( (0 <= dx) ? 55 : 35 );
                top = ptY[ ptNum - 1 ] - ( (0 <= dy) ? 55 : 35 );

                paintImageZ( imgFrame, lef, top,
                        img, 0, 0, 100, 100 );
                destroyImageZ( img );
                img = NULL;
        }

                /* 檢查切割 */
        for ( i = ptNum-1; i > 0; --i ) {
                ptX[ ptNum ] = ( ptX[ i ] + ptX[ i - 1 ] ) / 2;
                ptY[ ptNum ] = ( ptY[ i ] + ptY[ i - 1 ] ) / 2;
                if ( NUM_POINT > ptNum ) {
                        ++ptNum;
                }
        }
        for ( i = 0; i < NUM_INFO; ++i ) {
                if ( (FLAG_NOT_USE == info[ i ].flag) || (FLAG_DEAL == info[ i ].flag) ) {
                        continue;
                }
                if ( checkCut( &(info[ i ]) ) ) {
                        cutFruitInfo( &(info[ i ]) );
                }
        }
        ptNum = 0;

                /* 自由落體 */
        for ( i = 0; i < NUM_INFO_H; ++i ) {
                if ( (FLAG_NOT_USE == info[ i ].flag) || (FLAG_DEAL == info[ i ].flag) ) {
                        continue;
                }
                info[ i ].px += info[ i ].vx;
                info[ i ].py += info[ i ].vy;
                info[ i ].vy += ACCEL_Y;
                w = getImageWidthZ( info[ i ].img );
                h = getImageHeightZ( info[ i ].img );
                if ( (BOARD_HEIGHT < info[ i ].py + 5) ||
                     (BOARD_WIDTH  < info[ i ].px + 5) || (-w+5 > info[ i ].px) ) {
                        if ( (FLAG_THUNDER == info[ i ].flag) || (FLAG_CRASH == info[ i ].flag) ) {
                                info[ i ].img = NULL;
                        }
                        info[ i ].flag = FLAG_NOT_USE;
                }
        }

                /* 新水果 */
        for ( i = 0; i < NUM_INFO; ++i ) {
                if ( FLAG_NOT_USE == info[ i ].flag ) {
                        initFruitInfo( &(info[ i ]) );
                }
        }

                /* 繪制得分 */
        i  = score;
        le = BOARD_WIDTH - 60;
        do {
                j  = i % NUM_NUMBER;
                i /= NUM_NUMBER;
                paintImageZ( imgFrame, le, 7,
                        imgNum[ j ], 0, 0,
                        getImageWidthZ(imgNum[ j ]), getImageHeightZ(imgNum[ j ])  );
                le -= getImageWidthZ(imgNum[ j ]) - 4;
        } while ( 0 != i );

                /* 繪制空中物體 */
        rf = ( rf + 1 ) % ROTATE_FACTOR;
        for ( i = 0; i < NUM_INFO_H; ++i ) {
                if ( (FLAG_NOT_USE == info[ i ].flag) || (FLAG_DEAL == info[ i ].flag) ) {
                        continue;
                }

                if ( FLAG_THUNDER == info[ i ].flag ) {
                        paintImageZ( imgFrame, info[ i ].px, info[ i ].py,
                                info[ i ].img, info[ i ].type % THUNDER_LINE_NUM * THUNDER_WIDTH,
                                info[ i ].type / THUNDER_LINE_NUM * THUNDER_HEIGHT,
                                THUNDER_WIDTH, THUNDER_HEIGHT   );
                        info[ i ].type = ( info[ i ].type + 3 ) % THUNDER_FRAME_NUM;
                }
                else if ( FLAG_CRASH == info[ i ].flag ) {
                        if ( CRASH_FRAME_NUM > info[ i ].type ) {
                                paintImageZ( imgFrame, info[ i ].px, info[ i ].py,
                                        info[ i ].img, info[ i ].type % CRASH_LINE_NUM * CRASH_WIDTH,
                                        info[ i ].type / CRASH_LINE_NUM * CRASH_HEIGHT,
                                        CRASH_WIDTH, CRASH_HEIGHT   );
                                ++(info[ i ].type);
                        }
                }
                else {
                        if ( 0 == rf ) {
                                rotateImage90degreeZ( info[ i ].img, FALSE );
                        }
                        paintImageZ( imgFrame, info[ i ].px, info[ i ].py,
                                info[ i ].img, 0, 0,
                                getImageWidthZ(info[ i ].img), getImageHeightZ(info[ i ].img) );
                }
        }

                /* 顯示 */
        showImage( 0, 0,
                getImageWidthZ(imgFrame), getImageHeightZ(imgFrame),
                imgFrame, 0, 0 );
}

        /* 處理鼠標(biāo)移動(dòng)消息 */
void moveMouse( int x, int y ) {
        ptX[ ptNum ] = x;
        ptY[ ptNum ] = y;
        ++ptNum;
}

        /* 游戲結(jié)束,釋放資源 */
void finishGame() {
        int i;
        isRunning = 0;
        cancelTimer();
        for ( i = 0; i < NUM_FRUIT; ++i ) {
                destroyImageZ( fruit[ i ].img );
                destroyImageZ( fruit[ i ].imgLe );
                destroyImageZ( fruit[ i ].imgRi );
                fruit[ i ].img   = NULL;
                fruit[ i ].imgLe = NULL;
                fruit[ i ].imgRi = NULL;
        }
        for ( i = 0; i < NUM_NUMBER; ++i ) {
                destroyImageZ( imgNum[ i ] );
                imgNum[ i ] = NULL;
        }
        for ( i = 0; i < NUM_INFO_H; ++i ) {
                if ( (FLAG_THUNDER != info[ i ].flag) && (FLAG_CRASH != info[ i ].flag) ) {
                        destroyImageZ( info[ i ].img );
                }
                info[ i ].img = NULL;
        }
        destroyImageZ( imgBk );
        imgBk = NULL;
        destroyImageZ( imgFrame );
        imgFrame = NULL;
        destroyImageZ( imgCrash );
        imgCrash = NULL;
        destroyImageZ( imgThunder );
        imgThunder = NULL;
        destroyImageZ( imgSword );
        imgSword = NULL;
}


#ifdef  FRUIT_LINUX
/* Linux */

int main() {
        Display  *disp;
        int      scr;
        Window   wnd;
        GC       gc;
        Visual   *vis;
        XEvent   e;

        disp = XOpenDisplay( NULL );
        if ( NULL == disp ) {
                printf( "XOpenDisplay Failed!\n" );
                return 0;
        }
        scr = XDefaultScreen( disp );
        gc  = XDefaultGC( disp, scr );
        vis = XDefaultVisual( disp, scr );
        wnd = XCreateSimpleWindow( disp, RootWindow( disp, scr ),
                200, 200, WND_WIDTH, WND_HEIGHT, 3,
                BlackPixel( disp, scr ), WhitePixel( disp, scr )   );

        XSelectInput( disp, wnd, ExposureMask | KeyPressMask | PointerMotionMask );

        XMapWindow( disp, wnd );

        preInitGame( disp, wnd, gc, vis );
        initGame();

        while ( 1 ) {
                XNextEvent( disp, &e );

                if ( Expose == e.type ) {
                }

                if ( MotionNotify == e.type  ) {
                        moveMouse( e.xmotion.x, e.xmotion.y );
                }

                /*
                if ( KeyPress == e.type )
                        break;
                */
        }

        finishGame();

        XCloseDisplay( disp );

        return 0;
}

#else /* FRUIT_LINUX */
/* Win32 */

LRESULT  CALLBACK  WndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) {
        PAINTSTRUCT ps;
        HDC         hdc;

        switch ( uMsg ) {
        case WM_TIMER :
                updateGame( 0 );
                return 0;

        case WM_MOUSEMOVE :
                moveMouse( LOWORD(lParam), HIWORD(lParam) );
                return 0;

        case WM_CREATE :
                preInitGame( hWnd );
                initGame();
                return 0;

        case WM_PAINT :
                hdc = BeginPaint( hWnd, &ps );
                EndPaint( hWnd, &ps );
                return 0;

        case WM_DESTROY :
                finishGame();
                PostQuitMessage( 0 );
                return 0;
        }
        return DefWindowProc( hWnd, uMsg, wParam, lParam );
}

INT  APIENTRY  WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR szCmdLine, INT iShow ) {
        static TCHAR  className[] = TEXT("Fruit");
        static TCHAR  wndName[]   = TEXT("Fruit");

        WNDCLASSEX wc;
        HWND       hWnd;
        MSG        msg;

        wc.cbClsExtra = 0;
        wc.cbSize     = sizeof(wc);
        wc.cbWndExtra = 0;
        wc.hbrBackground = (HBRUSH)GetStockObject( BLACK_BRUSH );
        wc.hCursor       = LoadCursor( NULL, IDC_ARROW );
        wc.hIcon         = LoadIcon( NULL, IDI_APPLICATION );
        wc.hIconSm       = LoadIcon( NULL, IDI_APPLICATION );
        wc.hInstance     = hInst;
        wc.lpfnWndProc   = WndProc;
        wc.lpszClassName = className;
        wc.lpszMenuName  = NULL;
        wc.style         = 0;
        RegisterClassEx( &wc );

        hWnd = CreateWindowEx( 0, className, wndName,
                WS_OVERLAPPEDWINDOW,
                100, 100, WND_WIDTH, WND_HEIGHT,
                NULL, NULL, wc.hInstance, NULL );

        ShowWindow( hWnd, iShow );
        UpdateWindow( hWnd );

        while ( GetMessage( &msg, NULL, 0, 0 ) ) {
                TranslateMessage( &msg );
                DispatchMessage( &msg );
        }

        return msg.wParam;
}

#endif /* FRUIT_LINUX */

posted on 2011-12-31 16:53 coreBugZJ 閱讀(4173) 評(píng)論(2)  編輯 收藏 引用 所屬分類: 課內(nèi)作業(yè)娛樂

Feedback

# re: 游戲 切水果 2012-01-02 18:27 林羽飛揚(yáng)

雖然看不懂,但是感覺很牛逼的樣子  回復(fù)  更多評(píng)論   

# re: 游戲 切水果 2013-07-26 15:43 chezai

ImageZ.lib哪里來的?  回復(fù)  更多評(píng)論   


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美在线欧美在线| 性做久久久久久久久| 欧美精品一区视频| 玖玖玖国产精品| 久久久人成影片一区二区三区| 久久国产主播精品| 久久综合一区二区| 欧美日韩播放| 国产精品区一区二区三| 黄色成人小视频| 亚洲激情影院| 亚洲一区二区三区高清不卡| 亚洲一级网站| 久久精品午夜| 亚洲福利小视频| 欧美成人午夜激情视频| 欧美激情一区二区三区成人| 亚洲欧洲综合另类在线| 亚洲一区二区精品视频| 欧美一区观看| 欧美黄色一区二区| 国产性做久久久久久| 亚洲级视频在线观看免费1级| 一区二区三区欧美成人| 久久精品一级爱片| 亚洲国产精品久久久久秋霞蜜臀| 99综合精品| 久久欧美肥婆一二区| 欧美日本在线| 精品999成人| 亚洲在线成人| 小辣椒精品导航| 欧美1级日本1级| 99视频在线观看一区三区| 久久国产免费看| 欧美性做爰毛片| 亚洲精品免费一区二区三区| 久久成人这里只有精品| 亚洲精品一区在线| 理论片一区二区在线| 国产精品一区二区在线观看网站| 最新日韩欧美| 巨乳诱惑日韩免费av| 亚洲尤物在线视频观看| 欧美日韩国产精品一区| 亚洲国产成人高清精品| 久久精品中文字幕免费mv| 一区二区高清视频| 欧美成年人视频网站| 伊人久久婷婷色综合98网| 午夜伦欧美伦电影理论片| 亚洲精品在线三区| 欧美国产先锋| 亚洲日本成人网| 欧美成人中文字幕在线| 久久成人精品一区二区三区| 国产精品日韩久久久久| 亚洲免费网址| 亚洲一区bb| 国产精品久久久久久久久婷婷 | 国产一级一区二区| 亚洲欧美国产精品专区久久| 日韩特黄影片| 欧美视频在线观看视频极品| 99在线热播精品免费| 亚洲精品字幕| 欧美体内she精视频| 亚洲视频在线观看视频| av成人天堂| 国产精品青草综合久久久久99 | 亚洲日本va午夜在线电影| 欧美成年网站| 欧美大片在线看免费观看| 亚洲国产精品高清久久久| 亚洲成人直播| 欧美精品一区二区久久婷婷| 在线视频中文亚洲| 亚洲综合视频在线| 伊人激情综合| 一本色道久久综合亚洲精品小说 | aa亚洲婷婷| 一区二区三区日韩欧美精品| 国产精品嫩草99av在线| 欧美喷水视频| 欧美偷拍一区二区| 欧美在线播放一区| 麻豆成人在线播放| 亚洲天堂免费在线观看视频| 亚洲男人的天堂在线| 狠狠综合久久| 亚洲裸体视频| 国内揄拍国内精品久久| 亚洲国产精品福利| 国产精品久久久久国产a级| 久久久www成人免费无遮挡大片 | 久久这里有精品15一区二区三区 | 毛片精品免费在线观看| 亚洲一区二区三区四区视频| 久久成人在线| 亚洲午夜精品| 老鸭窝亚洲一区二区三区| 亚洲欧美日本国产专区一区| 久久成年人视频| 亚洲午夜电影网| 巨胸喷奶水www久久久免费动漫| 亚洲网站啪啪| 奶水喷射视频一区| 久久久久.com| 欧美午夜精品久久久久久久| 欧美aⅴ一区二区三区视频| 国产精品素人视频| 亚洲精选一区二区| 亚洲欧洲在线看| 小黄鸭视频精品导航| 亚洲视频香蕉人妖| 狼狼综合久久久久综合网| 午夜亚洲影视| 欧美视频在线一区二区三区| 欧美高清视频一区| 国内精品国产成人| 亚洲欧美日韩综合| 亚洲直播在线一区| 欧美日本在线| 亚洲激情一区二区| 亚洲风情亚aⅴ在线发布| 久久国产一区二区| 久久九九国产| 黑丝一区二区三区| 久久精品中文字幕一区| 久久九九99| 在线观看日韩专区| 久久人人97超碰人人澡爱香蕉 | 在线一区二区三区做爰视频网站| 亚洲欧洲综合| 免费在线观看精品| 亚洲成人在线视频网站| 91久久综合| 欧美粗暴jizz性欧美20| 亚洲国产精品精华液网站| 91久久国产精品91久久性色| 久久综合色播五月| 亚洲电影av| 亚洲精品影视在线观看| 欧美精品亚洲| 久久一二三四| 欧美在线免费观看亚洲| 久久精品1区| 久久免费高清| 在线观看一区二区精品视频| 久久美女性网| 欧美成人免费小视频| 亚洲高清视频一区二区| 麻豆91精品91久久久的内涵| 亚洲高清在线视频| 一区二区成人精品 | 久久精品一区| 亚洲国产合集| 欧美日韩一区不卡| 亚洲在线免费观看| 久久综合色播五月| 99热在线精品观看| 国产精品一区二区久久久久| 欧美一区二区免费| 欧美好吊妞视频| 亚洲小说欧美另类社区| 国产日韩欧美一区二区| 蜜臀久久99精品久久久久久9| 日韩视频一区| 久久久最新网址| av成人黄色| 国产视频精品va久久久久久| 免费亚洲一区二区| 亚洲一级一区| 欧美激情一区二区在线 | 欧美国产91| 亚洲永久精品国产| 在线观看亚洲视频| 国产精品草草| 麻豆精品在线视频| 亚洲直播在线一区| 亚洲国产精品va在看黑人| 欧美亚洲在线| 日韩一区二区高清| 在线观看亚洲a| 国产精品一区二区在线观看| 欧美黄网免费在线观看| 欧美与欧洲交xxxx免费观看 | 狠久久av成人天堂| 国产精品户外野外| 欧美xx69| 久久九九精品99国产精品| 亚洲一区一卡| 99国内精品久久| 欧美激情片在线观看| 久久久久国产精品人| 午夜久久久久久| 亚洲免费在线播放| 一区二区久久| 一区二区激情小说| av成人天堂|