[课程设计]2048

在这里插入图片描述

这个是我额外因为无聊写的课设,所以没有花时间去写注释,然后呢写的也比较仓促,时间也很短,所以不保证没有我留的bug之外的其他bug。

提示:代码不要完全复制,我留了bug(包括编译错误和逻辑错误哦)

代码直接见后面,仅供参考。

#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_NONSTDC_NO_DEPRECATE
#include<iostream>
#include<ctime>
#include<cstdlib>
#include<conio.h>
#include<stdlib.h>
#include<sstream>
#include<string>
#include<iomanip>
#include<queue>
#include<cstring>
#include"2048P.cpp"
using namespace std;

int n;
char mp;
Game g2048;

int main() {
    
    
	while (1) {
    
    
		cout << "请输入棋盘的大小" << endl;
		cin >> n;
		g2048.Build();
		while (1) {
    
    
			cout << endl;
			char ch = getch();
			if (ch == 72) {
    
     system("CLS"); g2048.up(); }
			if (ch == 80) {
    
     system("CLS"); g2048.down(); }
			if (ch == 75) {
    
     system("CLS"); g2048.left(); }
			if (ch == 77) {
    
     system("CLS"); g2048.rr(); }
			if (g2048.ifEnd() == true) {
    
    
				cout << endl<<"游戏结束了,你的得分是" << g2048.score() << endl;
				break;
			}
		}
		cout << "是否还要继续游戏?(Y/N)" << endl;
		cin >> mp;
		if (mp == 'N') break;
	}
	return 0;
}
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_NONSTDC_NO_DEPRECATE
#include<iostream>
#include<ctime>
#include<cstdlib>
#include<conio.h>
#include<stdlib.h>
#include<sstream>
#include<string>
#include<iomanip>
#include<queue>
#include<cstring>
#include<cmath>
using namespace std;

#define L 105
extern int n;

class Game {
    
    
private:
	int map[L][L], maxx;
public:
	void init() {
    
    
		memset(map, 0, sizeof(map));
	}
	void Pro() {
    
    
		int x, y;
		srand((unsigned int)time(NULL));
		do {
    
    
			x = rand() % n;
			y = rand() % n;
		} while (map[x][y]);
		if (rand() % 2)
			map[x][y] = 2;
		else
			map[x][y] = 4;
	}
	void Print() {
    
    
		cout << setw(6);
		for (int i = 0; i < 5 * (n + 1) - 1; i++)
			cout << "-";
		cout << endl;
		for (int i = 0;i < n; i++) {
    
    
			cout << setw(5) << "|";
			for (int j = 0; j < n; j++)
				cout << setw(5) << map[i][j] << setw(5);
			cout << "|" << endl;
		}
		cout << setw(6);
		for (int i = 0; i < 5 * (n + 1) - 1; i++)
			cout << "-";
	}
	void Build() {
    
    
		init();
		Pro();
		Print();
	}
	int score() {
    
    
		int ans = 0;
		for (int i = 0; i < n; i++)
			for (int j = 0; j < n; j++)
				ans += map[i][j];
		return ans;
	}
	bool ifEnd() {
    
    
		for (int i = 0; i < n; i++)
			for (int j = 0; j < n; j++)
				if (!map[i][j])
					return false;
		return true;
	}
	void up() {
    
    
		for (int i = 0; i < n; i++)
			for (int j = n - 1; j > 0; j--)
				if (map[j][i] == map[j - 1][i] || map[j - 1][i] == 0) {
    
    
					map[j - 1][i] += map[j][i];
					for (int k = j;k < n; k++)
						map[k][i] = map[k + 1][i];
				}
		Pro();
		Print();
	}
	void down() {
    
    
		for (int i = 0; i < n; i++)
			for (int j = 0; j < n - 1; j++)
				if (map[j][i] == map[j + 1][i] || map[j + 1][i] == 0) {
    
    
					map[j + 1][i] += map[j][i];
					for (int k = j; k > 0; k--)
						map[k][i] = map[k - 1][i];
					map[0][i] = 0;
				}
		Pro();
		Print();
	}
	void left() {
    
    
		for (int i = 0; i < n; i++)
			for (int j = n - 1; j > 0; j--)
				if (map[i][j] == map[i][j - 1] || map[i][j - 1] == 0) {
    
    
					map[i][j - 1] += map[i][j];
					for (int k = j; k < n; k++)
						map[i][k] = map[i][k + 1];
				}
		Pro();
		Print();
	}
	void rr() {
    
    
		for (int i = 0; i < n; i++)
			for (int j = 0; j < n - 1; j++)
				if (map[i][j] == map[i][j + 1] || map[i][j + 1] == 0) {
    
    
					map[i][j + 1] += map[i][j];
					for (int k = j; k > 0; k--)
						map[i][k] = map[i][k - 1];
					map[i][0] = 0;
				}
		Pro();
		Print();
	}
};

猜你喜欢

转载自blog.csdn.net/cls1277/article/details/112645369