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;

}

相关推荐
可编程芯片开发15 小时前
基于MATLAB的PEF湍流风场生成器模拟与仿真
算法
罗西的思考15 小时前
【Agentic RL / 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (9)--- Reward Judging
人工智能·算法·机器学习
Mr.HeBoYan17 小时前
一次持续三天才出现的丢包故障——深入解析 DPDK Memory Ordering、rte_ring 与 CPU Memory Barrier (下)
linux·网络·算法·架构·dpdk
YakSue17 小时前
游戏项目中的程序化生成(PCG):五层工作的耦合问题
游戏
wabs66617 小时前
关于图论【深度优先搜索的理论基础】
算法·深度优先·图论
先吃饱再说18 小时前
LeetCode 101. 对称二叉树
算法
是Dream呀19 小时前
人眼看不出的伪造,AI如何识别?实测合合信息跨模态鉴伪与去反光技术
算法
Discipline~Hai19 小时前
ARM01-ARM体系架构
linux·c语言·arm开发·架构
QN1幻化引擎19 小时前
SFA 信号场注意力:用8KB参数换248x KV Cache压缩,边缘设备也能跑长序列
人工智能·算法·gitee·gitlab
段一凡-华北理工大学19 小时前
向量数据库实战:选型、调优与落地~系列文章03:向量相似度算法全解:余弦、欧氏、内积,到底该用哪个?
大数据·数据库·人工智能·算法·机器学习·向量相似度·高炉炼铁