浏览器网站建设的步骤过程/seocms
文章目录
- 一、功能简介
- 二、软件设计
- 三、实验现象
- 联系作者
一、功能简介
本项目使用STM32F103C8T6单片机控制器,使用IIC OLED模块、按键等。
主要功能:
系统运行后,OLED显示游戏界面,可通过K1-K4键控制蛇的方向,当蛇吃到食物,得分加1;K1左,K2右,K3上,K4下。
二、软件设计
/*
作者:嗨小易(QQ:3443792007)*/void GUI_Init()//界面初始化
{OLED_Clear();Snake_Init();Food();OLED_Refresh();
}void GUI_Refresh(int map[32][12])//界面刷新
{int i,j,temp;for(i=0;i<32;i++){for(j=0;j<12;j++){temp=map[i][j];if(temp==2){Paint_Body(i,j); }else if(temp==-2){Paint_Map(i,j); }else if(temp==-1){Paint_Food(i,j); }else if(temp==0){Paint_Clean(i,j); } }}OLED_Refresh();}void Creat_map(int map[32][12])//创建地图
{int i,j;for(i=0;i<12;i++){for(j=0;j<32;j++){if(i==0||i==11){map[j][i]=-2;}if(j==0||j==31){map[j][i]=-2;}}}
}
void Paint_Map(int x,int y)//绘制地图
{int i,j;for(i=4*y;i<4*y+4;i++) {for(j=4*x;j<4*x+4;j++){OLED_DrawPoint(j,i+16); }}}void Paint_Head(int x,int y )//绘制蛇头
{int i,j;for(i=4*y;i<4*y+4;i++) {for(j=4*x;j<4*x+4;j++){OLED_DrawPoint(j,i+16); }}
}void Paint_Food(int x,int y )//绘制食物
{int i,j;for(i=4*y;i<4*y+4;i++) {for(j=4*x;j<4*x+4;j++){if(i==4*y+1||i==4*y+2){OLED_DrawPoint(j,i+16); }if(j==4*x+1||j==4*x+2){OLED_DrawPoint(j,i+16); } }}}
void Paint_Tail(int x,int y )//绘制尾巴
{int i,j;for(i=4*y;i<4*y+4;i++) {for(j=4*x;j<4*x+4;j++){if(i==4*y+1||i==4*y+2){OLED_DrawPoint(j,i+16); }if(j==4*x+1||j==4*x+2||j==4*x+3){OLED_DrawPoint(j,i+16); } }}}
void Paint_Body(int x,int y )//绘制身体
{int i,j;for(i=4*y;i<4*y+4;i++) {for(j=4*x;j<4*x+4;j++){if(i==4*y||i==4*y+3){OLED_DrawPoint(j,i+16); }if(j==4*x||j==4*x+3){OLED_DrawPoint(j,i+16); }}}
}
void Paint_Clean(int x,int y )//清除点
{int i,j;for(i=4*y;i<4*y+4;i++) {for(j=4*x;j<4*x+4;j++){OLED_ClearPoint(j,i+16); }}
}void Snake_Init()//蛇及食物初始化
{ int i;length=5;score=0;snake_Grid[0][0]=7;//x坐标,蛇头坐标snake_Grid[0][1]=5;//y坐标for(i=1;i<5;i++){snake_Grid[i][0]=snake_Grid[0][0]-i;snake_Grid[i][1]=snake_Grid[0][1]; //给刚开始的蛇身几个初始坐标}direction=RIGHT;Creat_map(map);
}void Move()//移动
{int i;map[snake_Grid[length-1][0]][snake_Grid[length-1][1]]=0;//清除尾巴if(eated) //如果吃到了食物{length++;eated=false; //设置为false,不然无限变长}for(i=length-1;i>0;i--) //从尾巴开始,每一个点的位置等于它前面一个点的位置{snake_Grid[i][0]=snake_Grid[i-1][0];snake_Grid[i][1]=snake_Grid[i-1][1];}switch(direction){case UP:snake_Grid[0][1]--;break;case DOWN:snake_Grid[0][1]++;break;case LEFT:snake_Grid[0][0]--;break;case RIGHT:snake_Grid[0][0]++;break;}Grid_Bound();//坐标限定}
void drawSnake() //画蛇
{int i,x,y;for(i=0;i<length;i++){x=snake_Grid[i][0];y=snake_Grid[i][1];map[x][y]=2; }
}
void Get_Command()//获取键盘值
{int key=0;key=KEY_Scan(0);if(key){switch(key){case 1:if(direction!=RIGHT) //上direction=LEFT;break;case 2:if(direction!=LEFT) //下direction=RIGHT;break;case 3:if(direction!=DOWN) //左direction=UP;break;case 4:if(direction!=UP) //右direction=DOWN;break;}}
}void Grid_Bound()//坐标限定
{if(snake_Grid[0][0]==31)snake_Grid[0][0]=1;else if(snake_Grid[0][0]==0)snake_Grid[0][0]=30;else if(snake_Grid[0][1]==11)snake_Grid[0][1]=1;else if(snake_Grid[0][1]==0)snake_Grid[0][1]=10; }bool GameOver()//游戏结束
{bool isGameOver=false;int sx=snake_Grid[0][0],sy=snake_Grid[0][1],i;//蛇头坐标for(i=1; i<length; i++) //判断有没有吃到自己{if(snake_Grid[i][0]==sx&&snake_Grid[i][1]==sy)isGameOver=true;}return isGameOver;
}int Chek(int i,int j)//检查地图空位
{if(map[i][j]!=0){return 0;}return 1; //是空位就返回1
}void Food()//生成食物
{int i,j;do{i=rand()%30; //生成0~H-1之间的一个数j=rand()%10;}while(Chek(i,j)==0);map[i][j]=-1;//画出食物
}void Eat_Food()//吃食物
{if(map[snake_Grid[0][0]][snake_Grid[0][1]]==-1) //如果蛇头碰到食物,就重新投放食物,并且把食物点重置为0{eated=true; //标记已经吃到食物score+=1;Food();map[snake_Grid[0][0]][snake_Grid[0][1]]=0; //去掉食物}
}void Show_Score()//显示分数
{OLED_ShowString(30,0,"Score:",16);OLED_ShowNum(80,0,score,2,16);}
三、实验现象
B站演示视频:https://space.bilibili.com/444388619
联系作者
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。
相关文章:

【STM32单片机】贪吃蛇游戏设计
文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器,使用IIC OLED模块、按键等。 主要功能: 系统运行后,OLED显示游戏界面,可通过K1-K4键控制蛇的方向,当蛇吃…...

【Java 基础】32 定时调度
文章目录 Timer 类创建 Timer注意事项 ScheduledExecutorService 接口创建 ScheduledExecutorService注意事项 选择合适的定时调度方式Timer 的适用场景ScheduledExecutorService 的适用场景 总结 在软件开发中,定时任务是一种常见的需求,用于周期性地执…...

C++ 教程 - 02 复合数据类型
文章目录 数组vector字符串输入输出结构体枚举指针引用综合案例 数组 相同类型的数据的集合{ },通过索引访问元素;在内存中连续存储,属于顺序表;插入、删除时间复杂度 O ( n ) O(n) O(n),访问复杂度 O ( 1 ) O(1) O(1…...

【数据处理】NumPy数组的合并操作,如何将numpy数组进行合并?
,NumPy中的合并操作是指将两个或多个数组合并成一个数组的操作。这种操作可以通过不同的函数来实现。 一、横向合并(水平合并) 横向合并是指将两个具有相同行数的数组按列方向合并成一个数组的操作。在NumPy中,可以使用hstack()…...

JavaScript实现飘窗功能
实现飘窗功能很简单 html代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title…...

Docker笔记:容器转换成镜像,导出导入镜像,数据拷贝,查看日志
docker commit 将容器转换成镜像 可以把容器转换成镜像镜像没有写入权限,但可以通过修改容器把容器制作成新镜像启动容器后,就给容器提供了一个可写层, 在容器里,可安装软件,可创建文件 …转换成镜像,之后…...

串行计时芯片D1380/D1381,2.0V~5.5V 工作电流: 2V时 与TTL 兼容,采用DIP8、SOP8封装
D1380/D1381是一个带秒、分、时、日、日期、月、年的串行时钟保持芯片,每个月多少天以及闰年能自动调节, D1380/D1381低功耗工作方式, D1380/D1381用若干寄存器存储对应信息,一个32.768kHz 的晶振校准时钟,为了使用最小弓|脚,D1380/D1381使用…...

中间件系列 - Redis入门到实战(基础篇)
前言 1.学习视频: 黑马程序员Redis入门到实战教程,深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 2. 本内容仅用于个人学习笔记,如有侵扰,联系删除 3. 本章学习目标: 初始Redis 认识NoSQL认识Redi…...

项目经理和产品经理该如何选择?
最近很多人咨询“项目经理跟产品经理该怎么选,我更适合哪个?”“项目经理跟产品经理哪个更有钱途 ”“项目经理转产品经理好转吗”等等,今天就一次性说清楚项目经理跟产品经理有什么区别,应该怎么选择。 不想看长篇大论的&#x…...

java WebSocket带参数处理使用
1、webSocket实现代码 Component public class WebSocketStompConfig {//这个bean的注册,用于扫描带有ServerEndpoint的注解成为websocket// ,如果你使用外置的tomcat就不需要该配置文件Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpoi…...

OkHttp: 拦截器和事件监听器
文章目录 1. 拦截器1. 拦截器链2. 实际案例1. 注册为应用拦截器2. 注册为网络拦截器 3. 如何选择用哪种拦截器1. 应用拦截器2. 网络层拦截器3. 重写请求4. 重写响应 4. 可用性 2. 事件监听器1. 请求的生命周期2. EventListener使用案例3. EventListener.Factory4. 调用失败的请…...

总结一些vue3小知识2
1.el-tree-select和el-tree组件报错(有的下拉选项选择不了,一点击就报错,但是有的却能选择,不会报错) 原因:就如同v-for一样,需要添加key才不会出现渲染错误,而el-tree-select和el-tree组件需要…...

【Excel设置动态图表】
设置系列,设置水平轴标签。 效果如图: 经验总结: 方法1:如果设置A、B列为水平轴标签,目前无法设置只是日期为横轴,店铺名称只在最下面显示一个,只能并排1列显示。 优点:如果多选…...

用 C 写一个卷积神经网络
用 C 写一个卷积神经网络 深度学习领域最近发展很快,前一段时间读transformer论文《Attention Is All You Need》时,被一些神经网络和深度学习的概念搞得云里雾里,其实也根本没读懂。发现深度学习和传统的软件开发工程领域的差别挺大…...

直面双碳目标,优维科技携手奥意建筑打造绿色低碳建筑数智云平台
优维“双碳”战略合作建筑 为落实创新驱动发展战略,增强深圳工程建设领域科技创新能力,促进技术进步、科技成果转化和推广应用,根据《深圳市工程建设领域科技计划项目管理办法》《深圳市住房和建设局关于组织申报2022年深圳市工程建设领域科…...

docker 基础入门
docker 基础入门 引言 在当今快速演进的软件开发领域,Docker 已经成为一个革命性的工具,它极大地改变了我们构建、部署和管理应用程序的方式。作为一种开源容器化平台,Docker 提供了一个轻量级且一致的环境,使得软件能够在几乎任…...

HarmonyOS:NativeWindow 开发指导
场景介绍 NativeWindow 是 HarmonyOS 本地平台化窗口,表示图形队列的生产者端。开发者可以通过 NativeWindow 接口进行申请和提交 Buffer,配置 Buffer 属性信息。 针对 NativeWindow,常见的开发场景如下: ● 通过 NativeWindow…...

汉威科技传感器为农业加点“智慧”
农业是国家之根本,历来受到高度重视,在央视《传感中国》系列节目中,智慧农业独占一期,重要性不言而喻。 随着传感器、物联网、GIS、大数据、5G、人工智能、区块链等技术的快速发展,智慧农业成为种植、养殖行业的新趋势…...

springboot listener、filter登录实战
转载自: www.javaman.cn 博客系统访问: http://175.24.198.63:9090/front/index 登录功能 1、前端页面 采用的是layui-admin框架,文中的验证码内容,请参考作者之前的验证码功能 <!DOCTYPE html> <html lang"zh…...

【数据结构—栈的实现(数组栈)】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、栈 1.1栈的概念及结构 二、栈的实现 2.1头文件的实现—Stack.h 2.2源文件的实现—Stack.c 2.3源文件的测试—test.c 三、栈的实际测试数据展示 3.1正常的出…...

Linux安装Halo(个人网站)
项目简介 1.代码开源:Halo 的项目代码开源在 GitHub 上且处于积极维护状态,截止目前已经发布了 109 个版本。你也可以在上面提交你的问题或者参与代码贡献。2.易于部署:推荐使用 Docker 的方式部署 Halo,便于升级,同时避免了各种环境依赖的问…...

Java - Spring中Bean的循环依赖问题
什么是Bean的循环依赖 A对象中有B属性。B对象中有A属性。这就是循环依赖。我依赖你,你也依赖我。 比如:丈夫类Husband,妻子类Wife。Husband中有Wife的引用。Wife中有Husband的引用。 Spring解决循环依赖的机理 Spring为什么可以解决set s…...

使用 Python 实现简单的爬虫框架
爬虫是一种自动获取网页内容的程序,它可以帮助我们从网络上快速收集大量信息。在本文中,我们将学习如何使用 Python 编写一个简单的爬虫框架。 一、请求网页 首先,我们需要请求网页内容。我们可以使用 Python 的 requests 库来发送 HTTP 请…...

Activiti七大接口,28张表详解
Activiti七大接口,28张表详解 7大接口 RepositoryService:提供管理流程部署和流程定义API。 RuntimeService:提供运行时流程实例进行管理与控制API。 TaskService:提供流程任务管理API。 IdentityService:提供对流程…...

解决msvcr120.dll文件丢失问题
项目场景: 在VMware虚拟机中安装win7家庭版系统,安装MySQL数据库,部署项目文件。 问题描述 安装MySQL数据库过程中提示“msvcr120.dll文件丢失”。 原因分析: 提示丢失msvcr120.dll文件,我们首先要到C:\Windows\Sys…...

AI日报:人工智能与新材料的发现
文章目录 总览人工智能正在革命性地发现新的或更强的材料,这将改变制造业。更坚韧的合金问题研究解决方案 新材料人工智能存在的挑战方法探索 日本的研究人员正在使用人工智能制造更强的金属合金或发现新材料,并彻底改变制造过程 总览 日本的研究人员开…...

鱼fish数据集VOC+yolo-1400张(labelImg标注)
鱼类,是最古老的脊椎动物。易蓄积重金属。 部分不同染色体数目的杂交的后代依然有生育能力。它们几乎栖居于地球上所有的水生环境,从淡水的湖泊、河流到咸水的大海和大洋。 今天要介绍鱼的数据集。 数据集名称:鱼 fish 数据集格式…...

爬虫解析-BeautifulSoup-bs4(七)
目录 1.bs4的安装 2.bs4的语法 (1)查找节点 (2)查找结点信息 3.bs4的操作 (1)对本地文件进行操作 (2)对服务器响应文件进行操作 4.实战 beautifulsoup:和lxml一样…...

分类预测 | Matlab实现OOA-SVM鱼鹰算法优化支持向量机的多变量输入数据分类预测
分类预测 | Matlab实现OOA-SVM鱼鹰算法优化支持向量机的多变量输入数据分类预测 目录 分类预测 | Matlab实现OOA-SVM鱼鹰算法优化支持向量机的多变量输入数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现OOA-SVM鱼鹰算法优化支持向量机的多变量输…...

2.vue学习笔记(目录结构+模板语法+属性绑定)
文章目录 1.目录结构2.模板语法2.1.文本插值2.2.使用JavaScript表达式2.3.原始HTML 3.属性绑定3.1.简写3.2.布尔型Attribute3.3.动态绑定多个值 1.目录结构 1.vscode ——VSCode工具的配置文件夹 2.node_modules ——Vue项目的运行依赖文件夹 3.public ——资源文件夹&am…...