资源简介

这个是本人纯代码编写,没有使用任何引擎。文件内附有开发过程的一些说明,这个程序只是飞机大战的一个小Demo,只有一些基础功能。飞机移动,随机敌人,帧率显示,击中飞机爆炸特效等。使用的是gtk3.0,gtk3.0与gtk2.0API上有些地方不一样,so当初写这个的时候踩了一些坑,图形界面多线程开发方面有问题的同学可以参考,希望会有所帮助。test文件是编译成功的文件,修改权限后可以直接在Linux下跑。其实当初写这个Demo仅仅是为了应付下Linux作业,为了显得比较厉害,就啃了一下gtk这个骨头。本人对于gtk也仅仅会一些皮毛。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include “HeroPlane.h“
#include “EnemyPlane.h“
#include “Bullet.h“
#include “time.h“
#include “Boom.h“
#include 
#include 
#include 
#include 


#define WD_WIDTH 400
#define WD_HEIGHT 645
#define REFRESH_WD 30  //FPS帧率
#define PLANE_STEP 16 //飞机速度
#define BULLET_STEP 20 //子弹速度
#define HERO_WIDTH  97
#define HERO_HEIGHT  124
#define ENEMYPLANE_STEP 3 //敌机移动速度
#define ENEMYPLANE_NUM 5 //每次敌机产生数量
#define ENEMYPLANE_FRESH_TIME 3 //敌机n秒产生一次
using namespace std;
GtkWidget *window;
GtkWidget *layout;        //使用的布局
//GtkWidget *FPSlog;      //fps帧率实时显示
GtkWidget *heroimg;     //英雄图片
HeroPlane hero;         //主角飞机
gboolean keypresslist[] = {falsefalsefalsefalsefalse}; //上 右 下 左 空格
int realfps = 0;
vector enemylist; //怪物列表
vector bullets;
vector boomlist;
void UIthread();//UI线程刷新
void *FPStotal(void*);//实际帧率统计
bool gameover = false;
void freshScreen();


gboolean deal_keybord_event(GtkWidget *widgetGdkEventKey *eventgpointer data);//键盘消息机制
gboolean release_keybord_event(GtkWidget *widgetGdkEventKey *eventgpointer data);
static gboolean time_handler();
void init();
void CreateEnemy(int MaxplaneNumvector &planelist);


static void sleep_ms(unsigned int secs)

{

    struct timeval tval;

    tval.tv_sec=secs/1000;

    tval.tv_usec=(secs*1000)%1000000;

    select(0NULLNULLNULL&tval);

}
int main(int argcchar *argv[])
{

    /*创建线程*/

    if (!g_thread_supported())
    {
        g_thread_init(NULL);
        gdk_threads_init();
    }

    /*各项初始化*/
    gtk_init(&argc&argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window)“飞机大战“);
    gtk_widget_set_size_request(windowWD_WIDTHWD_HEIGHT);
    gtk_window_set_resizable(GTK_WINDOW(window)false);
    g_signal_connect(window“key-press-event“G_CALLBACK(deal_keybord_event)NULL);
    g_signal_connect(window“key-release-event“G_CALLBACK(release_keybord_event)NULL);
    //g_timeout_add(3000(GSourceFunc)time_handlerNULL);


    /*背景贴图*/

    init();

    gtk_widget_show_all(window);


    //创建gtk的刷新线程  UI线程
    g_thread_create((GThreadFunc)UIthread NULL FALSE NULL);
    pthread_t totalthread;
    if(pthread_create(&totalthreadNULLFPStotalNULL) != 0 ){
        cout << “Create thread fail“ << endl;
    }

    gdk_threads_enter();
    gtk_main();
    gdk_threads_leave();
}


 //子弹状态以及子弹位移
    vector deletelist;
    //敌机删除队列
    vector deleteEnemyList;
    int delcount = 0;
//UI线程刷新
void UIthread(){
    int sleeptime = 1000/REFRESH_WD;//间隔刷新时间
    int timecount = 0;
    while(true){
        sleep_ms(sleeptime);
        if(gameover)
            break;
        g_main_context_invoke(NULL(GSourceFunc)freshScreenNULL);

        realfps++;

    }
    //Gameover
        GtkWidget *over = gtk_image_new_from_file(“./img/gameover.png“);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-01-02 10:17  PlaneWar2\
     目录           0  2019-01-02 10:17  PlaneWar2\bin\
     目录           0  2019-01-02 10:17  PlaneWar2\bin\Debug\
     文件      283776  2018-12-20 20:43  PlaneWar2\bin\Debug\PlaneWar2
     目录           0  2019-01-02 10:17  PlaneWar2\bin\Release\
     文件       22664  2018-12-25 12:43  PlaneWar2\bin\Release\PlaneWar2
     目录           0  2019-01-02 10:17  PlaneWar2\img\
     文件        4827  2015-10-31 05:45  PlaneWar2\img\airplane.png
     文件      110258  2015-10-31 05:45  PlaneWar2\img\background.png
     文件     5463847  2018-12-13 17:05  PlaneWar2\img\BGM.mp3
     目录           0  2019-01-02 10:17  PlaneWar2\img\boom\
     文件        2635  2018-12-25 11:56  PlaneWar2\img\boom\boom_1.png
     文件        4976  2018-12-25 11:56  PlaneWar2\img\boom\boom_10.png
     文件        5129  2018-12-25 11:56  PlaneWar2\img\boom\boom_11.png
     文件        5253  2018-12-25 11:56  PlaneWar2\img\boom\boom_12.png
     文件        5337  2018-12-25 11:56  PlaneWar2\img\boom\boom_13.png
     文件        5428  2018-12-25 11:56  PlaneWar2\img\boom\boom_14.png
     文件        5545  2018-12-25 11:56  PlaneWar2\img\boom\boom_15.png
     文件        5588  2018-12-25 11:56  PlaneWar2\img\boom\boom_16.png
     文件        5713  2018-12-25 11:56  PlaneWar2\img\boom\boom_17.png
     文件        5671  2018-12-25 11:56  PlaneWar2\img\boom\boom_18.png
     文件        5535  2018-12-25 11:56  PlaneWar2\img\boom\boom_19.png
     文件        2420  2018-12-25 11:56  PlaneWar2\img\boom\boom_2.png
     文件        5551  2018-12-25 11:56  PlaneWar2\img\boom\boom_20.png
     文件        5432  2018-12-25 11:56  PlaneWar2\img\boom\boom_21.png
     文件        5444  2018-12-25 11:56  PlaneWar2\img\boom\boom_22.png
     文件        5138  2018-12-25 11:56  PlaneWar2\img\boom\boom_23.png
     文件        4866  2018-12-25 11:56  PlaneWar2\img\boom\boom_24.png
     文件        4710  2018-12-25 11:56  PlaneWar2\img\boom\boom_25.png
     文件        4448  2018-12-25 11:56  PlaneWar2\img\boom\boom_26.png
     文件        3861  2018-12-25 11:56  PlaneWar2\img\boom\boom_27.png
............此处省略48个文件信息

评论

共有 条评论