C++小游戏2048

本文详细介绍了如何使用C++编程实现经典小游戏2048,包括游戏界面的展示、查找需要合并的数、判断结束条件、数字合并、数组重排和插值等关键步骤。并提供了完整的游戏代码。
摘要由CSDN通过智能技术生成

游戏界面

#include<iostream>
#include<iomanip>
#include<cstdlib>
#include<ctime>
#include<conio.h>
#include<Windows.h>
using namespace std;
int getlim(int a)
{
   
	int sum=0;
	for(int i=1;;i++)
	{
   
		if(a!=0)
			sum+=1;
		else
			break;
		a=a/10;
	}
	return sum;
}
int getlim(int a[])
{
   
	for(int i=0;;i++)
		if(a[i]==-1)
			return i-1;
}

先写出重载的函数,用于计算数的位数和一维数组中有效的数字个数。
再写出函数给出游戏界面,给入参数是4×4数组,然后显示出游戏的界面。

void showx(int b[4][4])
{
   
	for(int i=0;i<4;i++)
		{
   for(int j=0;j<4;j++)
			cout<<b[i][j];
	cout<<endl;
	}
}
void show_2()
{
   
		cout<<"■";
	    for(int i=1;i<=4;i++)
		    cout<<setw(8)<<"■";
	    cout<<endl;
}
void show_1()
{
   
	for(int i=1;i<=17;i++)
		cout<<"■";
	cout<<endl;
}
void show_4(int a)
{
   
	int n;
	n=getlim(a);
	switch(n)
	{
   
	case 1:cout<<"■"<<setw(3)<<a<<setw(3)<<' ';break;
	case 2:cout<<"■"<<setw(4)<<a<<setw(2)<<' ';break;
	case 3:cout<<"■"<<setw(4)<<a<<setw(2)<<' ';break;
	case 4:cout<<"■"<<setw(5)<<a<<' ';break;
	case 0:cout<<"■"<<setw(6)<<' ';
	}
}
void show_3(int a[])
{
   
	show_4(a[0]);show_4(a[1]);show_4(a[2]);show_4(a[3]);
	cout<<"■"<<endl;
}
void show(int a[4][4])
{
   
	for(int i=0;i<4;i++)
	{
   
		int b[4];
		for(int j=0;j<4;j++) b[j]=a[i][j];
		show_1();show_2();show_3(b);show_2();
	}
	show_1();
}

在这里插入图片描述
输出界面如图。

查找需要合并的数

写出查找哪些数要合并,将位置存储到4×4数组中。由于有上下左右四种方式,所以我们要写出一个左的情况,再通过矩阵的转置等变换,将上下右三种操作全部转化为左的操作。

void left_right(int a[4][4])
{
   
	int b[4][4];
	for(int i=0;i<4;i++)
		for(int j=0;j<4;j++)
			b[i][j]=a[i][j];
	for(int i=0;i<4;i++)
		for(int j=0;j<4;j++)
			a[i][3-j]=b[i][j];
}
void left_up(int a[4][4])
{
   
	int b[4][4];
	for(int i=0;i<4;i++)
		for(int j=0;j<4;j++)
			b[i][j]=a[i][j];
	for(int i=0;i<4;i++)
		for(int j=0;j<4;j++)
			a[i][j]=b[j][i];
}
int check_1(int a[4],int b[4])
{
   
	int flag=0;
	for(int i=0;i<4;i++) b[i]=0;
	if(a[0]!=0)
	{
   
		if(a[0]==a[1]&&a[2]==a[3]&&a[2]!=0)
	    {
   b[0]=1;b[2]=1;flag=1;}
		else if(a[0]==a[1])
		{
   b[0]=1;flag=1;}
	    else if(a[1]==0&&a[0]==a[2])
		{
   b[0]=1;flag=1;}
		else if(a[1]==0&&a[2]==0&&a[0]==a[3])
		{
   b[0]=1;flag=1;}
		else if(a[1]==a[2]&&a[1]!=0)
		{
   b[1]=1;flag=1;}
		else if(a[1]==a[3]&&a[1]!=0&&a[2]==0)
		{
   b[1]=1;flag=1;}
		else if(a[2]==a[3]&&a[2]!=0)
		{
   b[2]=1;flag=1;}
	}
	else
	{
   
		if(a[1]!=0)
		{
   
			if(a[1]==a[2])
			{
   b[1]=1;flag=1;}
			else if(a[1]==a[3]&&a[2]==0)
			{
   b[1]=1;flag=1;}
			else if(a[2]==a[3]&&a[2]!=0)
			{
   b[2]=1;flag=1;}
		}
		else
		{
   
			if(a
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值