c语言排雷游戏(基础版9*9)

先看xue_c1.内容,在对着自定义函数名去test.c查找具体函数,最后看game.h

//game.h(用于存放自定义函数声明)

#pragma once

#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_COUNT 10//简单版本为10个雷

//函数声明

//棋盘初始化

void InitBoard(char boardROWSCOLS, int r, int c,char set);

//菜单

void menu();

//布置雷

void SetMine(char mineROWSCOLS, int r, int c);

//打印棋盘

void DisplayBoard(char boardROWSCOLS,int r,int c);

//排查雷

void FindMine(char mineROWSCOLS, char showROWSCOLS, int r, int c);

//排查出该坐标周围雷的个数

int GetMine(char mineROWSCOLS, int x, int y);

#define _CRT_SECURE_NO_WARNINGS 1

#include"game.h"

//test.c(自定义函数具体内容)

//菜单

void menu()

{

printf("********************\n");

printf("*****1.开始游戏*****\n");

printf("*****0.退出游戏*****\n");

printf("********************\n");

}

//棋盘初始化

void InitBoard(char boardROWSCOLS, int r, int c,char set)

{

int i = 0;

for (i = 0; i < r; i++)

{

int j = 0;

for (j = 0; j < c; j++)

{

boardij = set;

}

}

}

//随机布置10个雷

void SetMine(char mineROWSCOLS,int r,int c)

{

int cound = EASY_COUNT;

while (cound)//cound设置为10,则if语句必须成立10次,才能输出0,结束while循环(表示该循环至少循环10次以上)

{

int x = rand() % r + 1;//每调用一次rand(),就会重新生成一个随机数

int y = rand() % c + 1;

if (minexy == '0')

{

minexy = '1';

cound--;

}

}

}

//打印棋盘

void DisplayBoard(char boardROWSCOLS, int r, int c)

{

printf("----------扫雷----------\n");

int i = 0;

for (i = 0; i <= r; i++)

{

printf("%d ", i);

}//目的是打印一行0~9的一个坐标显示,方便玩

printf("\n");

for (i = 1; i <= r; i++)

{

printf("%d ", i);//打印棋盘的第一列打印1~9的数字

int j = 0;

for (j = 1; j <= c; j++)

{

printf("%c ", boardij);//这里要为%c,因为打印的是字符类型

}

printf("\n");

}

}

//统计一下该坐标周围有几个雷

static int GetMine(char mineROWSCOLS, int x, int y)//static修饰全局变量,让该函数只能在本文件使用

{

/*return minexy + 1 + minexy - 1 + minex - 1y + minex - 1y - 1 +

minex - 1y + 1 + minex + 1y + minex + 1y - 1 + minex + 1y + 1 - 8*'0';*///这种方法是返回一个整型

//优化一下

int i = 0;

int j = 0;

int c = 0;

for (i = -1; i <= 1; i++)

{

for (j = -1; j <= 1; j++)

{

if (minex + iy + j == '1')

c++;

}

}

return c;

}

//排查雷

void FindMine(char mineROWSCOLS, char showROWSCOLS, int r, int c)

{

int x = 0;

int y = 0;

int win = 0;

while (win < (ROW*COL - EASY_COUNT))

{

printf("请输入排查雷的坐标:");

scanf("%d %d", &x, &y);

if (x >= 1 && x <= r && y >= 1 && y <= c)

{

//判断是否为雷

if (minexy == '0')

{

if (showxy == '*')

{

//统计一下该坐标周围有几个雷

int c = GetMine(mine, x, y);

showxy = c + '0';//输入整型c;

DisplayBoard(show, ROW, COL);

win++;

}

else

printf("该坐标已被排查,请重新输入:");

}

else if (minexy == '1')

{

printf("该坐标为雷,你被炸嘎了\n");

DisplayBoard(mine, ROW, COL);//打印出布置好雷的坐标

break;

}

}

else

printf("输入坐标错误,请重新输入\n");

}

if (win == (ROW * COL - EASY_COUNT))

{

printf("恭喜你,排雷成功,你就是排雷天才\n");

DisplayBoard(mine, ROW, COL);

}

}

//xue_c1.c(整个游戏测试运行的总流程)

#define _CRT_SECURE_NO_WARNINGS 1

#include"game.h"

//数组和函数实践;扫雷游戏

void game()

{

//完成扫雷游戏

char mineROWSCOLS = { 0 };//定义,存放好布置雷的信息

char showROWSCOLS = { 0 };//定义,存放排查出雷的信息

//棋盘初始化

//mine数组初始化全为0

//show数组初始化全为*

InitBoard(mine, ROWS, COLS,'0');//这里一定要打双引号,因为输出的是字符类型,不是整型,不然打印结果为48

InitBoard(show, ROWS, COLS,'*');

//布置10个雷

SetMine(mine,ROW,COL);

//打印棋盘

//DisplayBoard(mine, ROW, COL);//布置雷的一个演示

DisplayBoard(show, ROW, COL);

//排查雷

FindMine(mine, show, ROW, COL);

//统计一下该坐标周围有几个雷

//GetMine(mine, ROW, COL);

}

int main()

{

int i = 0;

srand((unsigned int)time(NULL));//生成一个随机数为rand(),头文件有stdlib.h,time.h

do

{

menu();//菜单

printf("请输入:");

scanf("%d", &i);

switch (i)

{

case 1:

{

game();//进入玩游戏

break;

}

case 0:

{

printf("退出游戏");

break;

}

default:

{

printf("输入错误,请重新输入:\n");

break;

}

}

} while (i);

return 0;

}

相关推荐
caimouse2 小时前
Reactos 第 4 章 对象管理 — 4.3 句柄和句柄表(Handle & Handle Table)
c语言·windows·架构
sheeta19982 小时前
LeetCode 每日一题笔记 日期:2026.06.06 题目:2196. 根据描述创建二叉树
笔记·算法·leetcode
小欣加油2 小时前
leetcode994 腐烂的橘子
数据结构·c++·算法·leetcode·bfs
Selina K2 小时前
C中日历时间转换
c语言·开发语言
QuZero3 小时前
Guava Cache Deep Dive
java·后端·算法·guava
随意起个昵称3 小时前
线性dp-LIS题目4(A Twisty Movement)
算法·动态规划
Felven3 小时前
B. Fair Numbers
数据结构·算法
人道领域3 小时前
【LeetCode刷题日记】93.复原IP地址
java·开发语言·算法·leetcode
caimouse3 小时前
Reactos 第 3 章 内存管理 — 【中篇】Hyperspace、系统空间、API 与异常
c语言·开发语言·windows·架构