c++编写简易版2048小游戏

c++编写简易版2048小游戏

我们都知道2048是个44的方格,为了方便数组下表我们生成55的数组,只用到1~4的下标。

初始化时候先随便生成两个目标

// 程序初始化
void init()
{
   
	score = 0;
	memset(a, 0, sizeof(a));
	int x1 = rand() % 4 + 1, y1 = rand() % 4 + 1, x2 = rand() % 4 + 1, y2 = rand() % 4 + 1;	// 随机生成两个初始点
	a[x1][y1] = a[x2][y2] = 2;				// 初始点初始化为 2
}

画图操作,就是把有数组都打印出来,数字为0的就打印空字符,数字不为0的,就打印数字。

void drawmap()
{
   
	system("cls");
	
	for (int i = 1; i <= 4; i++)
	{
   
		for (int j = 1; j <= 4; j++)
		{
   
			if (a[i][j])			// 如果该位置没有数字,则不绘制
			{
   
				if(a[i][j]>1000)
					cout<<a[i][j]<<" ";
				else if(a[i][j]>100)
					cout<<a[i][j]<<" ";
				else if(a[i][j]>10)
					cout<<" "<<a[i][j]<<" ";
				else
					cout<<" "<<a[i][j]<<" ";
			}
			else
			{
   
				cout<<" ";
			}
		}
		cout<<"\n";
			
	}
			
	
}

然后就是移动了,我这里用输入字符控制,用wsad,控制上下左右。

// 玩家操作
void move()
{
   
	memcpy(b, a, sizeof(a));			// 将 a 备份至 b
	memset(mov, false, sizeof(mov));	// 初始化 mov 为 false(所有点均未移动)
	char c;
	cin>>c;

	if(c=='w') //向上
	{
   
		for (j = 1; j <= 4; j++)
			for (i = 2; i <= 4; i++)
			{
   
				if (!a[i][j])continue;
				int k = i;
				while (!a[k - 1][j] && k >= 2)
				{
   
					a[k - 1][j] = a[k][j];
					a[k][j] = 0;
					k--;
				}
				if (a[k][j] == a[k - 1][j] && !mov[k - 1][j])
				{
   
					a[k - 1][j] = 2 * a[k][j];
					a[k][j] = 0;
					mov[k - 1][j] = true;
					score += a[k - 1][j];
				}
			}
	}
	else if(c=='s') //向下 
	{
   
		//。。。
	} 
	else if(c=='a') //向左
	{
   
		//。。。
	} 
	else if(c=='d')
	{
   
	}
}

还有判断游戏结束和游戏胜利

// 判断游戏结束

bool gameover()
{
   
	// 对于任意一个位置,该位置为空 或 四周有位置上的数字与该位置上数字相等,说明可继续移动(游戏可继续)
	for (i = 1; i <= 4; i++)
		for ( j = 1; j <= 4; j++)
			if (!a[i][j] || a[i][j] == a[i + 1][j] || a[i][j] == a[i - 1][j] || a[i][j] == a[i][j + 1] || a[i][j] == a[i][j - 1])return false;
	// 否则游戏结束
	return true;
}

// 判断胜利
bool win()
{
   
	// 有任意一个位置达到 2048,则胜利
	for ( i = 1; i <= 4; i++)
		for ( j = 1; j <= 4; j++)
			if (a[i][j] == 256)return true;
	return false;
}

其实这个2048小游戏并不是特别的难,主要难点在于算法。只要算法思想了解之后,就可以很简单地做出一个完整的游戏。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

是空空呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值