RT
人畜无害
#include <bits/stdc++.h>
#include <windows.h>
#define wait Sleep(1145)
#define po cout<<'.'
#define clear_terminal system("cls");
#define __clear_terminal cout<<"\033[2J\033[1;1H"
#define DIE exit(1)
#define random_start srand(time(NULL))
#define ILoveTheHistoryTeacher true
using namespace std;
const int P = 3;
const int MAXN = 105;
char board_out[MAXN][MAXN];
int board_dev[MAXN][MAXN];
//bool board_status[MAXN][MAXN];
int game_starter, mines, now_mines, die_mines = 0, flags, board_size_linear, board_size_square, board_size_square_half;
char c;
int x, y;
struct player_node {
int px, py;
} PN;
void wait_use() {
for (int i = 1; i <= P; i++) {
po;
wait;
}
}
void __execute() {
cout << "你似乎听不清楚人话" << '\n';
wait;
wait;
cout << "该罚!!!" << '\n';
wsit_use();
exit(1);
}
int main() {
random_start;
clear_terminal;
cout << "郑重声明:此游戏由songyd(kszsongyundi)与A_W_Lee(kszlizhengrui)联合制作,严禁盗版" << '\n';
wait;
wait;
wait;
clear_terminal;
wait_use();
clear_terminal;
cout << "扫雷游戏经典版(禁止任何非法操作)" << '\n' << "输入'1'以开始" << '\n';
cin >> game_starter;
if (game_starter != 1)
__execute();
clear_terminal;
wait_use();
clear_terminal;
cout << "输入一个整数,代表你希望在几乘几的棋盘上进行游戏(2<n<101)" << '\n';
cin >> board_size_linear;
board_size_square = pow(board_size_linear, 2);
board_size_square_half = board_size_square / 2 + 1;
if (board_size_linear<2 or board_size_linear>100)
__execute();
clear_terminal;
wait_use();
clear_terminal;
for (int I = 1; I <= board_size_linear; I++) {
for (int J = 1; J <= board_size_linear; J++) {
board_dev[I][J] = 0;
}
}
cout << "你希望有几颗雷(大于0且小于总格子数的一半)" << '\n';
cin >> mines;
flags = mines, now_mines = mines;
if (mines<1 or mines>board_size_square_half)
__execute();
clear_terminal;
wait_use();
random_start;
while (ILoveTheHistoryTeacher) {
if (now_mines < 1)
break;
x = rand() % 100 + 1;
y = rand() % 100 + 1;
//cout<<x<<' '<<y<<'\n';
//while(board_dev[N.x][N.y]==-1) N.x=rand()%1+board_size_linear,N.y=rand()%1+board_size_linear;
if (board_dev[x][y] == 0 and x <= board_size_linear and y <= board_size_linear) {
now_mines--;
board_dev[x][y] = -1; //the mine put
if (now_mines < 1)
break;
} else {
x = rand() % 1 + board_size_linear;
y = rand() % 1 + board_size_linear;
}
}
clear_terminal;
//count_mines
for (int i = 1; i <= board_size_linear; i++) {
for (int j = 1; j <= board_size_linear; j++) {
if (board_dev[i][j] == -1)
continue;//this is a mine
//every area mines cnt
else {
if (board_dev[i - 1][j - 1] == -1)
board_dev[i][j]++;
if (board_dev[i - 1][j] == -1)
board_dev[i][j]++;
if (board_dev[i - 1][j + 1] == -1)
board_dev[i][j]++;
if (board_dev[i][j - 1] == -1)
board_dev[i][j]++;
if (board_dev[i][j + 1] == -1)
board_dev[i][j]++;
if (board_dev[i + 1][j - 1] == -1)
board_dev[i][j]++;
if (board_dev[i + 1][j] == -1)
board_dev[i][j]++;
if (board_dev[i + 1][j + 1] == -1)
board_dev[i][j]++;
}
}
}
//areas starter
for (int i = 1; i <= board_size_linear; i++) {
for (int j = 1; j <= board_size_linear; j++) {
board_out[i][j] = '*';
}
}
//the game is start
while (ILoveTheHistoryTeacher) {
clear_terminal;
for (int i = 1; i <= board_size_linear; i++) {
for (int j = 1; j <= board_size_linear; j++) {
cout << board_out[i][j];
}
cout << '\n';
}
cout << "剩余旗帜数:" << flags << '\n';
cout << "公猪请操作(翻开:a;插旗:b;拔旗:c;)" << '\n';
cin >> c;
if (c != 'a' and c != 'b' and c != 'c') {
cout << "..." << '\n';
wait;
exit(0);
} else {
cout << "请输入坐标" << '\n';
if (c == 'a') {
cin >> PN.px >> PN.py;
wait_use();
if (board_dev[PN.px][PN.py] == -1) { //mine
cout << '\n' << "恭喜你挖到了一个地雷" << '\n';
wait;
cout << "去见蒋子文爷爷吧!!!" << '\n';
wait;
//return 0;
exit(1);
} else {
board_out[PN.px][PN.py] = board_dev[PN.px][PN.py] + '0';
//I don't believe in endless enumeration
for (int __I = 1; __I <= board_size_linear; __I++) {
for (int I = 1; I <= board_size_linear; I++) {
for (int J = 1; J <= board_size_linear; J++) {
if (board_out[I][J] == '0') {
board_out[I - 1][J - 1] = board_dev[I - 1][J - 1] + '0';
board_out[I - 1][J] = board_dev[I - 1][J] + '0';
board_out[I - 1][J + 1] = board_dev[I - 1][J + 1] + '0';
board_out[I][J - 1] = board_dev[I][J - 1] + '0';
board_out[I][J + 1] = board_dev[I][J + 1] + '0';
board_out[I + 1][J - 1] = board_dev[I + 1][J - 1] + '0';
board_out[I + 1][J] = board_dev[I + 1][J] + '0';
board_out[I + 1][J + 1] = board_dev[I + 1][J + 1] + '0';
}
}
}
}
clear_terminal;
}
}
if (c == 'b') {
cin >> PN.px >> PN.py;
wait_use();
if (flags == 0) {
cout << "八嘎!没旗了还想插想见蒋子文爷爷了是不是" << '\n';
wait;
exit(1);
}
if (board_out[PN.px][PN.py] != '*') {
cout << "八嘎!在已经翻过的上面插旗想见蒋子文爷爷了是不是" << '\n';
wait;
return 0;
}
if (board_dev[PN.px][PN.py] == -1) {
die_mines++;
}
board_out[PN.px][PN.py] = 'f';
flags--;
}
if (c == 'c') {
cin >> PN.px >> PN.py;
wait_use();
if (board_out[PN.px][PN.py] != 'f') {
cout << "八嘎!在没插过旗的上面拔旗想见蒋子文爷爷了是不是" << '\n';
wait;
exit(1);
}
if (board_dev[PN.px][PN.py] == -1) {
die_mines--;
}
board_out[PN.px][PN.py] = '*';
flags++;
}
clear_terminal;
if (die_mines == mines) {
clear_terminal;
wait_use();
cout << '\n' << "你标记了所有地雷" << '\n';
cout << "/033";
system("color 0e");
cout << "你过关";
system("color 0f");
cout << "/033";
wait;
exit(1);
}
}
}
return 0;
}