2048 小游戏文档
只有一个 2048 类
-
暴露两个接口:构造函数 play 函数
-
游戏主体是一个 4x4 的二维数组
-
display 函数展示这个二维数组,和一些提示信息
-
rand_map 函数负责在数组中不是 0 的地方随机刷新 2,有百分之二十的概率刷新的是 4
-
key_process 函数用来响应用户的按键,就是用户按下方向键,数字会移动
-
play 函数根据游戏逻辑调用这些函数
-
full 函数用来判断游戏区域是否还有空白,如果还有空白返回 1,没有空白返回 0,没有空白意味着不能再随机刷新数字,等价于游戏结束,程序终止
-
up down left right 这四个函数实现了用户在按下了不同的方向键之后数字的移动
-
构造函数实现了数组的初始化,并且调用 rand_map 在两个位置生成了两个数字(2 或者 4)
使用方法
#Linux平台
g++ 2048.cpp main.cpp -o game
./game
下面是代码
main.cpp
/*************************************************************************
> File Name: main.cpp
> Author:muyuan
> Mail: muyuanhuck@163.com
> Created Time: 2019年07月12日 星期五 08时36分59秒
************************************************************************/
#include<iostream>
#include "2048.h"
using namespace std;
int main()
{
_2048 game;
game.play();
return 0;
}
2048.h
/*************************************************************************
> File Name: 2048.h
> Author:muyuan
> Mail: muyuanhuck@163.com
> Created Time: 2019年07月12日 星期五 08时36分38秒
************************************************************************/
#ifndef _2048_H
#define _2048_H
#endif
#define N 4
class _2048
{
private:
int map[N][N];
int score;
void display();
void rand_map();
int key_process();
int full();
int up();
int down();
int left();
int right();
public:
int play();
_2048();
};
2048.cpp
/*************************************************************************
> File Name: 2048.cpp
> Author: muyuan
> Mail: muyuanhuck@163.com
> Created Time: 2019年07月12日 星期五 08时36分30秒
************************************************************************/
#include <iostream>
#include <iomanip>
#include <ctime>
//#include <cstdio>
#include "2048.h"
using namespace std;
_2048::_2048()
{
score = 0;
for (int x = 0; x < N; x++)
{
for (int y = 0; y < N; y++)
{
map[x][y] = 0;
}
}
rand_map();
rand_map();
}
void _2048::display()
{
cout << "+----+----+----+----+" << endl;
for (int y = 0; y < N; y++)
{
for (int x = 0; x < N; x++)
{
if (map[y][x] == 0)
{
cout << "|" << setw(4) << " ";
}
else
cout << "|" << setw(4) << map[y][x];
}
cout << "|" << endl;
cout << "+----+----+----+----+" << endl;
}
cout << "+----+----+----+----+" << endl;
cout << "| k |" << endl;
cout << "|h<--+-->l |" << endl;
cout << "| j |" << endl;
cout << "|请输入方向,q退出 |" << endl;
cout << "| 分数 " << setw(4) << score <<" |" << endl;
cout << "+----+----+----+----+" << endl;
}
void _2048::rand_map()
{
srand(time(0));
int numx = rand();
numx = numx % 4;
int numy = rand();
numy = numy % 4;
//cout << numx << " " << numy << endl;
int flag = rand();
flag = flag % 5;
if (flag > 3)
{
while (map[numy][numx] != 0)
{
numx = rand();
numx = numx % 4;
numy = rand();
numy = numy % 4;
}
map[numy][numx] = 4;
}
else
{
while (map[numy][numx] != 0)
{
numx = rand();
numx = numx % 4;
numy = rand();
numy = numy % 4;
}
map[numy][numx] = 2;
}
}
int _2048::key_process()
{
char c;
cout << "请输入方向" << endl;
//c = getchar();
//scanf("%*c");
cin >> c;
if (c == 'q')
{
cout << "quit" << endl;
return 0;
}
else if (c == 'h')
{
cout << "左" << endl;
left();
}
else if (c == 'j')
{
cout << "下" << endl;
down();
}
else if (c == 'k')
{
cout << "上" << endl;
up();
}
else if (c == 'l')
{
cout << "右" << endl;
right();
}
else
{
cout << "输入错误" << endl;
}
return c;
}
int _2048::play()
{
int flag = 1;
display();
while (flag)
{
flag = key_process();
if (flag == 'h' || flag == 'j' || flag == 'k' || flag == 'l')
{
rand_map();
display();
}
else
{
continue;
}
flag = full();
}
}
int _2048::full()
{
int aflag = 0;
for (int y = 0; y < N; y++)
{
for (int x = 0; x < N; x++)
{
if(map[y][x] != 0)
{
aflag++;
}
}
}
if (aflag == 16)
{
return 0;
}
else
{
return 1;
}
}
int _2048::up()
{
int x,y;
for (y = 3;y > 0;y--)
{
for(x = 0;x < 4; x++)
{
if(map[y-1][x] == 0)
{
map[y-1][x] =map[y][x];
map[y][x] = 0;
}
else
{
if(map[y-1][x] == map[y][x])
{
score +=map[y-1][x];
map[y-1][x] *=2;
map[y][x] = 0;
}
}
}
}
}
int _2048::down()
{
int x,y;
for (y = 0;y < 3;y++)
{
for(x = 0;x < 4; x++)
{
if(map[y+1][x] == 0)
{
map[y+1][x] =map[y][x];
map[y][x] = 0;
}
else
{
if(map[y+1][x] == map[y][x])
{
score +=map[y+1][x];
map[y+1][x] *=2;
map[y][x] = 0;
}
}
}
}
}
int _2048::left() //左
{
int x,y;
for (x = 3;x > 0;x--)
{
for(y = 0;y < 4; y++)
{
if(map[y][x-1] == 0)
{
map[y][x-1] =map[y][x];
map[y][x] = 0;
}
else
{
if(map[y][x-1] == map[y][x])
{
score +=map[y][x-1];
map[y][x-1] *=2;
map[y][x] = 0;
}
}
}
}
}
int _2048::right()
{
int x,y;
for (x = 0;x < 3;x++)
{
for(y = 0;y < 4; y++)
{
if(map[y][x+1] == 0)
{
map[y][x+1] =map[y][x];
map[y][x] = 0;
}
else
{
if(map[y][x+1] == map[y][x])
{
score +=map[y][x+1];
map[y][x+1] *=2;
map[y][x] = 0;
}
}
}
}
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于