大一上学期19c20c课设2048小游戏
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
using namespace std;
class Game
{
private:
int chessboard[5][5] = {0};
int remove;
int x, y, k,count1;
public:
int i, j;
void show();//声明初始化棋盘
void print();//声明打印棋盘的函数
void up();//上
void down();//下
void left();//左
void right();//右
//声明响应键盘事件的函数
void newadd();//声明新增数字函数,数字增加是要找空位vacancy,也就是chessboard[x][y] = 0;
int getscore();//声明得分函数;
int gameover();//声明游戏结束函数
};
void Game::show()
{
int count2 = rand() % 2;
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
{
if (chessboard[i][j] == 0)
{
goto vacancy;
}
}
vacancy:srand((unsigned int)time(NULL));
do {
x = rand() % 5;
y = rand() % 5;
int coun1 = x;
} while (chessboard[x][y] != 0);
if (count2 == 0)
{
chessboard[x][y] = 2;
}
else
chessboard[x][y] = 4;
}
void Game::print()
{
for (int i = 0; i < 5; i++)
{
cout << " ───────────────────────────────────────" << endl;
for (int j = 0; j < 5; j++)
{
if (chessboard[i][j] == 0)
{
cout << "│ " << chessboard[i][j] <<" \t";
}
else
{
cout << "│ " << chessboard[i][j] <<"\t";
}
}
cout << "│" << endl;
}
cout << " ───────────────────────────────────────" << endl;
}//定义打印棋盘的函数
void Game::newadd()
{
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
{
if (chessboard[i][j] == 0)
{
goto vacancy;
}
else
{
continue;
}
}
vacancy:srand((unsigned int)time(NULL));
int count1 = rand() % 2;
do {
x = rand() % 5;
y = rand() % 5;
} while (chessboard[x][y] != 0);
if (count1==0)
{
chessboard[x][y] = 2;
}
else
chessboard[x][y] = 4;
}//定义新增数字的函数,空位的定义,空位的数字补充。
void Game::up()
{
//↑
char ch;
ch=_getch();
if (ch == 72)//第一行的元素是不动
{
for (int i = 1; i < 5; i++)//要找上一个格子是否为零,
{
for (int k = i; k >= 1; k--)
{
for (int j = 0; j < 5; j++)
{
if (chessboard[k - 1][j] == 0)//上一个格子为零,就是空位
{
chessboard[k - 1][j] = chessboard[k][j];//让上个空位的值等于他下面的
chessboard[k][j] = 0;//再让下面的空位是零,也就是还原空位
}
else//上一个位置的数字等于他下面的数字的情况
{
if (chessboard[k - 1][j] == chessboard[k][j])
{
chessboard[k - 1][j] *= 2;//让上一个位置的数字是原来的二倍
chessboard[k][j] = 0;//再让下面位置的数字为零
}
}
}
}
}
}
}
void Game::down()
{ //↓
char ch;
ch = _getch();
if (ch == 80)//最后一行的元素是不动的
{
for (int i = 3; i >= 0; i--)
{
for (int k = i; k < 4; k++)
{
for (int j = 0; j < 5; j++)
{
if (chessboard[k + 1][j] == 0)//找下面为上面
{
chessboard[k + 1][j] = chessboard[k][j];//让下面的那个空位为他上面的位置的数字
chessboard[k][j] = 0;//上面的位置又要变回初始值0
}
else//如果下面的值与他上面的是一样的值
{
if (chessboard[k + 1][j] == chessboard[k][j])
{
chessboard[k + 1][j] *= 2;//下面的位置为数字乘以2
chessboard[k][j] = 0;//让上面的位置恢复初始值0
}
}
}
}
}
}
}
void Game::left()
{
//←
char ch;
ch = _getch();
if (ch ==75)//最左列不动
{
for (int j = 1; j < 5; j++)
{
for (int k = j; k >= 1; k--)//让有0列
{
for (int i = 0; i < 5; i++)
{
if (chessboard[i][k - 1] == 0)//如果右边的值是空位0
{
chessboard[i][k - 1] = chessboard[i][k];//让左边的值等于它右边的值
chessboard[i][k] = 0;//让其右边的值恢复初始值0
}
else
{
if (chessboard[i][k - 1] == chessboard[i][k])//右边的值等于左边的值
{
chessboard[i][k - 1] *= 2;//让左边的值是二倍
chessboard[i][k] = 0;//让右边的值恢复初始值0
}
}
}
}
}
}
}
void Game::right()
{
//→
char ch;
ch = _getch();
if (ch == 77)//最右列不动
{
for (int j = 3; j >= 0; j--)
{
for (int k = j; k < 4; k++)
{
for (int i = 0; i < 5; i++)
{
if (chessboard[i][k + 1] == 0)//右边的位置为空0
{
chessboard[i][k + 1] = chessboard[i][k];//让右边的值等于左边的值
chessboard[i][k] = 0;//让左边的值恢复初始值0
}
else//右边的值等于左边的值的情况
{
if (chessboard[i][k + 1] == chessboard[i][k])
{
chessboard[i][k + 1] *= 2;//右边的值是变为二倍
chessboard[i][k] = 0;//左边的值恢复初始值0
}
}
}
}
}
}
}
int Game::getscore()
{
int score = 0;
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
score += chessboard[i][j];
}
}
cout << "score=" << score << endl;
return score;
}
int Game::gameover()
{
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
if (chessboard[i][j] == 2048)
{
cout << "You Win The Game" << endl;
}
}
break;
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 4; j++)
{
if (chessboard[i][j] == 0 || chessboard[i][j]==chessboard[i][j + 1])
{
cout << "Game Continue" << endl;
}
}
break;
}
for (int j = 0; j < 5; j++)
{
for (int i = 0; i < 4; i++)
{
if (chessboard[i][j]==0||chessboard[i][j] == chessboard[i + 1][j])
{
cout << "Game Continue" << endl;
}
}
break;
}
return 0 ;
}
int main()
{
Game a;
a.show();
a.print();
while (1)
{
a.up();
system("CLS");
a.getscore();
a.print();
a.down();
system("CLS");
a.getscore();
a.print();
a.left();
system("CLS");
a.getscore();
a.print();
a.right();
system("CLS");
a.getscore();
a.print();
a.newadd();
system("CLS");
a.print();
}
}