我是靠谱客的博主 结实豆芽,最近开发中收集的这篇文章主要介绍基于stm32的俄罗斯方块游戏机(3、俄罗斯方块生成函数)(大三寒假),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  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、俄罗斯方块生成函数)(大三寒假)的全部内容,希望文章能够帮你解决基于stm32的俄罗斯方块游戏机(3、俄罗斯方块生成函数)(大三寒假)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部