概述
-
概述:上一篇中介绍了lcd的驱动函数,最后得到了一个函数,可以在lcd上任意位置作点;这就让我们可以画出一共十九个俄罗斯方块图形(包括同种图形的变化体)
-
如图一共有这么多中方块,在这个我给他们分别标注了序号,会在下面的程序中使用
-
下面是代码和对应的解释:
首先需要画出一个方块的函数在这里我设置了一个方块在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、俄罗斯方块生成函数)(大三寒假)的全部内容,希望文章能够帮你解决基于stm32的俄罗斯方块游戏机(3、俄罗斯方块生成函数)(大三寒假)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复