前
中
这个是我额外因为无聊写的课设,所以没有花时间去写注释,然后呢写的也比较仓促,时间也很短,所以不保证没有我留的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();
}
};