📄 pic_game.h
字号:
#ifndef __PIC_GAME_h__
#define __PIC_GAME_h__
#include <PIC.h>
#include "defin_data.h"
//乘方替代
ROM_DTAT uint16_t mux_int[]={
0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,0x0040,0x0080,
0x0100,0x0200,0x0400,0x0800,0x1000,0x2000,0x4000,0x8000};
void delay(uint8_t MS); //短延时程序
void delay_long(uint16_t MS);//长短延时程序
void delay_long_int(uint16_t MS);//超长延时程序
//显示器配置
#define NULL 0//无效变量
#define DISPLAY_TIME_L 0x00 //显示刷新频率
#define DISPLAY_TIME_H 0xF0
#define FLASH_NO_TIME 1 //一直闪烁
#define FLASH_YES_TIME 2//闪烁一定时间
#define NO_FLASH 0 //不闪烁
#define FLASH_WIDTH 127 //闪烁占空比
bank1 uint8_t flash_status; //闪烁状态控制 闪烁,关闭,定时闪烁
bank3 uint16_t displaybuffer[32];//显示缓冲区
bank3 uint16_t * displaybuffer_16mux16=&displaybuffer[0];//显示缓冲区指针
bank1 uint16_t flash_displaybuffer[16];//闪烁缓冲区
bank2 uint16_t BG_display_16mux16[16];//背景显示缓冲区
bank2 uint16_t ROLE_display_16mux16[16];//角色显示缓冲区
bank1 uint8_t buffer_y=0; //纵坐标
bank1 uint8_t flash_ctrl; //闪烁控制变量
bank1 uint8_t flash_fre_ctrl=64; //速度等级1/2/4/8/16/32/64/128
bank1 uint16_t flash_time; //闪烁时间变量 时间约为 flash_time/48秒
#define DISPLAY_CMD_OVER 255 //显示游戏结束
#define DISPLAY_CMD_FLASH_TIME 254 //带时间闪烁
#define DISPLAY_CMD_FLASH 253 //不带时间闪烁
#define DISPLAY_CMD_FLASH_CLR 252 //清除闪烁信息
#define DISPLAY_CMD_FLASH_CLOSE 251 //关闭闪烁
#define DISPLAY_CMD_WIN 250 //游戏胜利
#define DISPLAY_CMD_CLR 249//清屏指令
#define DISPLAY_CMD_BG_CLR 248 //清屏背景指令
#define DISPLAY_CMD_ROLE_CLR 247 //清屏角色层指令
void display_cmd(uint8_t cmd,uint16_t d_data);//显示命令输入
//游戏结束显示YOU_OVER
ROM_DTAT int16_t game_over[]={
0x0000,0x0000,0x0000,0x0000,0x5722,0x3155,0x7755,0x5155,
0x7752,0x0000,0x0000,0x3184,0x4a44,0x4a44,0x4a4a,0x4991};
//游戏胜利显示YOU_WIN
ROM_DTAT int16_t game_win[]={
0x0000,0x0000,0x0000,0x0000,0x651c,0x552a,0x552a,0x552a,
0x4d49,0x0000,0x0000,0x3184,0x4a44,0x4a44,0x4a4a,0x4991};
//背景显示缓冲区初始化为游戏开始,显示哆啦A梦铃铛
ROM_DTAT int16_t game_dora[]={
0x07c0,0x1e70,0x331c,0x6186,0x41c3,0xc1c1,0xc083,0x800f,
0xc019,0xf833,0x4fe2,0x6306,0x300c,0x1c18,0x07f0,0x01c0};
#define CODE_A 0x77
#define CODE_B 0x7c
bank1 uint8_t LED_cur;//当前7段LED位
//#define display_LED_total_NO()
//游戏配置
#define MODEL_OVER 1
#define MODEL_WIN 0
#define A_model 1
#define B_model 0
bank1 uint8_t game_model; //游戏模式
#define GANE_BEGIN 0
#define GANE_STOP 1
int1_t stop_game=GANE_BEGIN; //全局停止变量
bank1 uint16_t currspeed; //游戏速度
bank1 uint16_t addspeed; //速度键控制
bank1 uint16_t total_NO=0; //游戏分数
//键盘配置
#define UP 0b01111100
#define DOWN 0b01111010
#define LEFT 0b01110110
#define RIGHT 0b01101110
#define OK 0b01011110
#define STOP 0b00111110
bank1 uint8_t keywords; //当前键值,线选取键值0111 1110
#define SHORT_PUSH 3500 //键盘连击速度 (延时时间-SHORT_LONG)/15
//keywords_delay=LONG_PUSH;
//游戏配置
#define DEFAULTS 0 //默认的游戏状态
#define SNAKE 1
#define BRICK 2
#define HIT_BRICK 3
#define LOSTWAY 4
bank1 uint8_t Current_game=DEFAULTS;//当前游戏状态0为等待游戏选择
bank1 uint8_t select_game=DEFAULTS;//当前游戏状态0,游戏选择变量
void defaults(void);
void snake(void);
void brick(void);
void hit_brick(void);
void lostway(void);
void defaults_key(void);
void key_hit(void);//打砖块键盘处理
void key_snake(void); //贪食蛇键盘注册
void key_brick(void); //键盘处理
void lostway_key(void); //迷宫键盘处理
typedef struct //游戏流程结构体
{
void (* my_game)(void);//流程程序
ROM_DTAT int16_t * my_game_wait;
//注册键盘竟然,与中断冲突,古怪的编译器
} MY_GAME;
//游戏配置
#include "C51_2_ANSI.H"
#include "CLASS_MAP.H"
#include "snake.h"
#include "hit_brick.h"
#include "brick.h"
#include "lostway.h"
ROM_DTAT MY_GAME game[5]={
defaults,game_dora,snake,game_snake,brick,game_brick,hit_brick,game_brick_hit,lostway,game_lostway};
#define SPEED_0 16
ROM_DTAT int16_t display_speed_0[SPEED_0]={
1500,1400,1300,1200,1000,1100,1200,1300,
1400,1500,1600,1800,2000,2500,5000,7000,
};
#define SPEED_1 2
ROM_DTAT int16_t display_speed_1[SPEED_1]={
7000,9000//,11000
};
#define SPEED_2 3
ROM_DTAT int16_t display_speed_2[SPEED_2]={
7000,5000,4000//,3000
};
#define SPEED_3 1
#define display_speed_3 4000//,5000
void display_moving_down(const int16_t *cur);
void display_moving_up(const int16_t *cur);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -