**2048小游戏献给大家!**
不多说,直接上代码!
#include <iostream>
#include <windows.h>
#include<ctime>
using namespace std;
//定义表格全局变量;
int const ROW = 4;
int const COL = 4;
int game[ROW][COL] = { 0 };
//定义游戏状态;
int const GAMECONTINUE = 1;
int const GAMEOVER = 2;
int const GAMEWIN = 3;
//定义键盘操作
int const UP = 1;
int const LEFT = 2;
int const RIGHT = 3;
int const DOWN = 4;
//打印产品,利用制表符对齐上下文;
void print() {
system("cls");
cout << "***********************冯虚御风**********************" << "\n" << "**********************2048简略版*********************" << endl;
for (int i = 0; i != ROW; ++i) {
cout << "---------------------------------"<<"\n"
<< "| | | | |" << endl;
for (int j = 0; j != COL; ++j) {
if (game[i][j] != 0)
cout << "| " << game[i][j] << "\t";
else
cout << "| \t";
}
cout << "|" << endl;
}
cout << "---------------------------------" << endl;
}
//刷新新数字;
bool CREAT_NUMBER() {
int X = -1, Y = -1;
int times = 0, maxtimes = ROW*COL;
//设计循环检查空位和是否排满;
do {
X = rand()%ROW;
Y = rand()%COL;
++times;
} while (game[X][Y] != 0 && times <= maxtimes);
//令2/3的概率生成2,1/3的概率生成4;
int swihtch = rand() % 3;
if(times>=maxtimes)
return false;
else {
if (swihtch <= 1)swihtch = 2;
else swihtch = 4;
game[X][Y] = swihtch;
}
return true;
}
//从键盘输入
int input() {
int up_arrow = 0;
int left_arrow = 0;
int right_arrow = 0;
int down_arrow = 0;
int keybit = 0;
while (true) {
up_arrow = GetAsyncKeyState(VK_UP);
left_arrow = GetAsyncKeyState(VK_LEFT);
right_arrow = GetAsyncKeyState(VK_RIGHT);
down_arrow = GetAsyncKeyState(VK_DOWN);
if (up_arrow) {
keybit = 1;
break;
}
if (left_arrow) {
keybit = 2;
break;
}
if (right_arrow) {
keybit = 3;
break;
}
if (down_arrow) {
keybit = 4;
break;
}
Sleep(100);
}
return keybit;
}
//过程操作;
void pross(int keybit) {
switch (keybit)
{
case UP:
//最上面一行不动
for (int row = 1; row < ROW; ++row)
{
for (int crow = row; crow >= 1; --crow)
{
for (int col = 0; col < COL; ++col)
{
//上一个格子为空
if (game[crow - 1][col] == 0)
{
game[crow - 1][col] = game[crow][col];
game[crow][col] = 0;
}
else
{
//合并
if (game[crow - 1][col] == game[crow][col])
{
game[crow - 1][col] *= 2;
game[crow][col] = 0;
}
}
}
}
}
break;
case DOWN:
//最下面一行不动
for (int row = ROW - 2; row >= 0; --row)
{
for (int crow = row; crow < ROW - 1; ++crow)
{
for (int col = 0; col < COL; ++col)
{
//上一个格子为空
if (game[crow + 1][col] == 0)
{
game[crow + 1][col] = game[crow][col];
game[crow][col] = 0;
}
else
{
//合并
if (game[crow + 1][col] == game[crow][col])
{
game[crow + 1][col] *= 2;
game[crow][col] = 0;
}
}
}
}
}
break;
case LEFT:
//最左边一列不动
for (int col = 1; col < COL; ++col)
{
for (int ccol = col; ccol >= 1; --ccol)
{
for (int row = 0; row < ROW; ++row)
{
//上一个格子为空
if (game[row][ccol - 1] == 0)
{
game[row][ccol - 1] = game[row][ccol];
game[row][ccol] = 0;
}
else
{
//合并
if (game[row][ccol - 1] == game[row][ccol])
{
game[row][ccol - 1] *= 2;
game[row][ccol] = 0;
}
}
}
}
}
break;
case RIGHT:
//最右边一列不动
for (int col = COL - 2; col >= 0; --col)
{
for (int ccol = col; ccol <= COL - 2; ++ccol)
{
for (int row = 0; row < ROW; ++row)
{
//上一个格子为空
if (game[row][ccol + 1] == 0)
{
game[row][ccol + 1] = game[row][ccol];
game[row][ccol] = 0;
}
else
{
//合并
if (game[row][ccol + 1] == game[row][ccol])
{
game[row][ccol + 1] *= 2;
game[row][ccol] = 0;
}
}
}
}
}
break;
}
}
int judge() {
//胜利条件:存在2048
for (int i = 0; i != ROW; ++i) {
for (int j = 0; j != COL; ++j) {
if (game[i][j] == 2048)
return GAMEWIN;
break;
}
}
//继续条件,有空位或者有连续相等的数 第一次横向检查
for (int i = 0; i != ROW; ++i) {
for (int j = 0; j != COL-1; ++j) {
if (game[i][j] == 0 || game[i][j] == game[i][j + 1])
{
return GAMECONTINUE;
break;
}
}
}
//纵向检查
for (int i = 0; i != ROW-1; ++i) {
for (int j = 0; j != COL; ++j) {
if (game[i][j] == 0 || game[i][j] == game[i + 1][j])
{
return GAMECONTINUE;
break;
}
}
}
//不符合上述两种情况直接退出
return GAMEOVER;
}
int main() {
srand( (unsigned )time(NULL));
CREAT_NUMBER();
CREAT_NUMBER();
print();
int keybit = 0;
int gamestate = -1;
while (true) {
keybit = input();
gamestate = judge();
if (keybit&&gamestate == GAMECONTINUE) {
pross(keybit);
CREAT_NUMBER();
print();
input();
}
else if (gamestate == GAMEOVER) {
print();
cout << "sorry! you are loser!!!!!!!!!!!!" << endl;
break;
}
else if (gamestate == GAMEWIN) {
print();
cout << "congratulations! you win!" << endl;
break;
}
}
return 0;
}
这是运行结果: