C语言实现扫雷游戏(初级版)

 更新时间:2020年09月22日 11:19:23   作者:sugar high  
这篇文章主要为大家详细介绍了C语言实现扫雷游戏初级版,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下

game.h

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

#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2

#define EASY 10
//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols,char set);
void PrintBoard(char board[ROWS][COLS], int row, int col);

//放雷
void SetMine(char board[ROWS][COLS], int row, int col);

//扫雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

game.c

#include"game.h"

//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{
 int i = 0;
 int j = 0;
 for (i = 0; i < rows; i++)
 {
 for (j = 0; j < cols; j++)
 {
  board[i][j] = set;
 }
 }
}

//打印棋盘
void PrintBoard(char board[ROWS][COLS], int row, int col)
{
 int i = 1;
 int j = 1;
 printf("-------------------\n");
 for (i = 0; i <= row; i++)
 {
 printf("%d ", i);
 }
 printf("\n");
 for (i = 1; i <= ROW; i++)
 {
 printf("%d ", i);

 for (j = 1; j <= COL; j++)
 {
  printf("%c ", board[i][j]);
 }
 printf("\n");
 
 }
 printf("-------------------\n");

}

//放雷
void SetMine(char board[ROWS][COLS], int row, int col)
{
 int count = EASY;
 while (count)
 {
 int x = rand() % 9 + 1;//1-9
 int y = rand() % 9 + 1;//1-9
 if (board[x][y] == '0')
 {
  board[x][y] = '1';
  count--;
 }
 }
}

//查坐标四周雷的个数
int GetMineCount(char mine[ROWS][COLS], int x, int y)
{
 //方法1:
 /*int i = 0;
 int j = 0;
 int count = 0;
 for (i = x - 1; i <= x + 1; i++)
 {
 for (j = y - 1; j <= y + 1; j++)
 {
  if (mine[i][j] == '1')
  {
  count++;
  }
 }
 }
 return count;*/
 //方法2:
 return mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1] +
 mine[x][y - 1] + mine[x][y + 1] +
 mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] -
 8 * '0';
}

//扫雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
 int num = 0;
 while (num < row*col - EASY)
 {
 int x = 0;
 int y = 0;
 printf("请输入坐标:>");
 scanf("%d%d", &x, &y);
 //判断坐标是否合法
 if (x >= 1 && x <= row&&y >= 1 && y <= col)
 {
  if (mine[x][y] == '0')
  {
  int count = GetMineCount(mine, x, y);
  show[x][y] = count+'0';
  PrintBoard(show, row, col);
  num++;
  }
  else
  {
  printf("很遗憾,您已被炸死!\n");
  PrintBoard(mine, row, col);
  break;
  }
 }
 else
 {
  printf("坐标不合法\n");
 }
 if (num == row*col - EASY)
 {
  printf("排雷成功!\n");
  break;
 }
 }
 
}

test.c

#include"game.h"

void menu()
{
 printf("*****************************\n");
 printf("********* 1. play *********\n");
 printf("********* 0. exit *********\n");
 printf("*****************************\n");
}

//游戏设计部分
void game()
{
 //隐藏 
 char mine[ROWS][COLS] = { 0 };
 //展示
 char show[ROWS][COLS] = { 0 };
 srand((unsigned int)time(NULL));//设置随机数生成起点

 //初始化棋盘
 InitBoard(mine, ROWS, COLS, '0');
 InitBoard(show, ROWS, COLS, '*');

 //PrintBoard(mine, ROW, COL);//无需打印
 PrintBoard(show, ROW, COL);

 //1.放雷
 SetMine(mine, ROW, COL);
 //PrintBoard(mine, ROW, COL);//test

 //2.扫雷
 FindMine(mine, show, ROW, COL);

}

int main()
{
 int input = 0;
 do
 {
 menu();
 printf("请输入:>");
 scanf("%d", &input);
 switch (input)
 {
 case 1:
  game();
  break;
 case 0:
  printf("退出游戏\n");
  break;
 default:
  printf("输入错误,请重新输入!\n");
  break;
 }
 } while (input);
 return 0;
}

输出结果:

更多有趣的经典小游戏实现专题,分享给大家:

C++经典小游戏汇总

python经典小游戏汇总

python俄罗斯方块游戏集合

JavaScript经典游戏 玩不停

java经典小游戏汇总

javascript经典小游戏汇总

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • C++实现折半查找

    C++实现折半查找

    这篇文章主要为大家详细介绍了C++实现折半查找,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • C++中对象与类的详解及其作用介绍

    C++中对象与类的详解及其作用介绍

    这篇文章主要介绍了C++中对象与类的详解及其作用介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • 探讨C语言中关键字volatile的含义

    探讨C语言中关键字volatile的含义

    本篇文章是对C语言中关键字volatile的含义进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 关于Qt C++中connect的几种写法代码示例

    关于Qt C++中connect的几种写法代码示例

    这篇文章介绍了Qt中connect函数的不同编写方式,包括传统的槽函数写法、使用函数指针的写法、Lambda表达式以及使用QOverload选择重载信号的写法,每种写法都有其特点和适用场景,程序员应根据具体需求选择最合适的方式,需要的朋友可以参考下
    2024-11-11
  • 关于UDP服务器客户端编程流程介绍

    关于UDP服务器客户端编程流程介绍

    大家好,本篇文章主要讲的是关于UDP服务器客户端编程流程介绍,感兴趣的同学赶快来看看吧,对你有帮助的话记得收藏
    2021-12-12
  • C/C++实现7bit与8bit编码互相转换

    C/C++实现7bit与8bit编码互相转换

    这篇文章主要为大家详细介绍了如何使用C/C++实现7bit与8bit编码互相转换功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-10-10
  • vscode C++开发环境配置步骤详解(教你如何用vscode编写写C++)

    vscode C++开发环境配置步骤详解(教你如何用vscode编写写C++)

    这篇文章主要介绍了vscode C++开发环境配置详细教程(教你如何用vscode编写写C++),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • C++实现查壳程序代码实例

    C++实现查壳程序代码实例

    这篇文章主要介绍了C++实现查壳程序代码实例,有比较详细的注释,包含了对原理的说明,有一定的参考借鉴价值,需要的朋友可以参考下
    2014-10-10
  • 用C++实现一个链式栈的实例代码

    用C++实现一个链式栈的实例代码

    本篇文章是对使用C++实现一个链式栈的代码进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C语言冷知识之预处理字符串操作符详解

    C语言冷知识之预处理字符串操作符详解

    当年学习C语言的第一门课就提到过标记(Token)的概念,不过,相信在多年之后你再次听到这个术语时会一脸懵逼,比如我。因此特地翻了翻资料,整理下来这些笔记,希望对大家有所帮助
    2022-11-11

最新评论