打印俄罗斯方块出错

0

代码和教程一样,运行后效果却不一样。(我是vs2012,教程是dev c++。)教程上的各个小方块整齐地堆在一起形成规则的俄罗斯方块,但我运行出来后却是小方块上下之间占有一个空格。

#include<stdio.h>        //printf、scanf
#include<Windows.h>      //获取控制台上坐标位置、设置字体颜色

int color(int c);                    
void gotoxy(int x,int y);            //光标移到指定位置

//文字颜色函数
int color(int c)
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);//更改文字颜色
	return 0;
}

//获取屏幕光标位置
void gotoxy(int x,int y)
{
	COORD pos;
	pos.X=x;
	pos.Y=y;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}

//欢迎界面上方的标题
void title()
{
	color(15);
	gotoxy(24, 3);
	printf("   俄  罗  斯  方  块   \n");
	color(11);
	gotoxy(18, 5);
	printf("■");
	gotoxy(18, 6);
	printf("■■");
	gotoxy(18, 7);
	printf("■");

	color(14);
	gotoxy(26, 6);
	printf("■■");
	gotoxy(28, 7);
	printf("■■");//

	color(10);
	gotoxy(36, 6);
	printf("■■");
	gotoxy(36, 7);
	printf("■■");

	color(13);
	gotoxy(45, 5);
	printf("■");
	gotoxy(45, 6);
	printf("■");
	gotoxy(45, 7);
	printf("■");
	gotoxy(45, 8);
	printf("■");

	color(12);
	gotoxy(56, 6);
	printf("■");//
	gotoxy(52, 7);
	printf("■■■");
}


//主函数
int main()
{
	title();
}

悬赏金额:¥2 元

1. 回答问题后,可以看到提问者联系方式。

2. 如果对问题有不明确的地方,可以在回复中写下你的疑问,就可以看到提问者的联系方式,然后详细沟通。

3. 如果私下沟通解决了问题,建议回答者将解决方案补充到本站,提问者勾选正确答案。每个人回答的问题数量,是能力的象征。

4. 回答问题后,可以通过提问者的联系方式私下协商领取悬赏的方式,本站不做任何干涉,不做担保,不抽取佣金,请双方谨慎操作。

0

最终查明:

教材是基于控制台的,但是实际使用是在 win11 下用的新的控制台,新控制台下默认字体不再是等宽的,于是造成显示格式错位的问题。

解决办法:恢复原来的 cmd 控制台。
打开 win11 的系统设置 -> 隐私和安全性 -> 开发者选项,找到“终端”项,里面有三项:“让 Windows 决定(默认)、Windows 控制台主机、Windows 终端”,改为“Windows 控制台主机”即可。

但是这样做仍然无法解决应用跑在别人电脑上无法正确显示的问题。比较好的解决办法是推荐使用 easyx 这样的简单绘图,比控制台容易,学习简单,且效果更好。

ava
慢羊羊

2023-12-11

技术讨论社区