C语言实现《2048游戏》

C语言实现《2048游戏》

滑块有颜色、有最高分(用到文件)

程序运行效果图

主页面
在这里插入图片描述1、游戏规则
在这里插入图片描述2、开始游戏

在这里插入图片描述3、继续游戏(指不退出游戏,继续再来一局,而不是接着上一局,如果需要接着上一局,要实现点存档,然后读档就可以了)
在这里插入图片描述当玩过一句游戏后,它会自动创建文件来保存最高分(破纪录后,会自动重写最高分),点存档也会创建文件来保存档案。两个文件都会直接存储在存放游戏的文件目录下。
在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
#include <conio.h> /*使用getch()函数*/
#include <time.h>
#include <windows.h> /*使用Sleep()函数*/ 

void Menu();//菜单
void Rule_of_game();//游戏规则 
void Begin(int max); //开始 
void Table();//打印4×4方格 
int Random_number1();//产生2或4的随机数 
int Random_number2();//产生0、1、2、3的随机数 
int Get(int *p_cnt, int score);//输入指令 
void Move();//保留上一次的棋盘布局 
int If_move();//判断是否移动 
int Over();//判断是否结束  
void Establish_game();//创建用于保存最高分的文件 
void Write_max(int score);//向2048游戏-最高记录写入最高分 
int Read_max();//读出最高分记录的文件
void Establish_file();//创建存档文件 
void Write_file(int *p_cnt, int scort);//存档 
int Read_file(int *p_cnt);//读档 
void again();//是否继续游戏
int color(int c);//更改颜色
void box_color(int x);//不同数值对应不同颜色 

int a[4][4] = {
   
   0};// 定义全局的二维数组 
int A[4][4]; //保留上一步的棋局 
char *name_max = "2048游戏-最高记录";
char *name_file = "[空白]-2048游戏";

int main() {
   
   
	system("mode con cols=90 lines=30");
	system("title 2048超级大大型游戏"); //程序标题 
	system("color F0");//F 表示背景颜色,0表示前景颜色 
	Menu();
	system("pause");   //暂停,输入任意键继续 
	system("cls"); //清屏 
	again(); //是否继续游戏
	return 0;
}

void Menu() //菜单 
{
   
   
	printf("\t\t╔══════════════════════════════════════════════╗\n"); 
	printf("\t\t║   欢迎使用由[空白]制作的2048超级大大型游戏   ║\n");
	printf("\t\t╟──────────────────────────────────────────────╢\n");
	printf("\t\t║请输入选项:                                  ║\n");
	printf("\t\t║              ┌───┐                           ║\n");
	printf("\t\t║              │ 1 │ 游戏规则                  ║\n");
	printf("\t\t║              └───┘                           ║\n");
	printf("\t\t║              ┌───┐                           ║\n");
	printf("\t\t║              │ 2 │ 开始游戏                  ║\n");
	printf("\t\t║              └───┘                           ║\n");
	printf("\t\t║              ┌───┐                           ║\n");
	printf("\t\t║              │ 3 │ 继续游戏                  ║\n");
	printf("\t\t║              └───┘                           ║\n");
	printf("\t\t║              ┌───┐                           ║\n");
	printf("\t\t║              │ 4 │ 退出游戏                  ║\n");
	printf("\t\t║              └───┘                           ║\n");
	printf("\t\t╚══════════════════════════════════════════════╝\n");
	int x = 1, max = 0;
	while(x){
   
   
		switch(getch()){
   
   
			case '1':
				x = 0;
				Rule_of_game();//游戏规则
				Menu();
				break;	 
			case '2':
				x = 0;
				system("cls");//清屏
				Establish_game(name_file);//创建新的读档文件 
				Establish_game(name_max);//创建新的保存最高记录的文件 
				Begin(max); //开始游戏 
				break;
			case '3':
				x = 0;
				system("cls");//清屏
				max = Read_max();//读取之前的最高记录 
				Begin(max); //开始游戏 
				break;
			case '4':
				exit(0); 
			default:
				printf("输入了非法选项,请重新选择!\n");
		}
	}
}

void Rule_of_game()
{
   
    
	system("cls");//清屏 
	printf("╔══════════════════════════════════════════════════════════════════════════════════╗\n"); 
	printf("║本游戏通过按键W、S、A、D(不区分大小写)四个键分别控制滑块上移、下移、左移和右移。║\n");
	printf("║滑块移动的过程中,如有相邻且相等数字的滑块将会相加,并获得相应的分数。            ║\n");
	printf("║当棋盘上的所有位置均有数字,且不能合成,则游戏结束。本游戏未设置游戏成功。        ║\n");
	printf("║游戏过程中输入I即为存档并退出游戏,输入O即为读档,输入P则退出游戏。               ║\n");
	printf("║“开始游戏”则清除最高记录及存档、“继续游戏”则保存之前的最高记录,且可以读档。  ║\n"); 
	printf("╚══════════════════════════════════════════════════════════════════════════════════╝\n");
	system("pause");//暂停 
	system("cls");//清屏 
}

void Begin(int max)
{
   
   
	int score = 0;
	int sign = 1;
	int h, l, cnt = 0;
	int *p_cnt = &cnt;
	while(1) {
   
   
		printf("\t\t╔══════════════════════════════════════════════╗\n"); 
		printf("\t\t║   欢迎使用由[空白]制作的2048超级大大型游戏   ║\n");
		printf("\t\t╟──────────────────────────────────────────────╢\n");
		pri
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值