c++扫雷小游戏

我是一个信息学奥赛的初中生,今天第一次在CSDN上发博客,如果不喜欢也勿喷,谢谢😃

以下是一个我自己做的C++的扫雷小游戏,可以供大家参考

#include<iostream>
#include<cmath>
#include<ctime>
#include<cstring>
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
 
using namespace std;
int maxn=16;
int maxm=30;
int square[100][100];
bool flag[100][100];
int move_x[8]={0,0,1,-1,1,1,-1,-1};
int move_y[8]={1,-1,0,0,1,-1,1,-1};
int xxx,yyy;
bool gameover=true; 
/*
用dfs鼠标点击的那个点,如果是数字,则直接翻开;如果是空格,则进行搜索。 
*/
void dfs(int x,int y){
    flag[x][y]=false;
    if(square[x][y]==-1) gameover=false;
    if(!gameover) return;
    if(square[x][y]!=0) return;
    for(int i=0;i<8;i++)
    {
        int now_x=move_x[i]+x;
        int now_y=move_y[i]+y;
        if(square[now_x][now_y]!=0){
            flag[now_x][now_y]=false;
        }
    }
    for(int i=0;i<4;i++)
    {
        int now_x=move_x[i]+x;
        int now_y=move_y[i]+y;
        if(flag[now_x][now_y]){
            flag[now_x][now_y]=false;
            dfs(now_x,now_y);
        }
    }
}
/*
数第x,y个格子,周围有多少个雷
*/ 
int count_num(int x,int y)
{
    int sum=0;
    for(int i=x-1;i<=x+1;i++)
        for(int j=y-1;j<=y+1;j++)
            if (square[i][j]==-1) sum++;
    return sum;
}
 
/*
将下面将要输出的东西改变颜色
*/ 
void SetColor(unsigned short ForeColor=7,unsigned short BackGroundColor=0)
{
    HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor);
}
 
/*
初始化,随机生成一个雷阵 
*/ 
void intt(){
    srand(time(NULL));
    for(int i=0;i<maxn+5;i++)
        for(int j=0;j<maxm+5;j++)
            square[i][j]=9;
    memset(flag,true,sizeof(flag));
    int xx=rand() % maxn+1;
    int yy=rand() % maxm+1;
    int num=1;
    while(num<=99)
    {
        while(square[xx][yy]==-1||xx==xxx&&yy==yyy)
        {
            xx=rand()%maxn+1;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值