C语言实现扫雷

实现用C语言编写一个扫雷游戏


大家想必都玩过扫雷,无论那个版本都有难度供已选择,下面来分享一个自己用C语言编写的扫雷游戏吧!

编写语言:C语言
编写软件:visual studio 2017

1.首先是将游戏的测试模块写好,要有提示玩家进入的菜单函数以及选择函数等各种需要编写的函数想出一个整体框架来

//测试模块test。c
#include "game.h"

void Menu()
{
    printf("***********************************************************************\n");
    printf("************************1.PLAY          0.EXIT*************************\n");
    printf("***********************************************************************\n");
}

int Game()
{
    int x = 0;
    int y = 0;
    int i = 0;
    int j = 0;
    int ret = 0;
    int num = count;
    char real[ROWS][COLS] = {‘0‘};
    char show[ROWS][COLS] = {‘*‘};
    srand((unsigned)time(NULL));
    Init(real,ROWS, COLS, ‘0‘);
    Init(show, ROWS, COLS, ‘*‘);
    SetMine(real, ROWS, COLS, count);
    Display(show, ROW, COL);
    printf("Pelase Input x and y :\n");
    scanf_s("%d%d", &x, &y);
    if (real[x][y] == ‘1‘)//保证第一次不踩到雷
    {
        do
        {
            SetMine(real, ROWS, COLS, count);
        } while (real[x][y] == ‘1‘);
    }
    show[x][y] = SearchMind(real, &x, &y, ROWS, COLS) + ‘0‘;
    for (i = 0; i <ROWS; i++)//管理员监视器模块
    {
        //printf("%3d", i);
        for (j = 0; j < COLS; j++)
        {
            printf("%3c", real[i][j]);
        }
        printf("\n");
    }
    printf("\n");
    Display(show, ROW, COL);
    while ((ROW*COL) > (ROW*COL - num))
    {
        printf("Pelase Input x and y :\n");
        scanf_s("%d%d", &x, &y);
        ret = SearchMind(real, &x, &y, ROWS, COLS) + 1;
        if (ret!=0)//不是踩到雷的情况进入
        {
            show[x][y] = SearchMind(real, &x, &y, ROWS, COLS) + ‘0‘;//转化成字符型
            Display(show, ROW, COL);
        }
        if (ret == 0)//踩到雷的情况进入
        {
            return 0;
        }
        num--;
    }
    return 1;
}

int main()
{

    Menu();
    while (1)
    {
        int m = 0;
        scanf_s("%d", &m);
        switch (m)
        {
        case 1:
        {
            if (Game())
            {
                printf("you win\n");
            }
            else
            {
                printf("you failed\n");
                Menu();
            }
            break;
        }
        case 2:
            return 0;
            break;
        default:
            printf("请重新输入\n");
            break;
        }
    }
}

测试函数中的头文件 #include "game.h",而不是#include

接下来是头文件game.h

#ifndef __GAME_H__
#define __GAME_H__

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define ROWS 11
#define COLS 11
#define ROW 9
#define COL 9
#define count 10

void Init(char arr[ROWS][COLS],int rows, int cols, const char ch);
void SetMine(char str[ROWS][COLS], int rows, int cols, int cot);
void Display(char str[ROWS][COLS], int rows, int cols);
int SearchMind(char str[ROWS][COLS], int* x, int* y, int rows, int cols);
#endif

接下来是最重要的部分也是该游戏的核心部分游戏函数文件game.c

 #include "game.h"
void Init(char arr[ROWS][COLS], int rows, int cols, const char ch)
{
    int i = 0;
    int j = 0;
    for (i = 0; i < rows; i++)
    {
        for (j = 0; j < cols; j++)
        {
            arr[i][j] = ch;
        }
    }
}

//随机埋雷 SetMine()
void SetMine(char str[ROWS][COLS], int rows, int cols, int cot)
{
    int x = 0;
    int y = 0;
    while (cot > 0)
    {
        x = rand() % 9 + 1;
        y = rand() % 9 + 1;
        if (str[x][y]==‘0‘)
        {
            str[x][y] = ‘1‘;
            cot--;
        }
    }
}

//显示棋盘 Display()
void Display(char str[ROWS][COLS], int rows, int cols)
{
    int i = 0;
    int j = 0;
    for (i = -1; i < rows; i++)
    {
        printf("%3d", i+1);
    }
    printf("\n");
    for (i = 1; i <=rows; i++)
    {
        printf("%3d", i);
        for (j = 1; j <= cols; j++)
        {
            printf("%3c", str[i][j]);
        }
        printf("\n");
    }
}

//输入坐标,判断周围的雷数,并回馈数字,为0时递归SearchMine()
int SearchMind(char str[ROWS][COLS], int* x, int* y, int rows,int cols)
{
    int number = 0;
    //判断是否踩到雷
    if (str[*x][*y] == ‘1‘)
    {
        return -1;
    }
    number = str[*x - 1][*y - 1] + str[*x - 1][*y] + str[*x - 1][*y + 1]
        + str[*x][*y - 1] + str[*x][*y + 1]
        + str[*x + 1][*y - 1] + str[*x + 1][*y] + str[*x + 1][*y + 1] - 8 * ‘0‘;
        //if (number == 0)
        //{
        //  //改变x,y的值实现爆炸效果

        //  number = SearchMind(str, &x, &y, rows, cols);
        //}//递归
        return number;
}

//判断输赢 Distinguish()

原文地址:https://www.cnblogs.com/liuzhengkai/p/9096968.html

时间: 2024-10-22 18:36:59

C语言实现扫雷的相关文章

Java语言基础扫雷

一.数据类型 Java支持两种数据类型:基本类型和引用类型.基本类型有布尔(boolean)类型和数值类型,数值类型有整数类型(byte.short.char.int.long)和浮点数类型(float.double),其中char也称为字符类型,统称八大基本数据类型.byte型整数在内存中占8位,short型整数在内存中占16位,int型整数在内存中占32位,long型整数在内存中占64位,float型数值在内存中占32位,double型数值在内存中占64位.按取值范围从小到大排列为:byte

C语言写扫雷小游戏2

这是下午写的,这次的修改增加了鼠标的事件,需要的是windows的消息机制,WinAPI函数,以下是新添加的定义 struct { int num;//格子当前状态,1表示有雷,0表示无雷或已经显示数字 int roundnum;//统计格子周围的雷数 int flag;//右键按下显示红旗标志,0表示没有,1表示有 }Mine[10][10]; POINT Mouse;//定义鼠标事件 int MouseX, MouseY;//鼠标的x,y坐标 int mineNUM;//统计处理过的格子数

C语言写扫雷小游戏1

用的ide是vs 2013,自己学习都是参考网上的代码,由于vs不带tc的graphics.h,所以下载easyx库,将include和lib复制到vc的目录. easyx的graphics.h和tc的还是有区别的,百科上的示例 使用上,基本和 Turbo C没太大区别.启动Visual C++,创建一个控制台项目(Win32 Console Application),然后引用 graphics.h 头文件就可以了.看一个画圆的例子: #include <graphics.h> // 就是需要

c语言编程扫雷游戏

头文件:(test.h) #ifndef _MINE_H_ #define _MINE_H_ #include <stdio.h> #include <windows.h> #include <string.h> #include <time.h>//调用标准库或系统中的头文件 #pragma warning(disable:4996)//VS中解决scanf函数问题 #define ROW 12 #define COL 12 #define MINES 2

C语言可以开发哪些项目?(转)

原文地址:https://www.cnblogs.com/shiyanlou/p/6098661.html 知乎:https://www.zhihu.com/question/20564904 C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多初学者在学习的过程中难免会出现迷茫,比如:不知道C语言可以开发哪些项目,可以应用在哪些实际的开发中--,这些迷茫也导致了我们在学习的过程中不知道如何学.学什么,所以,总结这个列表,希望对C语言初学者可以有所帮助~ C语言可以做什么? 从最简单

学会了C语言可以开发出很多东西吗?

C语言相比其他高级语言,就像内功和剑法一样.只会C语言可能并不能写出一个看起来就很厉害的程序,但C语言是你学好其他一切语言的基础.有了C语言的底子,再学别的语言就很容易上手了. 你能想到的,C语言都能搞,可以说是无所不能,把C学好,上手其他语言也会事半功倍.只看教程不动手永远学不会,推荐10个C的入门小项目,由易到难,开始动手做一些常见的小东西吧. 1C/C++ - C语言制作简单计算器 用C语言做一个简单的计算器,进行加.减.乘.除操作.项目涉及的所有数学知识都很简单,但输入过程会增加复杂性.

C语言新手写扫雷攻略1

工欲善其事,必先利其器,首先要准备好开发环境,既然是C语言,那就不是WinAPI的扫雷,就是纯的C语言开发,但是以前的C都是TC开发的,现在用肯定是过时很久了,但是也是有解决办法的,某些大神开发出EasyX这个库,基本上还原了TC的函数,就可以在各种IDE下使用了,下面是下载地址和帮助,帮助里面有所有函数的调用方法 http://www.easyx.cn/ 下载解压好后将include 和 lib 文件夹复制到你的VC对应安装的文件夹里覆盖就可以使用了,从vc++6.0到vs2013都可以使用

扫雷的分析与实现——C语言

扫雷作为一款经典游戏,为大家所熟知.今天我使用C语言来编写一个简单的扫雷程序. 主要功能有: 1.第一次下子不被炸死:2.下子后显示周围布雷数: 分析游戏及功能 首先可以将扫雷的游戏界面看做一个二维数组:然后有限的雷随机排布在这个二维数组中,玩家通过输入坐标来确定该坐标对应的二维数组坐标是否是雷,若不是则显示周围布雷数,这时考虑坐标如果在数组的中间则少显示周围8个坐标布雷情况,而在数组边缘则小于8.因此我在创建数组时创建一个比所需数大2行2列.将所需数组视为中间数组即可:如图: 代码创建 创建t

c语言 扫雷外挂

#include <windows.h> DWORD x = 0; DWORD m = 0, n = 0; DWORD addr_a = 0x1005361, addr_b = 0x1005361+29; BYTE buffer = 0; BYTE mark = 142; int main() { HWND hWnd = ::FindWindow("扫雷", NULL); ::GetWindowThreadProcessId(hWnd, &x); HANDLE hP