change()方法变换图像判断有漏洞,以及对传参的疑问

change()方法变换图像判断有漏洞,以及对传参的疑问

change()方法变换内部实现碰撞判断的时候不应当只考虑边界判断,还需要考虑画布内已经存储的色块,两个if判断应当改成 move_down()方法中的碰撞判断逻辑才对。

大白老师的change()方法:

int change_shape()
{
	int m = (dynamic_mode + 1) % 4;

	//右侧越界判断
	if(dynamic_x + 2 * (4 - shape[dynamic_num][m][16]) - 1 > 39)
		return 1;

	//右侧越界判断
	if(dynamic_y + 2 * (4 - shape[dynamic_num][m][17]) - 1 > 29)
		return 1;

	erase_last_shape(dynamic_num,dynamic_mode,dynamic_x,dynamic_y);
	dynamic_mode = m;
	print_mode_shape(dynamic_num,dynamic_mode,dynamic_x,dynamic_y,dynamic_color);
}

修改后的change()方法:

change()
	//右边界判断
	if((dynamic_x + 2*(4 - shape[dynamic_num][m][16]) - 1 > 39) ||judge_shape(dynamic_num, m,dynamic_x,dynamic_y))
		return 1;
	//下边界判断
	if((dynamic_y + (4 - shape[dynamic_num][m][17]) - 1 > 29) ||judge_shape(dynamic_num, m,dynamic_x,dynamic_y))
		return 1;

老师在设计俄罗斯方块项目的函数中,为什么是通过形参的将全局变量传入函数体中,而不是直接引用全局变量?
示例:

int move_down(int n ,int m)
{
	//写俄罗斯方块项目的时候经常忘记形参n和m
	if((dynamic_y + (4 - shape[n][m][17]) - 1 >= 29) ||jude_shape(dynamic_num, dynamic_mode,dynamic_x,dynamic_y+1))
	
	{
		store_current_shape();
		init_new_shape();
		next_shape();
		return 1;
	}
	//写俄罗斯方块项目的时候经常忘记形参n和m
	clear_shape(dynamic_num,dynamic_mode,dynamic_x,dynamic_y);
	
	dynamic_y++;
	
	//写俄罗斯方块项目的时候经常忘记形参n和m
	print_mode_shape(dynamic_num,dynamic_mode,dynamic_x,dynamic_y,dynamic_color);

	return 0;
}

3.游戏结束处理有问题,以下是老师上传在慕课代码仓库中的效果:
图片描述
推测是main.c中的sig_handler()有问题,但是,直接按q退出游戏是正常的
图片描述
目前想到的方案是把光标重新定个位。

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

整体不错,对之前的代码有很多的优化点。
回答1:我这个函数的前两个if语句主要是判断图形变化的时候的可行性。取的是最极端的边界值坐标。只需要考虑边界值是否触碰即可。你这个还需要考虑画布内已经存储的色块 的触发场景是什么样的?

回答2:可以直接引用全局变量,设计参数是为了函数更好的扩展,要是有特殊需求,使用其他的坐标值,可以通过参数改变,基于此之前设计的时候使用了参数,直接使用全局变量也行。
回答3:
这个是之前的一个隐藏的bug,游戏结束后teorims回显的属性没有写回去。后面好像修复了,晚点我看看git仓库的代码,更新上去。


慕小白0101 提问者 2023-04-10 16:39:31
void gameover()
{
printf("\33[32;9H************ Game Over***********************************\33[0m");
printf("\033[33;0H");
printf("\033[?25h");//显示光标
printf("\n\n");
recover_attribute();
}

游戏结束后的优化

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师