#include"U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);//设置设备名称:I2C-SSD1306-128*64(OLED)
#define UP 11//定义方向键上为Arduino引脚11号引脚
#define DOWN 10//定义方向键下为Arduino引脚10号引脚
#define LEFT 9//定义方向键上为Arduino引脚9号引脚
#define RIGHT 8//定义方向键上为Arduino引脚8号引脚
#define A 7//定义方向键上为Arduino引脚7号引脚
#define B 6//定义方向键上为Arduino引脚6号引脚
/***********************************************/
//初始化变量
//声明变量很多地方用了byte类型不用int类型,可以节约内存
byte wait=40;//延迟
int HP=20;//HP
byte PPX=4;//初始化玩家X位置
byte PPY=2;//初始化玩家Y位置
byte PX=0;//初始化玩家X轴坐标
byte PY=0;//初始化玩家Y轴坐标
int RT=1;//初始化运行周期
int S=0;//分数
byte OA;//障碍物
byte OB;//障碍物
byte OC;//障碍物
byte OD;//障碍物
int Atmp=0;//缓存A
int Btmp;//缓存B
//下面湿障碍物的数据,我们把障碍物数据保存在数组里,由运行内存显示,每隔20次运行周期会重新覆盖,保存内存不溢出
byte CA[50];//障碍物A的位置
byte CB[50];//障碍物B的位置
byte CC[50];//障碍物C的位置
byte CD[50];//障碍物D的位置
//下面湿障碍物A、B、C、D的坐标信息
byte CAX[50];//障碍物A_X轴
byte CBX[50];//障碍物B_X轴
byte CCX[50];//障碍物C_X轴
byte CDX[50];//障碍物D_X轴
byte CAY[50];//障碍物A_Y轴
byte CBY[50];//障碍物B_Y轴
byte CCY[50];//障碍物C_Y轴
byte CDY[50];//障碍物D_Y轴
//载入位图
const uint8_t title[] PROGMEM=
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
const uint8_t QR[] PROGMEM=
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
const uint8_t pause[] PROGMEM=
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
const uint8_t plane[] PROGMEM=
{0x8,0xc,0x8c,0xff,0xff,0x8c,0xc,0x8};
const uint8_t BOA[] PROGMEM=
{0xcc,0xcc,0x33,0x33,0xcc,0xcc,0x33,0x33};
const uint8_t BOB[] PROGMEM=
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
const uint8_t BOC[] PROGMEM=
{0x18,0x66,0x7e,0xbd,0xbd,0x7e,0x66,0x18};
const uint8_t BOD[] PROGMEM=
{0x0,0x7e,0x42,0x5a,0x5a,0x42,0x7e,0x0};
const uint8_t life[] PROGMEM=
{0x0,0x66,0xff,0xcf,0xdf,0x7e,0x3c,0x18};
/********************************************************/
void setup() {
// put your setup code here, to run once:
//初始化按钮
pinMode(UP,INPUT);//定义方向键上的引脚状态
pinMode(DOWN,INPUT);//定义方向键下的引脚状态
pinMode(LEFT,INPUT);//定义方向键左的引脚状态
pinMode(RIGHT,INPUT);//定义方向键右的引脚状态
pinMode(A,INPUT);//定义A的引脚状态
pinMode(B,INPUT);//定义B的引脚状态
randomSeed(analogRead(A0));//伪随机数PIN
u8g.firstPage();
do
{
u8g.drawXBMP(0,0,128,64,title);
}
while(u8g.nextPage());
delay(1024);
}
/**********************************************************/
void(* resetFunc)(void)=0;//制造从起命令的函数,下面会用到
void loop() {
// put your main code here, to run repeatedly:
//下面是GAME OVER或胜利后的处理
if(HP30000)
{
//循环检测按钮
while(1)
{
//如果GAME OVER就等待按下A键复位游戏
if(digitalRead(A)==HIGH)
if(HP=30000){
while(1)
{u8g.setColorIndex(1);
u8g.firstPage();
do
{
u8g.drawXBMP(40,8,56,49,QR);
}
while(u8g.nextPage());
}
}
}
}
if(digitalRead(UP)==HIGH)
{
delay(10);
if(digitalRead(UP)==HIGH)
{
if(PPY>1) PPY-=1;
}
}
if(digitalRead(DOWN)==HIGH)
{
delay(10);
if(digitalRead(DOWN)==HIGH)
{
if(PPY1) PPX-=1;
}
}
if(digitalRead(RIGHT)==HIGH)
{
delay(10);
if(digitalRead(RIGHT)==HIGH)
{
if(PPX |