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

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小游戏并不是特别的难,主要难点在于算法。只要算法思想了解之后,就可以很简单地做出一个完整的游戏。

更加完整的版本可以看一下下一篇文章:

cocos creator编写2048小游戏,发微信小游戏

在这个平台上有收徒的打算,如果小伙伴刚好需要一个能答疑,能带着你学习的师父,请联系我,q:2316773638

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2876.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • win10怎么安装python3.8_win10怎么安装python

    win10怎么安装python3.8_win10怎么安装python更新提醒:本文已过期,PyTorch0.4.0已经有官方的Windows支持,Windows下安装最新的PyTorch0.4.0请移步本人另一篇博客:Windows下安装PyTorch0.4.0。2017年1月18日,周董生日这一天,facebook下的torch7团队宣布Pytorch开源,官网地址:pytorch。pytorch是一个python优先的深度学习框架,是一个和tensorfl…

    2022年10月6日
    2
  • 傅里叶变换与希尔伯特变换的区别_配音演员鱼冻毕业于什么学校

    傅里叶变换与希尔伯特变换的区别_配音演员鱼冻毕业于什么学校1.   傅里叶变换1.1傅里叶变换对周期信号进行傅里叶变换(包括正弦周期和非正弦周期信号,正弦周期实际上利用正交性可以知道,除了对应的频率,其他谐波的积分都是0),可以将信号分解为一个无穷级数的和:其中T为原周期信号的频率,因此,整个傅里叶变换将原信号分解为包括原周期在内的无数个谐波分量的三角集数和。对于非周期信号,实际上,非周期信号可以被理解为周期为无限短的周期信号,因此,级数和也自然变成了积…

    2022年10月19日
    3
  • c++ ostringstream的用法(c语言的sprintf)

    c++ ostringstream的用法(c语言的sprintf)转载: https://blog.csdn.net/qq1987924/article/details/7671154ostringstream的用法【本文来自】http://www.builder.com.cn/2003/0304/83250.shtmlhttp://www.cppblog.com/alantop/archive/2007/07/10/27823.html使用stringstre…

    2022年6月23日
    33
  • 数据库的备份与恢复「建议收藏」

    数据库的备份与恢复「建议收藏」数据库的备份与恢复

    2022年4月25日
    46
  • Java中Map接口的解析

    Java中Map接口的解析Map详解:先看图,便于宏观了解Map的地位。Map接口中键和值一一映射.可以通过键来获取值。给定一个键和一个值,你可以将该值存储在一个Map对象.之后,你可以通过键来访问对应的值。 当访问的值不存在的时候,方法就会抛出一个NoSuchElementException异常. 当对象的类型和Map里元素类型不兼容的时候,就会抛出一个ClassCastException异常。…

    2022年7月8日
    24
  • JAVA string转map_java怎么转业务

    JAVA string转map_java怎么转业务String转Mapstring转map的时候,很多新人可能不会去判断string的内容是什么格式的,因为map是key-value格式的,但是string就是一个字符串,想想,这个应该不能转吧,我就遇到过,想想就觉得自己傻傻的,哈哈哈。看代码 Stringcontent=””;HashMap<String,Object>map=newHashMap<>();try{map=JS

    2025年10月24日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号