扫雷游戏完整代码

扫雷游戏完整代码扫雷代码运行实现 test c

大家好,欢迎来到IT知识分享网。

目录

在线扫雷游戏链接

  1. 棋盘的定义
  2. 棋盘的初始化
  3. 打印棋盘
  4. 布置雷
  5. 排查雷
  6. 周围没有雷展开一片
  7. 获取坐标周围雷的个数

游戏完整代码
8. test.c
9. game.c
10. game.h


游戏实现效果

在线扫雷游戏:http://www.minesweeper.cn/

1. 棋盘的定义

在这里插入图片描述
在这里插入图片描述

2. 棋盘的初始化

在这里插入图片描述
3. 打印棋盘

在这里插入图片描述
4. 布置雷

在这里插入图片描述
5. 排查雷

在这里插入图片描述
6. 周围没有雷展开一片

在这里插入图片描述
7. 获取坐标周围雷的个数

在这里插入图片描述
游戏完整代码

1. test.c

#define _CRT_SECURE_NO_WARNINGS 1 #include "game.h" void eum() { 
    printf("\n"); printf(" 1.play 0.exit \n"); printf("\n"); } void game() { 
    char mine[ROWS][COLS];//存放布置好的雷 char show[ROWS][COLS];//存放排查出的雷的信息 //初始化棋盘 //1.mine数组最开始全是'0' //2.show数组最开始全是'*' isbord(mine, ROWS, COLS, '0'); isbord(show, ROWS, COLS, '*'); //打印棋盘 //Display(mine, ROW, COL); Display(show, ROW, COL); //1.布置雷 setmine(mine, ROW, COL); //Display(mine, ROW, COL); //2.排查雷 findmine(mine, show, ROW, COL); } int main() { 
    int input = 0; //设置随机数的时间戳 srand((unsigned int)time(NULL)); do { 
    eum(); printf("请输入>:"); scanf("%d", &input); switch (input) { 
    case 1: game(); break; case 0: printf("退出游戏\n"); break; default: printf("输入错误,重新输入\n"); break; } } while (input); return 0; } 

2. game.c

#define _CRT_SECURE_NO_WARNINGS 1 #include "game.h" //棋盘初始化 void isbord(char bord[ROWS][COLS], int rows, int cols, char set) { 
    for (int i = 0; i < rows; i++) { 
    for (int j = 0; j < cols; j++) { 
    bord[i][j] = set; } } } //打印棋盘 void Display(char bord[ROWS][COLS], int row, int col) { 
    printf("-------扫雷游戏-------\n"); for (int i = 0; i <= col; i++) { 
    printf("%d ", i); } printf("\n"); for (int i = 1; i <= row; i++) { 
    printf("%d ", i); for (int j = 1; j <= col; j++) { 
    printf("%c ", bord[i][j]); } printf("\n"); } } //布置雷 void setmine(char bord[ROWS][COLS], int row, int col) { 
    //布置10个雷 //生成随机的坐标,布置雷 int count = iscount; while (count) { 
    int x = rand() % row + 1; int y = rand() % col + 1; if (bord[x][y] == '0') { 
    bord[x][y] = '1'; count--; } } } //获取坐标周围雷的个数 int Getmine(char mine[ROWS][COLS], int x, int y) { 
    //也可以写成这样 //int count = 0; //for (int i = x - 1; i <= x + 1; i++) //{ 
    // for (int j = y - 1; j <= y + 1; j++) // { 
    // if (mine[i][j] == '1') // { 
    // count++; // } // } //} //return count; //字符转换成数字加起来 return (mine[x - 1][y] + mine[x - 1][y - 1] + mine[x][y - 1] + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] + mine[x][y + 1] + mine[x - 1][y + 1] - 8 * '0'); } //周围没有雷展开一片 void ExplosionSpread(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col, int x, int y, int* pw) { 
    //判断坐标是否为排查范围内 if (x >= 1 && x <= row && y >= 1 && y <= col) { 
    int sum = Getmine(mine, x, y); //获取坐标周围雷的个数 if (sum == 0) { 
    (*pw)++; //如果该坐标周围没有雷,就把该坐标置成空格,并向周围八个坐标展开 show[x][y] = ' '; for (int i = x - 1; i <= x + 1; i++) { 
    for (int j = y - 1; j <= y + 1; j++) { 
    if (show[i][j] == '*') //限制递归条件,防止已经排查过的坐标再次递归,从而造成死递归 ExplosionSpread(mine, show, row, col, i, j, pw); } } } else { 
    (*pw)++; show[x][y] = sum + '0'; } } } //排查雷 void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) { 
    int x = 0; int y = 0; int win = 0; int* pw = &win; while (win < row * col - iscount) { 
    printf("请输入要排查的坐标>:"); scanf("%d %d", &x, &y); //判断坐标是否为排查范围内 if (x >= 1 && x <= row && y >= 1 && y <= col) { 
    if (mine[x][y] == '1') { 
    printf("很遗憾你被炸死\n"); //被炸死打印mine数组看看怎么被炸死的 Display(mine, ROW, COL); break; } else { 
    if (show[x][y] != '*') //判断是否重复排查 { 
    printf("该坐标已被排查,请重新输入!\n"); continue; } else { 
    ExplosionSpread(mine, show, row, col, x, y, pw); //周围没有雷展开一片 system("cls");//清空屏幕 Display(show, ROW, COL); } } } else { 
    printf("坐标非法,重新输入\n"); } } if (win == row * col - iscount) { 
    printf("恭喜你,排雷成功\n"); Display(mine, ROW, COL); } } 

3. game.h

#pragma once #include <stdio.h> #include <time.h> #include <stdlib.h> #include <windows.h> #define iscount 10 #define ROW 9 #define COL 9 #define ROWS ROW + 2//防止越界访问 #define COLS COL + 2//防止越界访问 //初始化棋盘 void isbord(char bord[ROWS][COLS], int rows, int cols, char set); //打印棋盘 void Display(char bord[ROWS][COLS], int row, int col); //布置雷 void setmine(char bord[ROWS][COLS], int row, int col); //排查雷 void findmine(char mine[ROWS][COLS],char show[ROWS][COLS], int row, int col); 

游戏实现效果

扫雷代码运行实现_test.c

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/140082.html

(0)
上一篇 2025-05-30 20:20
下一篇 2025-05-30 20:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信