1. 概述:上一篇中介绍了lcd的驱动函数,最后得到了一个函数,可以在lcd上任意位置作点;这就让我们可以画出一共十九个俄罗斯方块图形(包括同种图形的变化体)

  2. 如图一共有这么多中方块,在这个我给他们分别标注了序号,会在下面的程序中使用

  3. 下面是代码和对应的解释:

首先需要画出一个方块的函数在这里我设置了一个方块在lcd上面的大小事10X10的大小

/*************************************************
函数名 Draw_realbox
功能:画一个俄罗斯方块;
入口参数:xy坐标
返回值:无
*************************************************/
void Draw_realbox(u16 x,u16 y)
{u8 i,n;for(i=1;i<=8;i++){for(n=1;n<=8;n++){Gui_DrawPoint((x+i),(y+n),GRAY0);   }   }for(i=0;i<=9;i++){Gui_DrawPoint((x+i),y,BLACK  );Gui_DrawPoint((x+i),(y+9),BLACK );      Gui_DrawPoint(x,(y+i),BLACK    );      Gui_DrawPoint((x+9),(y+i),BLACK   );              }
}

有画一个方块,那肯定需要对应删除一个方块的函数(不要在意我的”删除”单词写错了,我也是后面才发现的 但是改的话需要改动很多地方所以就讲究这样吧。)

/*************************************************
函数名 Deal_realbox
功能:删除一个俄罗斯方块;
入口参数:xy坐标
返回值:无
*************************************************/
void Deal_realbox(u16 x,u16 y)
{u8 i,n;for(i=0;i<=9;i++){for(n=0;n<=9;n++){Gui_DrawPoint((x+i),(y+n),WHITE);   }   }
}

然后就是画出俄罗斯方块的函数了,就是对应上面的19种格式的方块,原理是调用上面的画一个小方块函数

/*************************************************
函数名 Draw_tuxing
功能:画出19种俄罗斯方块
入口参数:xy坐标,what代表不同的俄罗斯方块
返回值:无
*************************************************/
void Draw_tuxing(u16 x,u16 y,u8 what)
{switch (what){case 1:{Draw_realbox(x,y);Draw_realbox(x+10,y);Draw_realbox(x,y+10);Draw_realbox(x+10,y+10);}break;case 2:{Draw_realbox(x,y);Draw_realbox(x+10,y);Draw_realbox(x+20,y);Draw_realbox(x+30,y);}break;case 3:{Draw_realbox(x,y);Draw_realbox(x,y+10);Draw_realbox(x,y+20);Draw_realbox(x,y+30);}break;case 4:{Draw_realbox(x+10,y);Draw_realbox(x,y+10);Draw_realbox(x+10,y+10);Draw_realbox(x+20,y+10);}break;case 5:{Draw_realbox(x+10,y+10);Draw_realbox(x,y);Draw_realbox(x,y+10);Draw_realbox(x,y+20);}break;case 6:{Draw_realbox(x,y+10);Draw_realbox(x+10,y);Draw_realbox(x+10,y+10);Draw_realbox(x+10,y+20);}break;case 7:{Draw_realbox(x+10,y+10);Draw_realbox(x,y);Draw_realbox(x+10,y);Draw_realbox(x+20,y);}break;case 8:{Draw_realbox(x,y);Draw_realbox(x,y+10);Draw_realbox(x,y+20);Draw_realbox(x+10,y+20);}break;case 9:{Draw_realbox(x,y);Draw_realbox(x,y+10);Draw_realbox(x+10,y);Draw_realbox(x+20,y);}break;case 10:{Draw_realbox(x,y);Draw_realbox(x+10,y);Draw_realbox(x+10,y+10);Draw_realbox(x+10,y+20);}break;case 11:{Draw_realbox(x,y+10);Draw_realbox(x+10,y+10);Draw_realbox(x+20,y+10);Draw_realbox(x+20,y);}break;case 12:{Draw_realbox(x+10,y);Draw_realbox(x+10,y+10);Draw_realbox(x+10,y+20);Draw_realbox(x,y+20);}break;case 13:{Draw_realbox(x,y);Draw_realbox(x+10,y);Draw_realbox(x+20,y);Draw_realbox(x+20,y+10);}break;case 14:{Draw_realbox(x,y);Draw_realbox(x+10,y);Draw_realbox(x,y+10);Draw_realbox(x,y+20);}break;case 15:{Draw_realbox(x,y);Draw_realbox(x,y+10);Draw_realbox(x+10,y+10);Draw_realbox(x+20,y+10);}break;case 16:{Draw_realbox(x+10,y);Draw_realbox(x,y+10);Draw_realbox(x+10,y+10);Draw_realbox(x,y+20);}break;case 17:{Draw_realbox(x,y);Draw_realbox(x+10,y);Draw_realbox(x+10,y+10);Draw_realbox(x+20,y+10);}break;case 18:{Draw_realbox(x,y);Draw_realbox(x,y+10);Draw_realbox(x+10,y+10);Draw_realbox(x+10,y+20);}break;case 19:{Draw_realbox(x,y+10);Draw_realbox(x+10,y+10);Draw_realbox(x+10,y);Draw_realbox(x+20,y);}break;}}

下面大家肯定知道那就是删除一个俄罗斯方块的函数

/*************************************************
函数名 Deal_tuxing
功能:
入口参数:xy坐标,what代表不同的俄罗斯方块
返回值:无
*************************************************/
void Deal_tuxing(u16 x,u16 y,u8 what)
{switch (what){case 1:{Deal_realbox(x,y);Deal_realbox(x+10,y);Deal_realbox(x,y+10);Deal_realbox(x+10,y+10);}break;case 2:{Deal_realbox(x,y);Deal_realbox(x+10,y);Deal_realbox(x+20,y);Deal_realbox(x+30,y);}break;case 3:{Deal_realbox(x,y);Deal_realbox(x,y+10);Deal_realbox(x,y+20);Deal_realbox(x,y+30);}break;case 4:{Deal_realbox(x+10,y);Deal_realbox(x,y+10);Deal_realbox(x+10,y+10);Deal_realbox(x+20,y+10);}break;case 5:{Deal_realbox(x+10,y+10);Deal_realbox(x,y);Deal_realbox(x,y+10);Deal_realbox(x,y+20);}break;case 6:{Deal_realbox(x,y+10);Deal_realbox(x+10,y);Deal_realbox(x+10,y+10);Deal_realbox(x+10,y+20);}break;case 7:{Deal_realbox(x+10,y+10);Deal_realbox(x,y);Deal_realbox(x+10,y);Deal_realbox(x+20,y);}break;case 8:{Deal_realbox(x,y);Deal_realbox(x,y+10);Deal_realbox(x,y+20);Deal_realbox(x+10,y+20);}break;case 9:{Deal_realbox(x,y);Deal_realbox(x,y+10);Deal_realbox(x+10,y);Deal_realbox(x+20,y);}break;case 10:{Deal_realbox(x,y);Deal_realbox(x+10,y);Deal_realbox(x+10,y+10);Deal_realbox(x+10,y+20);}break;case 11:{Deal_realbox(x,y+10);Deal_realbox(x+10,y+10);Deal_realbox(x+20,y+10);Deal_realbox(x+20,y);}break;case 12:{Deal_realbox(x+10,y);Deal_realbox(x+10,y+10);Deal_realbox(x+10,y+20);Deal_realbox(x,y+20);}break;case 13:{Deal_realbox(x,y);Deal_realbox(x+10,y);Deal_realbox(x+20,y);Deal_realbox(x+20,y+10);}break;case 14:{Deal_realbox(x,y);Deal_realbox(x+10,y);Deal_realbox(x,y+10);Deal_realbox(x,y+20);}break;case 15:{Deal_realbox(x,y);Deal_realbox(x,y+10);Deal_realbox(x+10,y+10);Deal_realbox(x+20,y+10);}break;case 16:{Deal_realbox(x+10,y);Deal_realbox(x,y+10);Deal_realbox(x+10,y+10);Deal_realbox(x,y+20);}break;case 17:{Deal_realbox(x,y);Deal_realbox(x+10,y);Deal_realbox(x+10,y+10);Deal_realbox(x+20,y+10);}break;case 18:{Deal_realbox(x,y);Deal_realbox(x,y+10);Deal_realbox(x+10,y+10);Deal_realbox(x+10,y+20);}break;case 19:{Deal_realbox(x,y+10);Deal_realbox(x+10,y+10);Deal_realbox(x+10,y);Deal_realbox(x+20,y);}break;}}

这些搞定之后,我们还需要三个函数,分别是:
把一种俄罗斯方块是向下移动一个单位
把一种俄罗斯方块是向左移动一个单位
把一种俄罗斯方块是向右移动一个单位
为什么没有想上呢?你玩过那一块俄罗斯方块可以向上移动??当然那些花里胡哨的改编版不算!

下面开始最后三个重点函数

向下移动

/*************************************************
函数名 Down_mov
功能:
入口参数:xy坐标,what代表种类
返回值:无
*************************************************/void Down_tuxing_move(u16 x,u16 y,u8 what)
{Deal_tuxing(x,y,what);Draw_tuxing(x,y+10,what);
}

向左移动

/*************************************************
函数名 Left_mov
功能:
入口参数:xy坐标,what代表种类
返回值:无
*************************************************/void Left_tuxing_move(u16 x,u16 y,u8 what)
{Deal_tuxing(x,y,what);Draw_tuxing(x-10,y,what);
}

向右

/*************************************************
函数名 Right_mov
功能:
入口参数:xy坐标,what代表种类
返回值:无
*************************************************/void Right_tuxing_move(u16 x,u16 y,u8 what)
{Deal_tuxing(x,y,what);Draw_tuxing(x+10,y,what);
}

现在俄罗斯方块的 显示驱动函数都搞定了,后面需要解决的就是游戏规则的函数了,说的牛逼点就是物理引擎怎么编写了,哈哈,将在下一期介绍
看起来很简单的小游戏,编起来真的不简单啊

总工程文件:点击下载

基于stm32的俄罗斯方块游戏机(3、俄罗斯方块生成函数)(大三寒假)相关推荐

  1. 基于stm32的俄罗斯方块游戏机(4、俄罗斯方块基本规则函数)(大三寒假)

    申明一下,本项目里面的执行函数,算法,都是我个人的理解.算法可能比较垃圾,可能好在32的处理能力还可以,所以最后也成功了.如果你有更好的算法或者认为我的很垃圾,能交流交流更好,但千万不要喷! 我个人觉 ...

  2. 基于stm32的俄罗斯方块游戏机(1、硬件准备)(大三寒假)

    概述:这个项目是做一个俄罗斯方块的游戏机,还原经典,该有的功能都要有. 硬件准备:一块stm32f103c8t6(只要是f103系列的最后编译应该都可以通过):一块LCD(2.2寸 220X176): ...

  3. 基于stm32的俄罗斯方块游戏机(5、俄罗斯方块产生的随机函数)(大三寒假)

    很多人第一眼看到就想到了rank()函数:但是这个函数生成的随机数是一个伪随机数,这就意味着每次断电后重新启动就会和上一次出现的随机数一模一样的顺序,这就导致了每次方块的顺序都是一样的. 还有一个函数 ...

  4. 基于stm32的俄罗斯方块游戏机(2、LCD的驱动)(大三寒假)

    我用到的是一块16位彩色的172X220的LCD. 解决那些繁琐的通讯和规定指令后,最终需要的是一个函数,可以实现给定x,y坐标和颜色,然后画出对应的点.这个可以说是最基本的函数,只要可以作点,就可以 ...

  5. 基于stm32的俄罗斯方块游戏机(6、游戏机整体的操作页面)(大三寒假)

    本来准备介绍一下代码,想想还是算了,因为这些程序都嵌套在主程序里面写的挺乱的,给出工程文件大家直接下载看看吧点击下载 然后在给一些我手上这个成品的效果图 游戏中途暂停 消除计分 游戏失败后 总工程文件 ...

  6. 最简单DIY基于STM32单片机的WIFI智能小车设计方案

    STM32库函数开发系列文章目录 第一篇:STM32F103ZET6单片机双串口互发程序设计与实现 第二篇:最简单DIY基于STM32单片机的蓝牙智能小车设计方案 第三篇:最简单DIY基于STM32F ...

  7. 最简单DIY基于STM32的远程控制电脑系统②(无线遥杆+按键控制)

    STM32库函数开发系列文章目录 第一篇:STM32F103ZET6单片机双串口互发程序设计与实现 第二篇:最简单DIY基于STM32单片机的蓝牙智能小车设计方案 第三篇:最简单DIY基于STM32F ...

  8. 最简单DIY基于STM32的远程控制电脑系统①(电容触摸+按键控制)

    STM32库函数开发系列文章目录 第一篇:STM32F103ZET6单片机双串口互发程序设计与实现 第二篇:最简单DIY基于STM32单片机的蓝牙智能小车设计方案 第三篇:最简单DIY基于STM32F ...

  9. 基于stm32、0.96寸OLED实现的俄罗斯方块小游戏(详细源码注释)

    概述:本实验基于stm32最小系统.0.96寸OLED(68*128)和摇杆实现一个经典的俄罗斯方块小游戏.项目源码地址:点击下载. 硬件要求: 普通摇杆,两个电位器和一个开关组成,左右摇动控制一个电 ...

最新文章

  1. 机器学习中的7种数据偏见
  2. Java黑皮书课后题第2章:*2.22(金融应用:货币单位)改写程序清单2-10,解决将double转int可能会造成精度损失问题。以整数值作为输入,其最后两位代表的是美分币值
  3. 耦合式是什么意思_什么是微服务?一篇文章让你彻底搞明白
  4. linux smb 启动失败,[已解决]windows能看到smb,但是打不开
  5. LeetCode算法入门- Remove Element -day20
  6. 补习系列(10)-springboot 之配置读取
  7. 如何有效开展小组教学_新型教学方法,小组合作教学,有效的提升了学生的合作技能...
  8. SSH安全审计Tool - ssh-audit
  9. 【笑话】男生追女生的数学模型
  10. 快逸报表数据库密码加密解决方案
  11. Python 背英语单词源代码
  12. 韩寒诉百度文库侵权案分析
  13. 超好用的在线思维导图网站
  14. Netty傻瓜教程(四):bossGroup, workGroup?
  15. Ubuntu18.04 sqlite3安装及其应用
  16. 嵌入式学习笔记7——LCD1602液晶屏
  17. CarSim仿真快速入门(七)—车辆参数化建模
  18. Python编写数字转换成中文大写
  19. SMB2协议特性之oplock与lease(下
  20. 浅谈oracle树状结构层级查询

热门文章

  1. 为什么传统的FPGA无法将智能传送到边缘
  2. Zotero配合WPS网盘实现多台电脑的文献管理同步-小记
  3. CVPR 2021 论文大盘点-图像视频去雨篇
  4. php token 失效时间,ThinkPHP5.1表单令牌Token失效问题的解决_php实例 - PHP
  5. JAVAj基础之封装
  6. 垃圾长城宽带,一次惨痛的系统更新经历
  7. 推荐几部好看的漫画,顺便安利一个免费漫画app
  8. 数据分析师证书需不需要考?
  9. matlab gui素材,数字图像处理配套MATLAB代码及图片素材
  10. 2017年第12届上海国际淀粉及淀粉衍生物展览会会刊(参展商名录)