内容介绍
内容介绍
1.任务目的
在Funpack第11期的板卡上,实现一个谷歌网页离线时的小恐龙游戏。
2.硬件介绍
3.素材准备
在网页中截出图片
小恐龙
障碍物
放到软件里面取模
4.MCUXpresso Config Tools配置
NXP提供了MCUXpresso Config Tools v10这个非常方便的配置工具,可以快速生成IO初始化以及外设初始化的代码。这里我的主要配置如下:
IO初始化
配置了OLED屏以及按键的IO。
时钟树
主时钟来源是外部的32MHz的晶振,通过PLL0分频倍频,主频为150MHz。
5.主要代码
mian函数
主要就是初始化各种外设,然后清屏启动小恐龙游戏的代码
POWER_SetBodVbatLevel(kPOWER_BodVbatLevel1650mv, kPOWER_BodHystLevel50mv, false);
BOARD_InitBootPins();
SystemCoreClockUpdate();
/* Set systick reload value to generate 1ms interrupt */
if (SysTick_Config(SystemCoreClock / 1000U))
{
while (1)
{
}
}
OLED_Init(); //初始化OLED
OLED_Clear();
SysTick_DelayTicks(100);
Dino_Start();
while (1)
{
/* Delay 1000 ms */
SysTick_DelayTicks(1000U);
}
小恐龙游戏主要代码
游戏界面刷新与显示都在这里
short i = 0;
unsigned char ss[8] = {0},c_t,d_t,l_t;
while (1)
{
if((xr[0] > 0) && (dino_y > 4))
{
OLED_Line(0, xr[0]);
}
for(i=0; i<3; i++)
{
if(i==1) OLED_Display_Dino(dino_y);
if(xr[i] < 126)
{
OLED_Display_Cactus(xr[i]);
OLED_Line(xr[i] + 8, xr[i+1] - xr[i]);
}
}
if((xr[0] < 16) && ( dino_y < 16))
{
if(xr[0] > 0)
{
c_t = 0;
d_t = xr[0];
l_t = 16 - xr[0];
}
else
{
c_t = 0 - xr[0];
d_t = 0;
l_t = 8 + xr[0];
}
while(l_t--)
{
if(dino_y > 8)
{
if(Cactus_8_16[0][c_t] & (Dino[1][d_t] >> (dino_y - 8))) game_over();
}
else
{
if(Cactus_8_16[0][c_t] & ((Dino[0][d_t] >> (dino_y)) | (Dino[1][d_t] << (8-dino_y)) ))game_over();
}
c_t++;d_t++;
}
}
ss[3] = (s/100)%10+48;
ss[2] = (s/1000)%10+48;
ss[1] = (s/10000)%10+48;
ss[0] = (s/100000)%10+48;
OLED_ShowString(92,0,ss);
if(s>80000) speed = 7;
else if(s>70000) speed = 8;
else if(s>60000) speed = 9;
else if(s>50000) speed = 10;
else if(s>40000) speed = 11;
else if(s>30000) speed = 12;
else if(s>20000) speed = 13;
else if(s>10000) speed = 14;
SysTick_DelayTicks(1);
Dino_Tick();
}
按键与障碍物代码
用于判断跳起按键与障碍物移动生成。
static char jump = 1,cc = 0,dd =0;
cc ++; dd++;
if((KEY_IN == 0) && (jump))
{
if(cc > xx2[dino_y])
{
cc=0;
dino_y++;
if(dino_y == 30) jump =0;
}
}
else
{
jump = 0;
if(cc > xx2[dino_y])
{
cc=0;
if(dino_y)dino_y--;
if((dino_y==0) && (KEY_IN)) jump =1;
}
}
if(dd == speed)
{
dd=0;
xr[0]--;
xr[1]--;
xr[2]--;
xr[3]--;
if(xr[0] < -5)
{
xr[0] = xr[1];
xr[1] = xr[2];
xr[2] = xr[3];
xr[3] = xr[3] +50 + (cc*cc)%50;
}
s++;
}
6.实际演示
7.意见与感想
不知不觉一年过去了,真的好快啊,很感谢硬禾这一年来的陪伴,获得了很多板卡,也得到了很多知识,虽然我不是学生,但是还是感觉这个活动大大扩宽了我的视野,发现之前的我太局限了,感谢硬禾给我带来了一个这样丰富多彩的嵌入式世界,也很期待第二期Funpack活动。4月再见吧。
附件下载
代码.zip
团队介绍
无
团队成员
冷月烟
评论
0 / 100
查看更多
猜你喜欢
魂斗罗战士VS谷歌小怪兽---基于51单片机和串口控制LED点阵基于STC15W204 (8051内核)单片机和8位移位寄存器芯片控制LED点阵。本次项目通过串口与单片机进行通信从而实现人机交互的功能,最终可以在LED点阵上实现魂斗罗战士和小恐龙的形象,且可以通过键盘摁键实现各种动作。
Thrshbia
1645
基于M5StickC plus制作的小恐龙游戏2022暑假在家练 M5StickC plus 小恐龙游戏 platformio C语言
pvfcd
2068
用msp430和按键实现菜单功能旋转编码器和两个按键串联在一个r-2r电阻网络中,使用adc检测输入电压,判断三者的状态,使用两个按键作为上下选择选项的按钮,使用旋转编码器按下作为确认键,实现二级菜单,并实现了一些基础的功能,比如字体大小的变换,简单的图片。
jupiter
789