自助免费搭建网站,公司的网站怎么做推广方案,社交营销主要有哪些跨境电商平台,济南专业网站设计公司文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介
本项目使用STM32F103C8T6单片机控制器#xff0c;使用IIC OLED模块、按键等。
主要功能#xff1a; 系统运行后#xff0c;OLED显示游戏界面#xff0c;可通过K1-K4键控制蛇的方向#xff0c;当蛇吃… 文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介
本项目使用STM32F103C8T6单片机控制器使用IIC OLED模块、按键等。
主要功能 系统运行后OLED显示游戏界面可通过K1-K4键控制蛇的方向当蛇吃到食物得分加1K1左K2右K3上K4下。 二、软件设计
/*
作者嗨小易QQ3443792007*/void GUI_Init()//界面初始化
{OLED_Clear();Snake_Init();Food();OLED_Refresh();
}void GUI_Refresh(int map[32][12])//界面刷新
{int i,j,temp;for(i0;i32;i){for(j0;j12;j){tempmap[i][j];if(temp2){Paint_Body(i,j); }else if(temp-2){Paint_Map(i,j); }else if(temp-1){Paint_Food(i,j); }else if(temp0){Paint_Clean(i,j); } }}OLED_Refresh();}void Creat_map(int map[32][12])//创建地图
{int i,j;for(i0;i12;i){for(j0;j32;j){if(i0||i11){map[j][i]-2;}if(j0||j31){map[j][i]-2;}}}
}
void Paint_Map(int x,int y)//绘制地图
{int i,j;for(i4*y;i4*y4;i) {for(j4*x;j4*x4;j){OLED_DrawPoint(j,i16); }}}void Paint_Head(int x,int y )//绘制蛇头
{int i,j;for(i4*y;i4*y4;i) {for(j4*x;j4*x4;j){OLED_DrawPoint(j,i16); }}
}void Paint_Food(int x,int y )//绘制食物
{int i,j;for(i4*y;i4*y4;i) {for(j4*x;j4*x4;j){if(i4*y1||i4*y2){OLED_DrawPoint(j,i16); }if(j4*x1||j4*x2){OLED_DrawPoint(j,i16); } }}}
void Paint_Tail(int x,int y )//绘制尾巴
{int i,j;for(i4*y;i4*y4;i) {for(j4*x;j4*x4;j){if(i4*y1||i4*y2){OLED_DrawPoint(j,i16); }if(j4*x1||j4*x2||j4*x3){OLED_DrawPoint(j,i16); } }}}
void Paint_Body(int x,int y )//绘制身体
{int i,j;for(i4*y;i4*y4;i) {for(j4*x;j4*x4;j){if(i4*y||i4*y3){OLED_DrawPoint(j,i16); }if(j4*x||j4*x3){OLED_DrawPoint(j,i16); }}}
}
void Paint_Clean(int x,int y )//清除点
{int i,j;for(i4*y;i4*y4;i) {for(j4*x;j4*x4;j){OLED_ClearPoint(j,i16); }}
}void Snake_Init()//蛇及食物初始化
{ int i;length5;score0;snake_Grid[0][0]7;//x坐标,蛇头坐标snake_Grid[0][1]5;//y坐标for(i1;i5;i){snake_Grid[i][0]snake_Grid[0][0]-i;snake_Grid[i][1]snake_Grid[0][1]; //给刚开始的蛇身几个初始坐标}directionRIGHT;Creat_map(map);
}void Move()//移动
{int i;map[snake_Grid[length-1][0]][snake_Grid[length-1][1]]0;//清除尾巴if(eated) //如果吃到了食物{length;eatedfalse; //设置为false不然无限变长}for(ilength-1;i0;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(i0;ilength;i){xsnake_Grid[i][0];ysnake_Grid[i][1];map[x][y]2; }
}
void Get_Command()//获取键盘值
{int key0;keyKEY_Scan(0);if(key){switch(key){case 1:if(direction!RIGHT) //上directionLEFT;break;case 2:if(direction!LEFT) //下directionRIGHT;break;case 3:if(direction!DOWN) //左directionUP;break;case 4:if(direction!UP) //右directionDOWN;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 isGameOverfalse;int sxsnake_Grid[0][0],sysnake_Grid[0][1],i;//蛇头坐标for(i1; ilength; i) //判断有没有吃到自己{if(snake_Grid[i][0]sxsnake_Grid[i][1]sy)isGameOvertrue;}return isGameOver;
}int Chek(int i,int j)//检查地图空位
{if(map[i][j]!0){return 0;}return 1; //是空位就返回1
}void Food()//生成食物
{int i,j;do{irand()%30; //生成0~H-1之间的一个数jrand()%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{eatedtrue; //标记已经吃到食物score1;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设计视频分享技术交流。