【STM32单片机】推箱子游戏设计

文章目录

  • 一、功能简介
  • 二、软件设计
  • 三、实验现象
  • 联系作者


一、功能简介

本项目使用STM32F103C8T6单片机控制器,使用按键、IIC OLED模块等。
主要功能:
系统运行后,OLED显示第一关推箱子游戏界面,通过KEY1、KEY2、KEY3和KEY4 4个按键控制玩家上、下、左和右移动方向。每将箱子全部移动到目的地,则进入下一关地图,默认项目中设计了4种地图,用户可根据配套上位机软件生成游戏地图。


二、软件设计

/*
作者:嗨小易(QQ:3443792007)*///按键消息处理
void key_event(void)
{u8 i=0,k=0;//获取玩家的位置for(i=0;i<MAP_ROW;i++){for(k=0;k<MAP_COL;k++){if(map[glevel][i][k]==PLAYER || map[glevel][i][k]==PLAYER+DEST)goto end;}}
end://方向键 上下左右switch(gkey_value){case KEY1_PRESS://能不能够移动 玩家前面是空地,直接移动if(map[glevel][i-1][k]==SPACE || map[glevel][i-1][k]==DEST){map[glevel][i-1][k]+=PLAYER;map[glevel][i][k]-=PLAYER;}//前面是箱子,还要判断箱子的前面是什么else if(map[glevel][i-1][k]==BOX || map[glevel][i-1][k]==BOX+DEST){if(map[glevel][i-2][k]==SPACE || map[glevel][i-2][k]==DEST){//把箱子移动到前面位置map[glevel][i-2][k]+=BOX;//让原来箱子的位置,减去箱子,然后加上玩家map[glevel][i-1][k]=map[glevel][i-1][k]-BOX+PLAYER;//让玩家在原来的位置消失map[glevel][i][k]-=PLAYER;}}OLED_Clear_Gram();break;case KEY2_PRESS://能不能够移动 玩家前面是空地,直接移动if(map[glevel][i+1][k]==SPACE || map[glevel][i+1][k]==DEST){map[glevel][i+1][k]+=PLAYER;map[glevel][i][k]-=PLAYER;}//前面是箱子,还要判断箱子的前面是什么else if(map[glevel][i+1][k]==BOX || map[glevel][i+1][k]==BOX+DEST){if(map[glevel][i+2][k]==SPACE || map[glevel][i+2][k]==DEST){//把箱子移动到前面位置map[glevel][i+2][k]+=BOX;//让原来箱子的位置,减去箱子,然后加上玩家map[glevel][i+1][k]=map[glevel][i+1][k]-BOX+PLAYER;//让玩家在原来的位置消失map[glevel][i][k]-=PLAYER;}}OLED_Clear_Gram();break;case KEY3_PRESS://能不能够移动 玩家前面是空地,直接移动if(map[glevel][i][k-1]==SPACE || map[glevel][i][k-1]==DEST){map[glevel][i][k-1]+=PLAYER;map[glevel][i][k]-=PLAYER;}//前面是箱子,还要判断箱子的前面是什么else if(map[glevel][i][k-1]==BOX || map[glevel][i][k-1]==BOX+DEST){if(map[glevel][i][k-2]==SPACE || map[glevel][i][k-2]==DEST){//把箱子移动到前面位置map[glevel][i][k-2]+=BOX;//让原来箱子的位置,减去箱子,然后加上玩家map[glevel][i][k-1]=map[glevel][i][k-1]-BOX+PLAYER;//让玩家在原来的位置消失map[glevel][i][k]-=PLAYER;}}OLED_Clear_Gram();break;case KEY4_PRESS://能不能够移动 玩家前面是空地,直接移动if(map[glevel][i][k+1]==SPACE || map[glevel][i][k+1]==DEST){map[glevel][i][k+1]+=PLAYER;map[glevel][i][k]-=PLAYER;}//前面是箱子,还要判断箱子的前面是什么else if(map[glevel][i][k+1]==BOX || map[glevel][i][k+1]==BOX+DEST){if(map[glevel][i][k+2]==SPACE || map[glevel][i][k+2]==DEST){//把箱子移动到前面位置map[glevel][i][k+2]+=BOX;//让原来箱子的位置,减去箱子,然后加上玩家map[glevel][i][k+1]=map[glevel][i][k+1]-BOX+PLAYER;//让玩家在原来的位置消失map[glevel][i][k]-=PLAYER;}}OLED_Clear_Gram();break;}gkey_value=0;
}//推箱子游戏设计
void app_demo(void)
{BEEP_Init();KEY_Init();LED_Init();OLED_Init();OLED_Init();TIM4_Init(1000,36000-1);  //定时500msMy_EXTI_Init();while(1){//游戏过关if(game_pass()){glevel++;if(glevel>GAME_CENSOR){//游戏通过OLED_Clear();OLED_ShowString(10,10,"Game Pass",16);OLED_ShowString(10,30,"Reset Start",16);OLED_Refresh_Gram();while(1);}}OLED_ShowFontHZ(X_WIDTH-40,10,13,16,1);//第OLED_ShowNum(X_WIDTH-24,10,glevel+1,1,16);OLED_ShowFontHZ(X_WIDTH-16,10,14,16,1);//关game_draw();//游戏界面绘制key_event();//按键消息处理}
}

三、实验现象

B站演示视频:https://space.bilibili.com/444388619

在这里插入图片描述
在这里插入图片描述


联系作者

专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/126649.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单日 5000 亿行 / 900G 数据接入,TDengine 3.0 在中国地震台网中心的大型应用

小T导读&#xff1a;为满足地震预警数据存储、检索和处理的建设与集成需求&#xff0c;以及响应国家国产软件自主可控的号召&#xff0c;中国地震台网中心决定选用国产数据库 TDengine 来存储和处理地震波形数据。本文将针对 TDengine 3.0 在地震领域的应用展开详细讲解。 关于…

Docker通过Dockerfile创建Redis、Nginx--详细过程

创建Nginx镜像 我们先创建一个目录&#xff0c;在目录里创建Dockerfile [rootdocker-3 ~]# mkdir mynginx [rootdocker-3 ~]# cd mynginx [rootdocker-3 ~]# vim Dockerfile Dockerfile的内容 FROM daocloud.io/library/centos:7 RUN buildDepsreadline-devel pcre-devel o…

OpenGLES:绘制一个混色旋转的3D立方体

效果展示 混色旋转的3D立方体 一.概述 之前关于OpenGLES实战开发的博文&#xff0c;不论是实现相机滤镜还是绘制图形&#xff0c;都是在2D纬度 这篇博文开始&#xff0c;将会使用OpenGLES进入3D世界 本篇博文会实现一个颜色渐变、旋转的3D立方体 动态3D图形的绘制&#xf…

希尔排序:优化插入排序的精妙算法

排序算法在计算机科学中扮演着重要的角色&#xff0c;其中希尔排序&#xff08;Shell Sort&#xff09;是一种经典的排序算法。本文将带您深入了解希尔排序&#xff0c;包括其工作原理、性能分析以及如何使用 Java 进行实现。 什么是希尔排序&#xff1f; 希尔排序&#xff0c…

js 事件参考

事件参考 事件介绍 触发事件是为了通知代码可能影响代码执行的“有趣变化”。这些可能来自用户交互&#xff0c;例如使用鼠标或调整窗口大小&#xff0c;底层环境状态的变化(例如&#xff0c;低电量或来自操作系统的媒体事件)以及其他原因。 每个事件都由一个基于Event接口的…

stable diffusion学习笔记【2023-10-2】

L1&#xff1a;界面 CFG Scale&#xff1a;提示词相关性 denoising&#xff1a;重绘幅度 L2&#xff1a;文生图 女性常用的负面词 nsfw,NSFW,(NSFW:2),legs apart, paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, (…

MySQL学习笔记23

逻辑备份&#xff1a; 1、回顾什么是逻辑备份&#xff1f; 逻辑备份就是把数据库、数据表或者数据进行导出&#xff0c;导出到一个文本文件中。 2、逻辑备份工具&#xff1a; mysqldump&#xff1a;提供全库级、数据库级别以及表级别的数据备份。 mysqldumpbinlog&#xff…

一文全面解读CKA认证的含金量、详细介绍!

K8s是目前最流行的开源容器编排引擎&#xff0c;在全球都得到了广泛应用&#xff0c;BAT、京东、360、华为、网易、IBM、知乎等国内外诸多知名公司都在基于K8s构建企业容器云平台&#xff0c;支撑公司业务&#xff0c;越来越多的企业也都在向K8s迁移。相信在不远的将来&#xf…

【Sentinel】Sentinel原码分析

本文内容来自【黑马】Sentinel从使用到源码解读笔记&#xff0c;做了部分修改和补充 目录 Sentinel 基本概念 基本流程 Node Entry 定义资源的两种方式 使用try-catch定义资源 使用注解标记资源 基于注解标记资源的实现原理 Context 什么是Context Context的初始化 …

【计算机网络】应用层协议原理

文章目录 网络应用程序体系结构客户-服务器体系结构P2P体系结构 进程通信客户和服务器进程进程与计算机网络之间的接口进程寻址 可供应用程序使用的运输服务可靠数据传输吞吐量定时安全性 因特网提供的运输服务TCP服务面向连接的服务可靠数据传输服务TCP安全 UDP服务因特网运输…

在2023年使用Unity2021从Built-in升级到Urp可行么

因为最近在做WEbgl平台&#xff0c;所以某些不可抗力原因&#xff0c;需要使用Unity2021开发&#xff0c;又由于不可明说原因&#xff0c;想用Urp&#xff0c;怎么办&#xff1f; 目录 创建RenderAsset 关联Asset 暴力转换&#xff08;Menu->Edit&#xff09; 单个文件…

大模型遇上数智化,腾讯云与行业专家共探行业AI发展之路

引言 自去年底 OpenAI 推出 ChatGPT 起&#xff0c;大模型作为新的生产工具登上了新一轮生产力革命的舞台。事实上&#xff0c;数十年来历经了多次起落的 AI 技术&#xff0c;尽管一直被赋予着极高的期待&#xff0c;但在落地产业端时&#xff0c;却总显得差强人意。大模型的爆…