游戏系列~扫雷(8)

#include <cstdio>
#include <cmath>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <iomanip>
#include <cstring>
#include <ctime>
#include <algorithm>
#include <queue>
#include <map>
#include <vector>
#include <set>
#include <stack>
#include <windows.h>
#include <conio.h>
#define H 100
#define L 100
using namespace std;
char a[H][L],e=275;
int s[H][L];
int n,m,flag,kkk=259,b=260,c=261,d=262;
unsigned START;
void SetColor(unsigned short ForeColor,unsigned short BackGroundColor) {
HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor);
}
void HideCursor() {
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void Initial();
inline int g(int i,int j) {
return (a[i][j-1]==e)
+(a[i][j+1]==e)
+(a[i+1][j]==e)
+(a[i-1][j]==e)
+(a[i-1][j-1]==e)
+(a[i-1][j+1]==e)
+(a[i+1][j-1]==e)
+(a[i+1][j+1]==e);
}
inline int h(int i,int j) {
return (a[i][j+1]==e)
+(a[i+1][j]==e)
+(a[i-1][j]==e)
+(a[i+1][j+1]==e)
+(a[i-1][j+1]==e);
}
inline int z(int i,int j) {
return (a[i][j-1]==e)
+(a[i][j+1]==e)
+(a[i+1][j]==e)
+(a[i+1][j-1]==e)
+(a[i+1][j+1]==e);
}
void csh() {
srand(time(0));
int c;
n=m=c=0;
scanf ("%d",&flag);
if (flag==1)n=m=10;
else if (flag==2)n=m=16;
else if (flag==3)n=16,m=30;
else if (flag==4) {
printf ("请输入行数(<100)\n");
cin>>n;
printf ("请输入列数(<100)\n");
cin>>m;
}
if (flag==1)c=10;
else if (flag==2)c=40;
else if (flag==3)c=99;
else if (flag==4) {
printf ("请输入雷数(<%d)\n",n*m/4);
cin>>c;
}
memset(a,‘0‘,sizeof(a));
memset(s,0,sizeof(s));
while (c--) {
int x=rand()%n,y=rand()%m;
while (a[x][y]==e)x=rand()%n,y=rand()%m;
a[x][y]=e;
}
for (int x=0; x<n; x++)
for (int y=0; y<n; y++)
if (x>0&&y>0) {
if (a[x][y]!=e)a[x][y]=g(x,y)+‘0‘;
} else if (x>0&&!y) {
if (a[x][y]!=e)a[x][y]=h(x,y)+‘0‘;
} else if (!x&&y>0) {
if (a[x][y]!=e)a[x][y]=z(x,y)+‘0‘;
} else if (!x&&!y) {
if (a[x][y]!=e)a[x][y]=(a[x][y+1]==e)
+(a[x+1][y]==e)
+(a[x+1][y+1]==e)+‘0‘;
}
}
inline void f1(int jkjk,int kjkj) {
s[jkjk][kjkj]=a[jkjk][kjkj]==‘0‘?-1:1;
s[jkjk][kjkj-1]=a[jkjk][kjkj-1]==‘0‘?-1:1;
s[jkjk][kjkj+1]=a[jkjk][kjkj+1]==‘0‘?-1:1;
s[jkjk-1][kjkj-1]=a[jkjk-1][kjkj-1]==‘0‘?-1:1;
s[jkjk-1][kjkj+1]=a[jkjk-1][kjkj+1]==‘0‘?-1:1;
s[jkjk-1][kjkj]=a[jkjk-1][kjkj]==‘0‘?-1:1;
s[jkjk+1][kjkj-1]=a[jkjk+1][kjkj-1]==‘0‘?-1:1;
s[jkjk+1][kjkj+1]=a[jkjk+1][kjkj+1]==‘0‘?-1:1;
s[jkjk+1][kjkj]=a[jkjk+1][kjkj]==‘0‘?-1:1;
}
inline void f2(int jkjk,int kjkj) {
s[jkjk][kjkj]=a[jkjk][kjkj]==‘0‘?-1:1;
s[jkjk][kjkj+1]=a[jkjk][kjkj+1]==‘0‘?-1:1;
s[jkjk-1][kjkj+1]=a[jkjk-1][kjkj+1]==‘0‘?-1:1;
s[jkjk-1][kjkj]=a[jkjk-1][kjkj]==‘0‘?-1:1;
s[jkjk+1][kjkj+1]=a[jkjk+1][kjkj+1]==‘0‘?-1:1;
s[jkjk+1][kjkj]=a[jkjk+1][kjkj]==‘0‘?-1:1;
}
inline void f3(int jkjk,int kjkj) {
s[jkjk][kjkj]=a[jkjk][kjkj]==‘0‘?-1:1;
s[jkjk][kjkj-1]=a[jkjk][kjkj-1]==‘0‘?-1:1;
s[jkjk][kjkj+1]=a[jkjk][kjkj+1]==‘0‘?-1:1;
s[jkjk+1][kjkj-1]=a[jkjk+1][kjkj-1]==‘0‘?-1:1;
s[jkjk+1][kjkj+1]=a[jkjk+1][kjkj+1]==‘0‘?-1:1;
s[jkjk+1][kjkj]=a[jkjk+1][kjkj]==‘0‘?-1:1;
}
inline void f4(int jkjk,int kjkj) {
s[jkjk][kjkj]=a[jkjk][kjkj]==‘0‘?-1:1;
s[jkjk+1][kjkj]=a[jkjk+1][kjkj]==‘0‘?-1:1;
s[jkjk+1][kjkj+1]=a[jkjk+1][kjkj+1]==‘0‘?-1:1;
s[jkjk][kjkj+1]=a[jkjk][kjkj+1]==‘0‘?-1:1;
}
inline void bs(char jx) {
if (jx==‘0‘)SetColor(0,0);
if (jx==‘1‘)SetColor(1,1);
if (jx==‘2‘)SetColor(2,2);
if (jx==‘3‘)SetColor(5,5);
if (jx==‘4‘)SetColor(3,3);
if (jx==‘5‘)SetColor(4,4);
if (jx==‘6‘)SetColor(3,3);
if (jx==‘7‘)SetColor(6,6);
if (jx==‘8‘)SetColor(4,4);
}
void js() {
SetColor (7,7);
printf ("\n ");
for (int jjjj=1; jjjj<=m; jjjj++)printf ("%02d",jjjj);
printf ("\n ");
printf("╔");
for (int jjjj=1; jjjj<=m; jjjj++)printf ("═");
puts("╗");
for (int jjjj=0; jjjj<n; jjjj++) {
SetColor(7,7);
printf ("%02d║",jjjj+1);
bs(a[jjjj][0]);
printf ("%c",a[jjjj][0]);
for (int kkkk=1; kkkk<m; kkkk++) {
SetColor(7,7);
printf ("|");
bs(a[jjjj][kkkk]);
printf ("%c",a[jjjj][kkkk]);
}
SetColor(7,7);
printf (" ║");
printf ("%02d",jjjj+1);
printf ("\n");
}
printf (" ╚");
for (int kkkk=0; kkkk<m; kkkk++)printf ("═");
puts("╝");
printf (" ");
for (int kkkk=0; kkkk<m; kkkk++)printf ("%02d",kkkk+1);
printf ("\n");
system("pause");
}
void sx() {
system("cls");
void HideCursor();
SetColor(6,6);
printf ("欢迎玩扫雷!\n%c %c %c %c\n1:10*10(10个雷)\n2:16*16(40个雷)\n3:16*30(99个雷)\n4:自定义\n",kkk,b,c,d);
printf ("游戏玩法:\n"
"输入两个数,\n"
"第一个表示行数,\n"
"第二个表示列数,\n"
"第三个表示是把它标记为雷还是翻开,\n"
"1表示翻开,2表示视为雷\n"
"温馨提示:\n"
"本游戏中,\n"
"%c 表示在地图中这里是雷\n"
"%c 表示在地图中这里未翻开\n"
"* 表示在地图中这里被标记为雷\n"
"引领天下(U39863)原创\n",e,258
);
printf ("\n ");
SetColor(7,7);
bool isok=true,okis=true;
for (int nm=0; nm<n; nm++)
for (int mn=0; mn<m; mn++)
if (a[nm][mn]!=e&&!s[nm][mn]&1)isok=false;
else if (a[nm][mn]==e&&s[nm][mn]!=2)okis=false;
if (isok||okis) {
system("cls");
SetColor (6,6);
printf ("你赢了!恭喜你!\n");
printf ("用时:%d毫秒\n",clock()-START);
js();
return;
}
for (int jjjj=1; jjjj<=m; jjjj++)printf ("%02d",jjjj);
printf ("\n ");
printf("╔");
for (int jjjj=1; jjjj<=m; jjjj++)printf ("═");
puts("╗");
for (int jjjj=0; jjjj<n; jjjj++) {
printf ("%02d║",jjjj+1);
if (s[jjjj][0]==1||s[jjjj][0]==-1) {
bs(a[jjjj][0]);
printf ("%c",a[jjjj][0]);
} else if (s[jjjj][0]==2) {
SetColor(7,7);
printf ("*");
} else if (!s[jjjj][0]) {
SetColor(7,7);
printf ("%c",258);
}
for (int kkkk=1; kkkk<m; kkkk++) {
if (s[jjjj][kkkk]==1||s[jjjj][kkkk]==-1) {
SetColor(7,7);
printf ("|");
bs(a[jjjj][kkkk]);
printf ("%c",a[jjjj][kkkk]);
} else if (s[jjjj][kkkk]==2) {
SetColor(7,7);
printf ("|*");
} else if (s[jjjj][kkkk]==0) {
SetColor(7,7);
printf ("|%c",258);
}
}
SetColor(7,7);
printf (" ║");
printf ("%02d",jjjj+1);
printf ("\n");
}
printf (" ╚");
for (int kkkk=0; kkkk<m; kkkk++)printf ("═");
puts("╝");
printf (" ");
for (int kkkk=0; kkkk<m; kkkk++)printf ("%02d",kkkk+1);
printf ("\n");
int i,j,fu;
cin>>i>>j>>fu;
s[--i][--j]=fu;
if (a[i][j]==‘0‘&&s[i][j]==1) {
if (i>0&&j>0)f1(i,j);
else if (i>0&&!j)f2(i,j);
else if (!i&&j>0)f3(i,j);
else if (!i&&!j)f4(i,j);
for (int jkjk=0; jkjk<n; jkjk++)
for (int kjkj=0; kjkj<m; kjkj++)
if (s[jkjk][kjkj]<0) {
if (jkjk>0&&kjkj>0)f1(jkjk,kjkj);
else if (jkjk>0&&!kjkj)f2(jkjk,kjkj);
else if (!jkjk&&kjkj>0)f3(jkjk,kjkj);
else if (!jkjk&&!kjkj)f4(jkjk,kjkj);
}
for (int jkjk=n-1; jkjk>=0; jkjk--)
for (int kjkj=m-1; kjkj>=0; kjkj--)
if (s[jkjk][kjkj]<0) {
if (jkjk>0&&kjkj>0)f1(jkjk,kjkj);
else if (jkjk>0&&!kjkj)f2(jkjk,kjkj);
else if (!jkjk&&kjkj>0)f3(jkjk,kjkj);
else if (!jkjk&&!kjkj)f4(jkjk,kjkj);
}
}
if (a[i][j]==e&&s[i][j]==1) {
system("cls");
SetColor (6,6);
printf ("你输了\n");
printf("用时:%d毫秒\n",clock()-START);
js();
return;
}
isok=true,okis=true;
for (int nm=0; nm<n; nm++)
for (int mn=0; mn<m; mn++)
if (a[nm][mn]!=e&&!s[nm][mn]&1)isok=false;
else if (a[nm][mn]==e&&s[nm][mn]!=2)okis=false;
if (isok||okis) {
system("cls");
SetColor (6,6);
printf ("你赢了!恭喜你!\n");
printf ("用时:%d毫秒\n",clock()-START);
js();
return;
}
sx();
}
void Initial() {
printf("\n\n\n\n\n\t\t按回车键开始程序");
getchar();
system("cls");
int iiii;
printf("\n\n\n\n\n\t\t");
printf("●玩命加载中〉");
for(iiii=0; iiii<=100; iiii++) {
SetColor(iiii%7+8,0);
printf("%3d",iiii);
SetColor(15,0);
printf(" %%");
SetColor(iiii%7+8,0);
printf(" Written by Ekko");
Sleep(10);
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
}
for(iiii=0; iiii<=20; iiii++) {
SetColor(iiii%7+8,0);
printf("%3d",iiii*5);
SetColor(15,0);
printf(" %%");
SetColor(iiii%7+8,0);
printf(" 正在读取作者QQ......");
Sleep(50);
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
}
Sleep(100);
printf("\n\n\n\n\n\t\t");
cout<<"qq:2326439151";
Sleep(200);
system("cls");
system("title 扫雷");
printf ("欢迎玩扫雷!\n%c %c %c %c\n1:10*10(10个雷)\n2:16*16(40个雷)\n3:16*30(99个雷)\n4:自定义\n",kkk,b,c,d);
csh();
printf ("地图初始化完成!\n");
START=clock();
sx();
}
int main() {
/*freopen(".in","r",stdin);
freopen(".out","w",stdout);*/
START=clock();
Initial();
return 0;
}

原文地址:https://www.cnblogs.com/yszhyhm/p/8969596.html

时间: 2024-07-30 05:37:20

游戏系列~扫雷(8)的相关文章

【用PS3手柄在安卓设备上玩游戏系列】FC(任天堂NES/FC主机)模拟器

NESoid 是安卓系统下公认最好的FC模拟器.据我所知,现在安卓系统下面的绝大部分的FC模拟器,都是基于 NESoid 的内核来开发的. 官方网站:http://www.nesoid.com NESoid 是原生支持实体手柄的,下面以<超级魂斗罗>为例说明我的设置步骤: Step1:运行 SixaxisController(以下简称 SC),连接手柄和设备,我的设备是小米2: Step2:扩展菜单按钮 > 设置 > 手柄设置,勾选"启用手柄",然后选择&quo

C++游戏系列5:不止有一件武器

很多其它见:C++游戏系列文件夹 知识点:对象数组作为数据成员 改进:每一个角色所持有的武器不仅仅一件,故持有的武器,用了对象数组来表示,当然,也能够是空手. 由此而带来的,还得记录一共同拥有几件武器,当前手持哪种武器. [项目-角色有多样武器] 1.game.h:类声明 #ifndef GAME_H_INCLUDED #define GAME_H_INCLUDED #include <string> using namespace std; const int N=10; //每一个角色最多

C++游戏系列:文件夹

C++游戏系列1:角色类 C++游戏系列2:给角色装备武器 C++游戏系列3:用多文件组织角色类 C++游戏系列4:杀伤距离有限制 C++游戏系列5:不止有一件武器 C++游戏系列6:自己动起来 C++游戏系列7:小结一下 C++游戏系列8:--(待续) 原文地址:https://www.cnblogs.com/zhchoutai/p/8782545.html

WPF编游戏系列 之六 动画效果(1)

原文:WPF编游戏系列 之六 动画效果(1)        本篇主要针对界面进行动画效果处理.首先在打开或关闭界面时,使其产生动态效果而不是生硬的显示或消失(如下图).其次在鼠标放到关闭窗口图标上时,使其出现闪动效果.下面将通过Storyboard和EventTrigger实现这些效果.     1. 先从简单的入手吧,为关闭图标增加闪动效果,首先要在ScrollViewer中添加一个关闭窗口图标. ... ... <ScrollViewer Name="queryScrollViewer

HTML5游戏开发-扫雷及其算法研究

吕蒙曰:士隔三月[1],当刮目相看.所以,在下在这三月中发奋图强,花了约莫8节信息课的时间研究扫雷.呜呼,由于在下才能尚且不足,所以也就只能勉强打过中级难度的吧.不过,一边玩的同时,我还一边对扫雷这个游戏的制做方法构思了一下.所以说,本文中的算法完全是凭借自己对扫雷游戏规则的总结而自行研发出来的,倘若和MS的扫雷玩法有些出入,还望各位看官见谅. [1]出自<孙权劝学>,原文为"士别三日",由于在下这三个月来都不曾发表博客,所以引申到"士隔三月",各位看官

第一次写小小小小小游戏, 扫雷

想写扫雷的起因: 前两天上机课做完作业同学没事干, 跟我说:学校的电脑怎么连扫雷都没有啊? 当时我就跟她说 等我写一个给你玩! 然后, 就给自己挖下了这个坑. 现在正好快要期末考了, 这几天在努力复习高数, 好害怕挂啊, 所以扫雷这个坑就一点点填,八成是要等考完试之后再填完. 写这个扫雷跟竞赛完全没有关系, 就当是提高自己代码能力吧, 学习算法之余也搞点好玩的. 本人也不是经常玩扫雷, 不知道自己写的机制和真正的扫雷机制一不一样, 还顺便去百度了一下, 感觉差不多. 游戏呢就是一个简单的控制台,

【用PS3手柄在安卓设备上玩游戏系列】谈安卓游戏对手柄的支持

不同的游戏对于手柄的支持程度是不一样的,对应所需要进行的手柄设置也不尽相同.我没有这样的时间和精力,针对每一款游戏去写博客,但找出不同游戏中的共同点,针对同一类的游戏去写博客,应该是可行的.我把安卓上的游戏分成下面四种类型: 1.原生支持实体手柄的 安卓系统本身是支持实体手柄的.淘宝上面随便一搜"安卓手柄",就能找到各种外设厂商针对安卓系统定制的游戏手柄.游戏厂商跟外设厂商的支持总是相辅相成的,在游戏厂商的支持下,有些游戏是原生支持手柄的.这里的"原生"二字,强调的

游戏系列~2048(2)

#include <stdio.h>#include <time.h> /* 包含设定随机数种子所需要的time()函数 */#include <conio.h> /* 包含Windows平台上完成输入字符不带回显和回车确认的getch()函数 */#include <windows.h> /* 包含Windows平台上完成设定输出光标位置达到清屏功能的函数 */ #include <bits/stdc++.h>using namespace s

游戏系列~苍穹世界(5)

#include<stdlib.h> #include<stdio.h> #include<time.h> //suiji #include<string.h> #include<windows.h> //SLEEP函数 struct Player //玩家结构体,并初始化player { char name[21]; int attack; int defense; int health; long int max_health; int le