| 
 
| 纯软件开发,Linux系统游戏开发,我用的是Linux5.4.0版本linux内核的arm6818板开发的,只要是5.4.0Linux内核的板子都适用,纯C语言,没有用任何第三方库。源码两千余行,篇幅有限,只放了主函数和需要的两个头文件,完整源码工程文件请下载附件查阅,谢谢!当然bug还是有的,望大神指正,修改完善!转发分享请附上原文链接,尊重原创!如果读者有不懂的地方或者好的建议,可以加qq2928676332咨询交流学习,话不多说上代码+图: 
 
 
 
 
 街机模式菜单
 
 
 
 
 
 
 普通模式
 
 
 
 
 
 
 经典模式菜单
 
 
 
 
 
 
 游戏界面
 
 
 
 
 
 
 /*
 
 主函数
 
 filename: main.c
 
 the name of game:step white block
 
 __author__:wwllaowang
 
 */
 
 
 
 #include"step_whiteblock.h"
 
 #include"score.h"
 
 
 
 
 
 int main(int argc, char *argv[])
 
 {
 
 TS_Init();
 
 open_lcdbmp();//进行jpg显示时LCD初始化
 
 
 
 
 
 
 
 //游戏界面设计
 
 struct xy samp;//GUI界面的触摸按键变量
 
 
 
 lcd_draw_bmp(0,0,"./photo/stepwhite_**.bmp",8,1000);//显示游戏封面
 
 while(1)
 
 {
 
 
 
 samp=get_pos();
 
 
 
 if(samp.x>170&&samp.x<276&&samp.y>88&&samp.y<427)
 
 {
 
 lcd_draw_bmp(0,0,&quot;./photo/stepwhite_menu.bmp&quot;,7,200);//显示主菜单
 
 
 
 struct xy samp1;
 
 while(1)
 
 {
 
 
 
 samp1=get_pos();
 
 if(samp1.x>367&&samp1.x<452&&samp1.y>90&&samp1.y<370)
 
 {
 
 lcd_draw_bmp(0,0,&quot;./photo/stepwhite_classic.bmp&quot;,7,20);//显示经典菜单
 
 classic_menu();//进入经典模式
 
 }
 
 if(samp1.x>243&&samp1.x<342&&samp1.y>90&&samp1.y<370)
 
 {
 
 lcd_draw_bmp(0,0,&quot;./photo/stepwhite_arcade.bmp&quot;,7,20);//显示街机模式菜单
 
 arcade_mode();//进入街机模式
 
 }
 
 if(samp1.x>148&&samp1.x<208&&samp1.y>142&&samp1.y<304)
 
 {
 
 lcd_draw_bmp(0,0,&quot;./photo/stepwhite_introduction.bmp&quot;,6,20);//显示使用说明
 
 introduction_mode();//进入使用说明
 
 }
 
 
 
 }
 
 }
 
 }
 
 
 
 
 
 
 
 close_lcdbmp();
 
 TS_UnInit();
 
 
 
 return 0;
 
 }
 
 
 
 
 
 /*
 
 step_whiteblock.h
 
 
 
 */
 
 
 
 #ifndef __STEP_WHITEBLOCK_H_
 
 #define __STEP_WHITEBLOCK_H_
 
 
 
 #include <errno.h>
 
 #include <stdlib.h>
 
 #include <time.h>
 
 #include&quot;bmp.h&quot;
 
 #include&quot;ts.h&quot;
 
 #include <pthread.h>
 
 #include&quot;score.h&quot;
 
 //extern  char *flag;
 
 
 
 #define H  3
 
 #define W  4
 
 #define BLOCK_H  160
 
 #define BLOCK_W  200
 
 extern int DIFF;       //空DIFF行刷白块
 
 extern const char *color[H][W];    //黑白图片指针存储,(黑白快棋盘)
 
 extern pthread_t thread_id;//街机模式显示游戏线程识别码
 
 extern pthread_t thread_id1;//显示分数线程识别码1
 
 extern pthread_t thread_id2;//触摸检测线程识别码1
 
 //extern int arcade_flag;    //困难模式标志位
 
 //void *touch(void *rag);
 
 //extern 关键字修饰的函数说明可以初外部文件调用
 
 const char  *generate_randphoto(int b);//debug
 
 void show_picture(void);  //显示静态棋盘图片
 
 void update_picture();//显示黑白块流动动画
 
 void *flowing_picture(void *arg);//游戏动画线程
 
 void color_init(void);//棋盘初始化
 
 // void *timer(void *arg);
 
 int  classic_init_recursion(const char *color,const char *(*generate)(int));//debug
 
 void color_classic_init(int mode); //经典模式棋盘初始化
 
 void classic_menu();//经典模式菜单界面
 
 void classic_mode(int initmode,int path);//经典游戏模式主程,initmode表示color初始化模式,photopath表示方块指针地址
 
 void arcade_mode(void);//街机模式
 
 void introduction_mode(void);//游戏说明模块
 
 //街机模式三种难度
 
 void easy_mode();
 
 void ordinary_mode();
 
 void hard_mode();
 
 void *touch(void *arg);//触摸检测线程
 
 void twinkle(struct xy *temp,int n);//游戏失败闪烁处理
 
 #endif
 
 
 
 
 
 
 
 /*
 
 score.h
 
 */
 
 #ifndef __SCORE_H_
 
 #define __SCORE_H_
 
 
 
 #include <pthread.h>
 
 #include<stdio.h>
 
 #include<unistd.h>
 
 #include<string.h>
 
 #include&quot;bmp.h&quot;
 
 #include<stdlib.h>
 
 //extern 关键字修饰的函数说明可以初外部文件调用
 
 //最大分数仅为9999,作者只做到四位数,自行修改
 
 
 
 #define EASY   1
 
 #define ORDINARY  2
 
 #define HARD  3
 
 //最大分数仅为9999,作者只做到四位数,自行修改
 
 extern int classic_score;
 
 extern int arcade_score_easy;
 
 extern int arcade_score_ordinary;
 
 extern int arcade_score_hard;
 
 extern int arcade_modeforscore;//街机计分
 
 
 
 int num_of_int(int x);//求整数位数
 
 void show_num(int path,int a,int x,int y);//显示0-9数字,path(0,1)表示两种格式图片路径,a表示数字值,(x,y)表示数字显示位置
 
 void show_arcade_score(int m,int x,int y,int k,int path);//获得的四位数分数显示,不限于街机模式,(x,y)表示各位的位置,k表示图片宽度,path(0,1)表示两种格式图片路径
 
 void show_classic_time(int score,int x_sec,int y_sec,int x_msec,int y_msec,int k,int path);//x_sec,y_sec 表示秒坐标,x_msec,y_msec表示毫秒坐标,k表示数字的图片大小,path(0,1)表示两种格式图片路径
 
 void *show_score(void *score1);//街机模式分数显示线程
 
 void *classic_timer(void *arg);//计时器
 
 void *show_classic_score(void *score1);//经典模式计时显示线程
 
 void display_arcade_bestscore(void);//显示街机模式历史最佳,不能保存
 
 void save_ordinary_score(void );//保存街机普通模式分数
 
 void save_hard_score(void );//保存街机困难模式分数
 
 void save_easy_score(void );//保存街机简单模式分数
 
 void read_arcade_file_ordinary();//街机普通模式分数读取并显示
 
 void read_arcade_file_easy();//街机简单普通分数读取并显示
 
 void read_arcade_file_hard();//街机困难模式分数读取并显示
 
 void save_classic_score(void );//经典模式分数保存,保存的是毫秒值
 
 void read_classic_file();//经典模式分数的读取并显示
 
 void show_atrcadehistory_best();//显示所有街机模式历史最好分数
 
 #endif
 | 
 |