C语言实现扫雷游戏简易版

 更新时间:2020年11月29日 17:07:56   作者:看满山暴雨打落花一定很热闹  
这篇文章主要为大家详细介绍了C语言实现扫雷游戏简易版,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

game.h

#pragma once
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <windows.h>

#define ROW 12
#define COL 12
#define NUMS 20

#pragma warning(disable:4996)

void Menu();
void Game();

game.c

#include "game.h"

void Menu()
{
 printf("###########################\n");
 printf("## 1.Play 2. Exit ##\n");
 printf("###########################\n");
 printf("请输入# ");
}
void SetMines(char board[][COL], int row, int col)
{
 int num = NUMS;
 while (num) {
 int x = rand() % 10 + 1;
 int y = rand() % 10 + 1;
 if (board[x][y] == '0') {
 board[x][y] = '1';
 num--;
 }
 }
}
int GetNums(char board[][COL], int row, int col, int x, int y)
{
 return board[x - 1][y - 1] + board[x - 1][y] + \
 board[x - 1][y + 1] + board[x][y + 1] + \
 board[x + 1][y + 1] + board[x + 1][y] + \
 board[x + 1][y - 1] + board[x][y - 1] - 8 * '0';
}

void ShowBoard(char board[][COL], int row, int col)
{
 printf(" ");
 for (int i = 1; i < col - 1; i++) {
 printf(" %2d ", i);
 }
 printf("\n");
 printf("-------------------------------------------\n");
 for (int i = 1; i < row - 1; i++) {
 printf("%2d|", i);
 for (int j = 1; j < col - 1; j++) {
 printf(" %c |", board[i][j]);
 }
 printf("\n");
 printf("-------------------------------------------\n");
 }
}

void Game()
{
 system("cls");
 srand((unsigned long)time(NULL));
 char show_board[ROW][COL];
 char mine_board[ROW][COL];

 memset(show_board, '*', sizeof(show_board));
 memset(mine_board, '0', sizeof(mine_board));

 SetMines(mine_board, ROW, COL);
 int count = (ROW - 2) * (COL - 2) - NUMS;
 int x = 0;
 int y = 0;
 do {
 ShowBoard(show_board, ROW, COL);
 printf("请输入坐标# ");
 scanf("%d %d", &x, &y);
 if (x < 1 || x > ROW - 2 || y < 1 || y > COL - 2) {
 printf("输入位置越界,请重新输入!\n");
 continue;
 }
 if (show_board[x][y] != '*') {
 printf("该位置已经被排除!\n");
 continue;
 }
 if (mine_board[x][y] == '1') {
 break;
 }
 int num = GetNums(mine_board, ROW, COL, x, y);
 show_board[x][y] = num + '0';
 count--;
 system("cls");
 } while (count > 0);
 if (count > 0) {
 printf("你被炸死了!\n");
 ShowBoard(mine_board, ROW, COL);
 }
 else {
 printf("恭喜,你通过游戏!\n");
 }
}

main.c

#include "game.h"

void Menu()
{
 printf("###########################\n");
 printf("## 1.Play 2. Exit ##\n");
 printf("###########################\n");
 printf("请输入# ");
}
void SetMines(char board[][COL], int row, int col)
{
 int num = NUMS;
 while (num) {
 int x = rand() % 10 + 1;
 int y = rand() % 10 + 1;
 if (board[x][y] == '0') {
 board[x][y] = '1';
 num--;
 }
 }
}
int GetNums(char board[][COL], int row, int col, int x, int y)
{
 return board[x - 1][y - 1] + board[x - 1][y] + \
 board[x - 1][y + 1] + board[x][y + 1] + \
 board[x + 1][y + 1] + board[x + 1][y] + \
 board[x + 1][y - 1] + board[x][y - 1] - 8 * '0';
}

void ShowBoard(char board[][COL], int row, int col)
{
 printf(" ");
 for (int i = 1; i < col - 1; i++) {
 printf(" %2d ", i);
 }
 printf("\n");
 printf("-------------------------------------------\n");
 for (int i = 1; i < row - 1; i++) {
 printf("%2d|", i);
 for (int j = 1; j < col - 1; j++) {
 printf(" %c |", board[i][j]);
 }
 printf("\n");
 printf("-------------------------------------------\n");
 }
}

void Game()
{
 system("cls");
 srand((unsigned long)time(NULL));
 char show_board[ROW][COL];
 char mine_board[ROW][COL];

 memset(show_board, '*', sizeof(show_board));
 memset(mine_board, '0', sizeof(mine_board));

 SetMines(mine_board, ROW, COL);
 int count = (ROW - 2) * (COL - 2) - NUMS;
 int x = 0;
 int y = 0;
 do {
 ShowBoard(show_board, ROW, COL);
 printf("请输入坐标# ");
 scanf("%d %d", &x, &y);
 if (x < 1 || x > ROW - 2 || y < 1 || y > COL - 2) {
 printf("输入位置越界,请重新输入!\n");
 continue;
 }
 if (show_board[x][y] != '*') {
 printf("该位置已经被排除!\n");
 continue;
 }
 if (mine_board[x][y] == '1') {
 break;
 }
 int num = GetNums(mine_board, ROW, COL, x, y);
 show_board[x][y] = num + '0';
 count--;
 system("cls");
 } while (count > 0);
 if (count > 0) {
 printf("你被炸死了!\n");
 ShowBoard(mine_board, ROW, COL);
 }
 else {
 printf("恭喜,你通过游戏!\n");
 }
}

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

C++经典小游戏汇总

python经典小游戏汇总

python俄罗斯方块游戏集合

JavaScript经典游戏 玩不停

java经典小游戏汇总

javascript经典小游戏汇总

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

相关文章

  • C++ 排序插入排序实例详解

    C++ 排序插入排序实例详解

    这篇文章主要介绍了C++ 排序插入排序实例详解的相关资料,需要的朋友可以参考下
    2017-06-06
  • C语言函数基础教程分类自定义参数及调用示例详解

    C语言函数基础教程分类自定义参数及调用示例详解

    这篇文章主要为大家介绍了C语言函数的基础教程,主要包含C语言函数的分类,C语言函数自定义,C语言函数的参数及C语言函数的调用示例详解,有需要的朋友可以借鉴参考下
    2021-11-11
  • C语言平衡二叉树真题练习

    C语言平衡二叉树真题练习

    平衡二叉树又被称为AVL树(有别于AVL算法),且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。本文将详解介绍一下平衡二叉树的原理与实现,需要的可以参考一下
    2022-04-04
  • C语言数据结构线性表教程示例详解

    C语言数据结构线性表教程示例详解

    这篇文章主要为大家介绍了C语言数据结构线性表的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-02-02
  • C语言中结构体、联合体的成员内存对齐情况

    C语言中结构体、联合体的成员内存对齐情况

    这篇文章主要给大家介绍了关于C语言中结构体、联合体的成员内存对齐情况的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • 基于C++中setiosflags()的用法详解

    基于C++中setiosflags()的用法详解

    下面小编就为大家带来一篇基于C++中setiosflags()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 模拟鼠标事件的实现思路及代码

    模拟鼠标事件的实现思路及代码

    这篇文章主要介绍了模拟鼠标事件的实现思路及代码,有需要的朋友可以参考一下
    2013-12-12
  • 基于MFC实现单个文档的文件读写

    基于MFC实现单个文档的文件读写

    这篇文章主要为大家详细介绍了如何基于MFC实现单个文档的文件读写功能,文中的示例代码讲解详细,对我们学习有一定帮助,感兴趣的可以了解一下
    2022-07-07
  • 详解C++中常用的四种类型转换方式

    详解C++中常用的四种类型转换方式

    这篇文章主要为大家详细介绍了C++中常用的四种类型转换方式:static_cast<Type>、dynamic_cast<Type>、const_case<Type>和reinterpret_cast,感兴趣的可以了解一下
    2022-08-08
  • C语言求2的n次方多种方法总结

    C语言求2的n次方多种方法总结

    这篇文章主要给大家介绍了关于C语言求2的n次方多种方法的相关资料,求2的N次幂是一个常用的功能,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-10-10

最新评论