纯软件开发,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 |