资源简介
这个是本人纯代码编写,没有使用任何引擎。文件内附有开发过程的一些说明,这个程序只是飞机大战的一个小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个文件信息
- 上一篇:分享一款监控网络设备
- 下一篇:Filco104双模忍者圣手二代说明书
相关资源
- 炸弹人(QQ堂)游戏源码
- 3D图形程序设计酷跑游戏
- unity3D暴力街区射击大战游戏源码
- 游戏核心算法编程内幕.pdf
- unity切水果插件+切水果游戏源码
- 40套微信H5营销游戏平台完整源码
- unity5超酷3D战斗机空战游戏完整源码
- 触摸屏游戏设计 pdf
- UE4虚幻引擎蓝图艺术大师三部完整版
- AssetStudio.x64.v0.12.65.zip 提取游戏资源工
- 易语言源码大全 有游戏、外挂、辅助
- 速算纸牌24点小游戏
- 游戏脚本制作教程
- scratch小游戏合集源码13个
- MDCC 2014 乐元素CTO凌聪——移动游戏防
- 幻城探险2D横版通关小游戏原工程+e
- 基于qt实现的简易象棋游戏
- unity5 FPS 3D射击游戏源码
- 我们的linux上机作业 linux小游戏 炸弹
- linux下基于socket和curses的双人弹球游戏
- 3DChess(立体中国象棋
- 扑克牌游戏 flash做的
- Unity3D 实战视频教程 保卫萝卜 2D 游戏
- J2ME的RPG游戏Demo
- Windows游戏编程大师技巧(第二版)光
- WINCE小游戏制作代码,很好的借鉴
- 大师谈游戏设计:创意与节奏 (图灵
- 2D横版忍者跑酷游戏《刀叶如飞》游戏
- unity音乐节奏休闲游戏源码类似节奏大
- 拳皇音效,KOF爱好者福音
评论
共有 条评论