社区讨论
自制神奇扫雷游戏
灌水区参与者 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 条回复,欢迎继续交流。
正在加载回复...