社区讨论

自制神奇扫雷游戏

灌水区参与者 11已保存回复 18

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
18 条
当前快照
1 份
快照标识符
@m0i1hvym
此快照首次捕获于
2024/08/31 19:08
2 年前
此快照最后确认于
2025/11/05 00:27
4 个月前
查看原帖
CPP
   /* Copyright Flintmall, 2px Studio, 2024. All rights reserved. */
  /*                     Minesweeper Ver. F                      */
 /*                       作者:Flintmall                        */
/*                    扫雷F版 Release 1.1                      */
//致谢 Olive__ WeiBoYu 
#include <bits/stdc++.h>
#include <conio.h>
#include <windows.h>
using namespace std;
void setColor(int color){
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color);
	return ;
}
void cls(){
	system("cls");
	return ;
}
void wait(double n){
	_sleep(n * 1000);
	return ;
}
void wncls(double n){
	_sleep(n * 1000);
	cls();
	return ;
}
void waitEnter(){
	while(true){
		if(_kbhit()){
			int ch = _getch();
			if(ch == 13){
				break;
			}
		}
	}
}
int random(int x){
	srand(time(0));
	int m = rand() % x + 1;
	return m;
}
int main(){
	system("color F");
	int flag = 0;
	int wintimes = 0;
	for(int i = 3;i > 0;i--){
		cout<<"生成随机种子中……"<<endl;
		cout<<"还有 "<<i<<" 秒开始游戏……"<<endl;
		wncls(1);
	}
	char white[6][8] = {
	{' ','1','2','3','4','5','6','7'},
	{'1','#','#','#','#','#','#','#'},
	{'2','#','#','#','#','#','#','#'},
	{'3','#','#','#','#','#','#','#'},
	{'4','#','#','#','#','#','#','#'},
	{'5','#','#','#','#','#','#','#'}
	};
	char black[7][9] = {};
	int k1 = random(1),j1 = random(2);
	black[k1][j1] = '*';
	int k2 = random(2),j2 = random(3);
	black[k2][j2] = '*';
	int k3 = random(3),j3 = random(4);
	black[k3][j3] = '*';
	int k4 = random(4),j4 = random(5);
	black[k4][j4] = '*'; 
	int k5 = random(5),j5 = random(6);
	black[k5][j5] = '*';
	int k6 = random(6),j6 = random(7);
	black[k6][j6] = '*';
	int k7 = random(7),j7 = random(8);
	black[k7][j7] = '*';
	for(int i = 0;i < 7;i++){
		for(int j = 0;j < 9;j++){
			if(black[i][j] != '*' || i == 0 || j == 0 || i == 6 || j == 8){
				black[i][j] = ' ';
			}
		}
	}
	for(int i = 0;i < 6;i++){
		for(int j = 0;j < 8;j++){
			int sum = 0;
			if(black[i][j] != '*'){
				if(black[i - 1][j - 1] == '*'){
					sum++;
				}
				if(black[i - 1][j] == '*'){
					sum++;
				}
				if(black[i - 1][j + 1] == '*'){
					sum++;
				}
				if(black[i][j - 1] == '*'){
					sum++;
				}
				if(black[i][j + 1] == '*'){
					sum++;
				}
				if(black[i + 1][j - 1] == '*'){
					sum++;
				}
				if(black[i + 1][j] == '*'){
					sum++;
				}
				if(black[i + 1][j + 1] == '*'){
					sum++;
				}
				if(sum == 0){
					black[i][j] = '.';
				}
				else if(sum == 1){
					black[i][j] = '1';
				}
				else if(sum == 2){
					black[i][j] = '2';
				}
				else if(sum == 3){
					black[i][j] = '3';
				}
				else if(sum == 4){
					black[i][j] = '4';
				}
				else if(sum == 5){
					black[i][j] = '5';
				}
				else if(sum == 6){
					black[i][j] = '6';
				}
				else if(sum == 7){
					black[i][j] = '7';
				}
				else if(sum == 8){
					black[i][j] = '8';
				}
			}
			else{
				flag += 1;
			}
		}
	}
	for(int i = 0;i < 7;i++){
		for(int j = 0;j < 9;j++){
			if(i == 0 || j == 0 || i == 6 || j == 8){
				black[i][j] = ' ';
			}
		}
	} 
	int bomb = flag;
	while(true){
		for(int i = 0;i < 6;i++){
			for(int j = 0;j < 8;j++){
				if(white[i][j] == '.'){
					if(white[i + 1][j] == '#'){
						white[i + 1][j] = black[i + 1][j];
					}
					if(white[i][j + 1] == '#'){
						white[i][j + 1] = black[i][j + 1];
					}
					if(white[i][j - 1] == '#'){
						white[i][j - 1] = black[i][j - 1];
					}
					if(white[i - 1][j] == '#'){
						white[i - 1][j] = black[i - 1][j];
					}
				}
			}
		}
		cout<<"   -= 扫雷F版 Release v1.1 =-"<<endl;
		cout<<"     请输入操作符来进行操作"<<endl;
		cout<<"   q x y:打开位置在(x,y)的格子"<<endl;
		cout<<"w x y:将位置在(x,y)的格子插上旗帜"<<endl;
		cout<<"e x y:将位置在(x,y)的格子插上问号"<<endl; 
		cout<<"          u:打开更新日志"<<endl; 
		cout<<"             连胜:"<<wintimes<<endl;
		cout<<"                :)       "<<endl;
		cout<<"    -======================-"<<endl;
		for(int i = 0;i < 6;i++){
			cout<<"        ";
			for(int j = 0;j < 8;j++){
				if(j != 0 && i != 0){
					if(white[i][j] == '1'){
						setColor(3);
					}
					else if(white[i][j] == '2'){
						setColor(2);
					}
					else if(white[i][j] == '3'){
						setColor(4);
					}
					else if(white[i][j] == '4'){
						setColor(8);
					}
					else if(white[i][j] == '5'){
						setColor(6);
					}
					else if(white[i][j] == '6'){
						setColor(14);
					}
					else if(white[i][j] == '7'){
						setColor(1);
					}
					else if(white[i][j] == '8'){
						setColor(15);
					}
					else{
						setColor(8);
					}
				}
				else{
					setColor(15);
				}
				cout<<white[i][j]<<" ";
				setColor(15);
			}
			cout<<endl;
		}
		cout<<"    -======================-"<<endl;
		cout<<"        你剩下的旗帜:"<<flag<<endl;
		cout<<"输入操作|";
		char chose;
		int x,y; 
		cin>>chose; 
		if(chose == 'q' || chose == 'w' || chose == 'e'){
			cin>>x>>y;
		}
		if(chose == 'q' && x > 0 && y > 0 && x < 8 && y < 6){
			white[y][x] = black[y][x];
			if(white[y][x] == '!'){
				flag += 1;
			}
			if(black[y][x] == '*'){
				cls();
				cout<<"    -======================-"<<endl;
				cout<<"             你炸了!"<<endl;
				cout<<"               x("<<endl;
				cout<<"    -======================-"<<endl;
				wintimes = 0;
				for(int i = 0;i < 6;i++){
					cout<<"        ";
					for(int j = 0;j < 8;j++){
						if(j != 0 && i != 0){
							if(black[i][j] == '1'){
								setColor(3);
							}
							else if(black[i][j] == '2'){
								setColor(2);
							}
							else if(black[i][j] == '3' || black[i][j] == '*'){
								setColor(4);
							}
							else if(black[i][j] == '4'){
								setColor(8);
							}
							else if(black[i][j] == '5'){
								setColor(6);
							}
							else if(black[i][j] == '6'){
								setColor(14);
							}
							else if(black[i][j] == '7'){
								setColor(1);
							}
							else if(black[i][j] == '8'){
								setColor(15);
							}
							else{
								setColor(8);
							}
							cout<<black[i][j]<<" ";
						}
						else{
							setColor(15);
							cout<<white[i][j]<<" ";
						}
						setColor(15);
					}
					cout<<endl;
				}
				cout<<"输入c再来一次,输入t退出游戏。"<<endl;
				char continueOrNot;
				cin>>continueOrNot;
				if(continueOrNot == 'c'){
					for(int i = 1;i < 6;i++){
						for(int j = 1;j < 8;j++){
							white[i][j] = '#';
						}
					}
					flag = 0;
					for(int i = 0;i < 6;i++){
						for(int j = 0;j < 8;j++){
							if(black[i][j] == '*'){
								flag++;
							}
						}
					}
					bomb = flag;
				}
				else{
					break;
					return 0;
				}
			}
			else if(black[y][x] == '.'){
				if(y - 1 >= 1 && x - 1 >= 1){
					white[y - 1][x - 1] = black[y - 1][x - 1];
				}
				if(y - 1 >= 1){
					white[y - 1][x] = black[y - 1][x];
				}
				if(y - 1 >= 1 && x + 1 <= 7){
					white[y - 1][x + 1] = black[y - 1][x + 1];
				}
				if(x - 1 >= 1){
					white[y][x - 1] = black[y][x - 1];
				}
				if(x + 1 <= 7){
					white[y][x + 1] = black[y][x + 1];
				}
				if(y + 1 <= 5 && x - 1 >= 1){
					white[y + 1][x - 1] = black[y + 1][x - 1];
				}
				if(y + 1 <= 5){
					white[y + 1][x] = black[y + 1][x];
				}
				if(y + 1 <= 5 && x + 1 <= 7){
					white[y + 1][x + 1] = black[y + 1][x + 1];
				}
			}
		}
		else if(chose == 'w' && x > 0 && y > 0 && x < 8 && y < 6){
			white[y][x] = '!';
			flag -= 1;
			if(black[y][x] == '*'){
				bomb -= 1;
			}
		}
		else if(chose == 'e' && x > 0 && y > 0 && x < 8 && y < 6){
			white[y][x] = '?';
			if(white[y][x] == '!'){
				flag += 1;
			}
		}
		else if(chose == 'u'){
			cls();
			char version = 'a';
			while(true){
				cout<<"更新日志"<<endl;
				
				if(version == 'a'){
					cout<<endl;
					cout<<"2024/8/6 8:56 扫雷F版 Alpha v1.0.9:"<<endl;
					cout<<"    ·增加了输后在这一局游戏的基础上再来一局的功能。"<<endl;
					cout<<"    ·增加了赢后再来一局的功能。"<<endl;
					cout<<endl;
					cout<<"2024/8/5 11:20 扫雷F版 Alpha v1.0.8:"<<endl;
					cout<<"    ·修复了显示空格时旁侧的数字会消失的BUG。"<<endl;
					cout<<endl;
					cout<<"2024/8/3 11:48 扫雷F版 Alpha v1.0.7:"<<endl;
					cout<<"    ·更改了空格显示机制。"<<endl;
					cout<<endl;
					cout<<"2024/8/3 11:27 扫雷F版 Alpha v1.0.6:"<<endl;
					cout<<"    ·添加了1个彩蛋。:)"<<endl;
					cout<<endl;
					cout<<"2024/8/3 10:24 扫雷F版 Alpha v1.0.5:"<<endl;
					cout<<"    ·更改了操作符。"<<endl;
					cout<<endl;
					cout<<"2024/3/3 9:18 扫雷F版 Alpha v1.0.4:"<<endl;
					cout<<"    ·添加了数字颜色。"<<endl;
					cout<<endl; 
					cout<<"2023/12/24 10:55 扫雷F版 Alpha v1.0.3:"<<endl;
					cout<<"    ·优化了打开更新日志的方式。"<<endl;
					cout<<"    ·缩短了开始时间。"<<endl;
					cout<<endl;
					cout<<"2023/12/10 10:49 扫雷F版 Alpha v1.0.2:"<<endl;
					cout<<"    ·更改了底层代码。"<<endl;
					cout<<endl;
					cout<<"2023/11/12 11:45 扫雷F版 Alpha v1.0.1:"<<endl;
					cout<<"    ·增加了“你赢了!”页面。"<<endl;
					cout<<"    ·对“你炸了!”页面进行修改。"<<endl;
					cout<<"    ·增加了游戏结束后的“游戏结束!”语句。"<<endl;
					cout<<endl;
					cout<<"2023/11/12 11:20 扫雷F版 Alpha v1.0:"<<endl;
					cout<<"    ·增加了随机雷区。"<<endl;
					cout<<"    ·增加了更新日志。"<<endl;
					cout<<endl;
				}
				else if(version == 'b'){
					cout<<endl;
					cout<<"2024/8/6 17:30 扫雷F版 Beta v1.0"<<endl; 
					cout<<"    ·修复了打开更新日志后关不掉的BUG。"<<endl;
					cout<<"    ·修复了更新日志不会刷新页面的BUG。"<<endl;
				}
				else if(version == 'r'){
					cout<<endl;
					cout<<"2024/8/6 17:50 扫雷F版 Release v1.1:"<<endl;
					cout<<"    ·添加了2个彩蛋。;D"<<endl;
					cout<<"    ·对版本日志页面重新布局。"<<endl;
					cout<<endl;
					cout<<"2024/8/6 14:00 扫雷F版 Release v1.0:"<<endl;
					cout<<"    ·正式版发布。"<<endl;
					cout<<"    ·增加连胜显示。"<<endl;
				}
				else if(version == 't'){
					break;
				}
				cout<<"输入a查看Alpha版本的版本日志,输入b查看先遣版(Beta)的版本日志,输入r查看正式版(Release)的版本日志,输入t关闭版本日志。"<<endl;
				cin>>version;
				system("cls");
			}
		}
		else if(chose == 'k'){
			cls();
			while(true){
				cout<<"嘟嘟嗒嘟嘟嗒·ω·"<<endl;
				cout<<"你找到了柯哀小彩蛋!"<<endl;
				cout<<"既然找到小彩蛋,不如休息一下吧qwq"<<endl;
				waitEnter();
				break;
			}
		}
		else if(chose == 'i'){
			cls();
			int egg = 7;
			while(true){
				cout<<"享受柯哀小音效吧=)"<<endl;
				cout<<"Enter关闭"<<endl;
				cout<<char(egg);
				cout<<char(egg);
				cout<<char(egg);
				waitEnter();
				break;
			}
		}
		else if(chose == 'f'){
			cls();
			while(true){
				cout<<"扫雷F版的作者是Flintmall,"<<endl;
				cout<<"这里有他想说的话。"<<endl;
				cout<<endl;
				cout<<"距离第一次开始开发扫雷类型的游戏,已经过去超过一年了。"<<endl;
				cout<<"为什么我一直坚持做扫雷?"<<endl;
				cout<<"扫雷是我童年在Windows自带游戏中唯一能玩懂的游戏,"<<endl;
				cout<<"它策略,它有趣,它简单,它几近完美。"<<endl;
				cout<<"而对扫雷的热爱,"<<endl;
				cout<<"驱使着我做完了这个游戏。"<<endl;
				cout<<"感谢你,也感谢所有游玩游戏的玩家。"<<endl;
				cout<<"(按下Enter退出)"<<endl;
				waitEnter();
				break;
			}
		}
		if(bomb == 0 && flag == 0){
			cls();
			cout<<"    -======================-"<<endl;
			cout<<"             你赢了!"<<endl;
			cout<<"               :D"<<endl;
			cout<<"    -======================-"<<endl;
			for(int i = 0;i < 6;i++){
				cout<<"        ";
				for(int j = 0;j < 8;j++){
					if(j != 0 && i != 0){
						if(black[i][j] == '1'){
							setColor(3);
						}
						else if(black[i][j] == '2'){
							setColor(2);
						}
						else if(black[i][j] == '3' || black[i][j] == '*'){
							setColor(4);
						}
						else if(black[i][j] == '4'){
							setColor(8);
						}
						else if(black[i][j] == '5'){
							setColor(6);
						}
						else if(black[i][j] == '6'){
							setColor(14);
						}
						else if(black[i][j] == '7'){
							setColor(1);
						}
						else if(black[i][j] == '8'){
							setColor(15);
						}
						else{
							setColor(8);
						}
						cout<<black[i][j]<<" ";
					} 
					else{
						setColor(15);
						cout<<white[i][j]<<" ";
					}
					setColor(15);
				}
				cout<<endl;
			}
			wintimes++;
			cout<<"输入a再来一局新游戏,输入t退出游戏。"<<endl;
			char againOrNot;
			cin>>againOrNot;
			if(againOrNot == 'a'){
				for(int i = 1;i < 6;i++){
					for(int j = 1;j < 8;j++){
						white[i][j] = '#';
						black[i][j] = ' ';
					}
				}
				k1 = random(1),j1 = random(2);
				black[k1][j1] = '*';
				k2 = random(2),j2 = random(3);
				black[k2][j2] = '*';
				k3 = random(3),j3 = random(4);
				black[k3][j3] = '*';
				k4 = random(4),j4 = random(5);
				black[k4][j4] = '*'; 
				k5 = random(5),j5 = random(6);
				black[k5][j5] = '*';
				k6 = random(6),j6 = random(7);
				black[k6][j6] = '*';
				k7 = random(7),j7 = random(8);
				black[k7][j7] = '*';
				for(int i = 0;i < 7;i++){
					for(int j = 0;j < 9;j++){
						if(black[i][j] != '*' || i == 0 || j == 0 || i == 6 || j == 8){
							black[i][j] = ' ';
						}
					}
				}
				flag = 0;
				for(int i = 0;i < 6;i++){
					for(int j = 0;j < 8;j++){
						int sum = 0;
						if(black[i][j] != '*'){
							if(black[i - 1][j - 1] == '*'){
								sum++;
							}
							if(black[i - 1][j] == '*'){
								sum++;
							}
							if(black[i - 1][j + 1] == '*'){
								sum++;
							}
							if(black[i][j - 1] == '*'){
								sum++;
							}
							if(black[i][j + 1] == '*'){
								sum++;
							}
							if(black[i + 1][j - 1] == '*'){
								sum++;
							}
							if(black[i + 1][j] == '*'){
								sum++;
							}
							if(black[i + 1][j + 1] == '*'){
								sum++;
							}
							if(sum == 0){
								black[i][j] = '.';
							}
							else if(sum == 1){
								black[i][j] = '1';
							}
							else if(sum == 2){
								black[i][j] = '2';
							}
							else if(sum == 3){
								black[i][j] = '3';
							}
							else if(sum == 4){
								black[i][j] = '4';
							}
							else if(sum == 5){
								black[i][j] = '5';
							}
							else if(sum == 6){
								black[i][j] = '6';
							}
							else if(sum == 7){
								black[i][j] = '7';
							}
							else if(sum == 8){
								black[i][j] = '8';
							}
						}
						else{
							flag += 1;
						}
					}
				}
				for(int i = 0;i < 7;i++){
					for(int j = 0;j < 9;j++){
						if(i == 0 || j == 0 || i == 6 || j == 8){
							black[i][j] = ' ';
						}
					}
				}
				bomb = flag;
			}
			else{
				break;
				return 0;
			}
		}
		cls();
	}
	cout<<"游戏结束!";
	system("pause");
	return 0;
}

回复

18 条回复,欢迎继续交流。

正在加载回复...