21ic电子技术开发论坛 综合技术交流 新手园地 Linux C别踩白块游戏设计王者荣耀版(纯C语言代码)
发新帖我要提问
返回列表
打印

Linux C别踩白块游戏设计王者荣耀版(纯C语言代码)

[复制链接]
231|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
第三章|  楼主 | 2018-10-6 13:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
纯软件开发,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,"./photo/stepwhite_menu.bmp",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,"./photo/stepwhite_classic.bmp",7,20);//显示经典菜单

                                        classic_menu();//进入经典模式

                                }

                                if(samp1.x>243&&samp1.x<342&&samp1.y>90&&samp1.y<370)

                                {

                                        lcd_draw_bmp(0,0,"./photo/stepwhite_arcade.bmp",7,20);//显示街机模式菜单

                                        arcade_mode();//进入街机模式

                                }

                                if(samp1.x>148&&samp1.x<208&&samp1.y>142&&samp1.y<304)

                                {

                                        lcd_draw_bmp(0,0,"./photo/stepwhite_introduction.bmp",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"bmp.h"

#include"ts.h"

#include <pthread.h>

#include"score.h"

//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"bmp.h"

#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

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

380

主题

380

帖子

0

粉丝
关闭 热门推荐
快速回复 在线客服 返回列表 返回顶部