2048游戏源代码

#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_NONSTDC_NO_DEPRECATE
#include<iostream>
#include<ctime>
#include <conio.h>
#include <iomanip>
using namespace std;
class Game {	
	static const int N = 5;
	int chessboard[N][N] = { 0 };
	public:
		void board();//初始化棋盘函数
		void showboard();//显示棋盘函数
		void add();//新增一个数函数
		void up();//向上
		void down();//向下
		void left();//向左
		void right();//向右
		void win();//游戏胜利函数
		void gameover();//游戏失败函数
		int x, y;
		
};

void Game::board() {
	srand((unsigned int)time(NULL));
	int m,n;
	x = rand() % N;
	y = rand() % N;
	m = rand() % N;
	n = rand() % N;
	double rate = static_cast<double>(rand() % 100) / 100;
	if (rate > 0.5) {
		chessboard[x][y] = 2;
		chessboard[m][n] = 2;
	}
	else
		chessboard[x][y] = 4;
	    chessboard[m][n] = 4;
}
void Game::showboard() {	  
	system("CLS");
	for (int i = 0;i<N;i++){
         cout << "|";		
	for (int q = 0; q < N; q++) {
			cout << "-----+";
		}		
		cout << endl;
for (int j = 0; j < N; ++j)
		{
			cout <<"|"<< setw(5) <<chessboard[i][j] ;
		}
        cout << "|";
		cout << endl; 		   
	}
	cout << "|";
	for (int q = 0; q < N; q++) {
		cout << "-----+";
	}
} 
void Game::win() {
	for (int g = 0; g < N; g++) {
		for (int h = 0; h < N; h++) {
			if (chessboard[g][h] == 2048) {
				cout << "你真棒,恭喜你完成了游戏,想再来一局吗?";
				break;
			}
		}
	}
}
void Game::gameover() {
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			int s = 0;
			if (chessboard[i][j] != 0)
				s++;
			if (s == N * N)
				cout << "你输了,你可真菜呀,再来一局?";
				break;
		}
	}
}
void Game::add() {
	srand((unsigned int)time(NULL));
	x = rand() % N;
	y = rand() % N;
	if (chessboard[x][y] == 0) {
		double rate = static_cast<double>(rand() % 100) / 100;
		if (rate > 0.5)
			chessboard[x][y] = 2;
		else
			chessboard[x][y] = 4;
	}
	else if (chessboard[x][y] != 0) {
		x = rand() % N;
		y = rand() % N;
	}
}

void Game::up() {	
		for (int i = 1; i < N; ++i) {
			for (int p = i; p >= 1; --p) {
				for (int j = 0; j < N; ++j) {
					if (chessboard[p - 1][j] == chessboard[p][j]&&chessboard[p][j]!=0) {
						chessboard[p - 1][j] *= 2;
						chessboard[p][j] = 0;
					}
						if (chessboard[p - 1][j] == 0) {
							chessboard[p - 1][j] = chessboard[p][j];
							chessboard[p][j] = 0;							
						}
					}
				}
			}
		add();
		showboard();
		win();
		gameover();
		}
void Game::down() {
	for (int i = N-2; i >=0; --i) {
		for (int p = i; p <N-1; ++p) {
			for (int j = 0; j < N; ++j) {
				if (chessboard[p][j] == chessboard[p+1][j] && chessboard[p+1][j] != 0) {
					chessboard[p+1][j] *= 2;
					chessboard[p][j] = 0;
				}
				if (chessboard[p+1][j] == 0) {
					chessboard[p+1][j] = chessboard[p][j];
					chessboard[p][j] = 0;
				}
			}
		}
	}
	add();
	showboard();
	win();
	gameover();
};
void Game::left() {	
	for (int i = 1; i < N; ++i) {
		for (int p = i; p >= 1; --p) {
			for (int j = 0; j < N; ++j) {
				if (chessboard[j][p-1] == chessboard[j][p] && chessboard[j][p] != 0) {
					chessboard[j][p-1] *= 2;
					chessboard[j][p] = 0;
				}
				if (chessboard[j][p-1] == 0) {
					chessboard[j][p-1] = chessboard[j][p];
					chessboard[j][p] = 0;
				}
			}
		}
	}
	add();
	showboard();
	win();
	gameover();
};
void Game::right() {	
	for (int i = N - 2; i >= 0; --i) {
		for (int p = i; p < N - 1; ++p) {
			for (int j = 0; j < N; ++j) {
				if (chessboard[j][p] == chessboard[j][p+1] && chessboard[j][p+1] != 0) {
					chessboard[j][p+1] *= 2;
					chessboard[j][p] = 0;
				}
				if (chessboard[j][p+1] == 0) {
					chessboard[j][p+1] = chessboard[j][p];
					chessboard[j][p] = 0;
				}
			}
		}
	}
	add();
	showboard();
	win();
	gameover();
};
int main() {
	Game a;
	a.board();
	a.showboard();
	while (1) {
		char ch = _getch();
		if (ch == 72) {
			a.up();			
		}
		else if (ch == 80) {
			a.down();
			
		}
		else if (ch == 75)
			a.left();
		else if (ch == 77)
			a.right();
	}
	
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值