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小游戏并不是特别的难,主要难点在于算法。只要算法思想了解之后,就可以很简单地做出一个完整的游戏。
更加完整的版本可以看一下下一篇文章:
在这个平台上有收徒的打算,如果小伙伴刚好需要一个能答疑,能带着你学习的师父,请联系我,q:2316773638
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/2876.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...