用C++写了一个简单2048小游戏,最大数字达到2048即为结束
方向键控制移动
#include <iostream>
#include <Windows.h>
#include <ctime>
#include <conio.h>
#include <algorithm>
using namespace std;
int nums[4][4];
int emp = 16, score = 0; // 空格子数, 分数
int maxv = 2; // 场上最大数,到达2048时,结束游戏
int dirc_st = 0b0000; // 状态变量,表示可操作的方向
// 绘制地图函数
void drawmap()
{
// 先清屏幕
system("cls");
puts(" ---- 2 0 4 8 ----");
puts(" by DNA\n");
cout << " 得分: " << score << '\n' << endl;
for (int col = 1; col <= 17; col++)
{
cout << " ";
if (col % 4 == 1) puts(" -------------------------------- ");
else if (col % 4 == 2 || col % 4 == 0) puts("| | | | |");
else
{
cout << '|';
for (int row = 0; row <= 3; row++)
if (nums[col / 4][row] != 0)
printf("%5d |", nums[col / 4][row]);
else
printf(" |");
puts("");
}
}
// 测试
/*
puts("");
cout << "empty = " << emt << endl;
cout << "max :" << maxv << endl;
cout << "方向状态" << endl;
cout << "上 : " << (dirc_st >> 3 & 1) << endl;
cout << "下 : " << (dirc_st >> 2 & 1) << endl;
cout << "左 : " << (dirc_st >> 1 & 1) << endl;
cout << "右 : " << (dirc_st >> 0 & 1) << endl;
*/
}
// 产生新数字
void newnums()
{
// 产生2:67% 产生4:33%
int newnumber = (rand() % 3) ? 2 : 4;
int x, y;
do
{
x = rand() % 4, y = rand() % 4;
} while (nums[x][y] != 0);
nums[x][y] = newnumber;
score += newnumber;
emp --;
}
// 状态判断
void statecheck()
{
dirc_st = 0b0000; // 分别代表当前状态是否可以上下左右移动
// 上
for (int i = 1; i <= 3; i ++ )
for (int j = 0; j <= 3; j++)
{
if (nums[i][j] != 0 && nums[i - 1][j] == 0 ||
nums[i][j] != 0 && nums[i - 1][j] == nums[i][j]