其他分享
首页 > 其他分享> > 我罗斯方块最终篇

我罗斯方块最终篇

作者:互联网

作业描述 详情
这个作业属于哪个课程 2020年面向对象程序设计
这个作业的要求在哪里 我罗斯方块最终篇
这个作业的目标 代码的 git 仓库链接,运行截图/运行视频,代码要点收获与心得,依然存在的问题。
作业正文 如下
参考资料 基于C实现双人俄罗斯方块 如何做一个超低配俄罗斯方块
项目地址 Github
小组成员 学号
卢浩玮 031902511
侯钦凯 031902505

运行截图

欢迎界面

暂停界面

胜负界面

代码要点

首先是方块的初始化吧,这点挺重要的,当时也难了我们小组很久,如何保持旋转后的方块的中心不变。

int	Block_1form_1[8]={1,0,1,1,2,0,2,1};//分为4行4列,左行右列;
		int	Block_2form_1[8]={1,1,2,1,2,2,2,3};//11 21 22 23
		int	Block_2form_2[8]={1,1,1,2,2,1,3,1};//
		int	Block_2form_3[8]={1,2,2,0,2,1,2,2};//
		int	Block_2form_4[8]={3,1,3,2,2,2,1,2};//	 
		int	Block_3form_1[8]={0,2,1,0,1,1,1,2};//02 10 11 12
		int	Block_3form_2[8]={0,1,1,1,2,1,2,2};//
		int	Block_3form_3[8]={1,1,2,1,2,2,2,3};//
		int	Block_3form_4[8]={1,1,1,2,2,2,3,2};//
		int	Block_4form_1[8]={1,1,2,0,2,1,2,2};//11 20 21 22
		int	Block_4form_2[8]={1,1,2,1,3,1,2,2};//
		int	Block_4form_3[8]={2,0,2,1,2,2,3,1};//
		int	Block_4form_4[8]={1,1,2,1,3,1,2,0};//11 21 31 20
		int	Block_5form_1[8]={2,0,2,1,1,1,1,2};//20 21 11 12
		int	Block_5form_2[8]={0,0,1,0,1,1,2,1};//
		int	Block_6form_1[8]={0,1,0,2,1,0,1,1};//01 02 10 11
		int	Block_6form_2[8]={0,1,1,1,2,0,1,0};//01 11 20 10
		int	Block_7form_1[8]={1,0,1,1,1,2,1,3};//10 11 12 13
		int	Block_7form_2[8]={0,1,1,1,2,1,3,1};//

这是下落碰撞的判定部分:

void game::try_movedown()//下落碰撞判定
{
	int f1=0,f2=0;
	for(int i=21;i<51&&f1!=1;i++)
	for(int j=6;j<30&&f1!=1;j++)
	{ 
		if(map[i][j]==1&&(map[i][j+1]==2||map[i][j+1]==3))
		{
			for(int k=21;k<51;k++)
			for(int t=6;t<30;t++)
			{
				if(map[k][t]==1)
				{
					map[k][t]=2;
				}
			}
			Block1.InitateBlock();
			Block1.BuildBlock();
			Block1.b_start();
			f1=1;
		}
	}
	for(int i=81;i<111&&f2!=1;i++)
	for(int j=6;j<30&&f2!=1;j++)
	{
		if(map[i][j]==1&&(map[i][j+1]==2||map[i][j+1]==3))
		{
			for(int k=81;k<111;k++)
			for(int t=6;t<30;t++)
			{
				if(map[k][t]==1)
				{
					map[k][t]=2;
				}
			}
			Block2.InitateBlock();
			Block2.BuildBlock();
			Block2.b_start();
			f2=1;
		}
	}
}

这是玩家一的消行判定:

int flag;
	for (int j = 29;j>5;j--)
	{
	    flag = 1;
		for(int i=21;i<51;i+=2)
		{
			if(map[i][j]==0)
			flag=0;
		}
		if(flag!=0)
		{
			for(int i=11;i<51;i+=2)
			{
				map[i][j]=0;
			}
		    for(int k=j;k>6;k--)
		    {
				for(int t=21;t<51;t++)
				{
				    map[t][k]=map[t][k-1];
				}
		    }
			j++;
		}
	}

收获心得

侯钦凯的收获心得
卢浩玮的收获心得

依然存在的问题

不够美观,很多预想的功能都缺失了,像分数,下一个方块这样的,是比较简单,所以打算过两天更新一下,把这些补齐。
闪屏情况严重呀,我们小组这些作者都玩不太下去。。。回来看看同学们的,减缓一下这种闪屏情况。
后续更新中再添加一些对文件的操作,像背景,音乐什么的,给玩家一点更好的体验。

标签:11,20,21,罗斯,最终,int,方块,Block
来源: https://www.cnblogs.com/147258369k/p/13113743.html