C语言 2048 增加一些功能

2048

C语言 2048(每步细致讲解)



前言

  • 接着之前写的2048基础上进行增加和优化。
  • 增加了5个函数。
  1. 增加存储的得分功能和读取得分功能,
  2. 改变字体颜色,
  3. 窗口界面之间跳转功能
  4. 增加窗口选择界面功能
  5. 增加游戏介绍界面功能

存取功能

存入得分

void Save(){
	FILE *f;//指向文件的指针
	f=fopen("HScore.txt","w");//打开HScore文件,若没有会自动创建
	fprintf(f, "%d",score);//把得分存入
	fclose(f);//关闭文件
}
  • 调用Save()函数放在over()函数后面,每次游戏结束后就会把这次得分存入
  • 若重新开一把游戏会覆盖之前的得分记录。

读取得分

int load(){
	int s;
	FILE *f;
	f=fopen("HScore.txt","r");
	fscanf(f,"%d",&s);//将分数存入s
	fclose(f);
	return s;
}
  • load()函数要在main()函数里最开始(游戏开始前)调用,
  • 当然higher是全局变量

higher=load();

  • 把得分数赋给一个值,稍后用到,

选择界面

  • 之前时运行直接开始游戏,现在可以在游戏开始前进行一些选择和设置
void chosemenu(){
	system("CLS");
	int num;
	printf("               1.开始游戏\n");
	printf("               2.继续游戏\n");
	printf("               3.游戏玩法\n");
	printf("               4.上次得分:%d\n",higher);//打印出刚才读取的分数
	printf("               5.音乐设置\n");
	printf("               6.退出\n");
	num=getch();
	switch(num){
		case '1':
				start();
				break;
		case '2':
				tip();
				break;
		case '3':
				gameintro();
				break;
		case '5':
				tip();
				break;
		case '6':
				exit(0);

	}
}
  • 调用chosemenu()就可以代替之前的start()位置,并把调用start()放在选择界面函数里,(这里要注意定义start()函数要放在chosemenu()之前)
  • 刚才读取的得分在这里打印出来

介绍界面

void gameintro(){
	int num;
	sleep(1);//延迟
	system("CLS");
	printf("游戏介绍\n");
	printf("1、手指向一个方向滑动,所有格子会向那个方向运动。\n");
	printf("2、相同数字的两个格子,相撞时数字会相加。\n");
	printf("3、每次滑动时,空白处会随机刷新出一个数字的格子。\n");
	printf("4、当界面不可运动时(当界面全部被数字填满时),游戏结束;当界面中最大数字是2048时,游戏胜利。\n");
	printf("enter q return\n");
	num=getch();
	while(num!='q'){
		printf("未开发\n");
		gameintro();
	}
	chosemenu();
}
  • 在刚才的选择界面中,按’3’跳转到游戏介绍界面,
  • sleep(1);函数是延迟执一点时间执行后面的代码,有一个缓冲时间,
  • 选择界面其他的一些功能还没有实验,先写出来,以后有时间实现,写一个tip函数
void tip(){
	int num;
	sleep(1);
	system("CLS");
	printf("未开发\n");
	printf("enter q return\n");
	num=getch();
	while(num!='q'){
		printf("未开发\n");
		tip();
	}
	chosemenu();
}

字体颜色

  • 颜色函数
颜色函数SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),前景色 | 背景色 | 前景加强 | 背景加强);
  • 颜色函数要放在你要打印的字体之前,那么颜色函数之后的所有要打印的字体都换变成一个颜色
  • 要想每次打印的颜色不一样,那么就在要打印之前都加上颜色函数,并修改值
  • 所以,刚才的选择界面修改如下
void chosemenu(){
	system("CLS");
	int num;
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4);
	printf("               1.开始游戏\n");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),5);
	printf("               2.继续游戏\n");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),3);
	printf("               3.游戏玩法\n");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),2);
	printf("               4.上次得分:%d\n",higher);
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),1);
	printf("               5.音乐设置\n");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),6);
	printf("               6.退出\n");
	num=getch();
	switch(num){
		case '1':
				start();
				break;
		case '2':
				tip();
				break;
		case '3':
				gameintro();
				break;
		case '5':
				tip();
				break;
		case '6':
				exit(0);

	}
}
  • 修改颜色后面的值,颜色也不一样,并且值也有限制,感兴趣的可以取搜索学习一下

  • 最后附上运行结果截图
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 之后可能实现
  • 存取最高分,不会覆盖之前存入的分数,
  • 保存游戏,重新运行可以接着上次保存的继续
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

X在学了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值