前言
简单实现一个9*9的扫雷游戏
可以先看全部代码能够更好理解一点。
一、每个模块讲解
首先打印游戏菜单
下面代码是实现了游戏进入界面的菜单
void maaa()
{
printf("*********************");
printf("*****1. 开始*******");
printf("*********************");
printf("*****0. 退出********");
printf("*********************");
}
int main()
{
int a = 0;
do
{
maaa();
scanf("%d", &a);
switch (a)
{
case 1:
printf("开始游戏");
game();
case 0:
printf("退出游戏");
default:
printf("输入错误,重新输入");
}
} while (a);
return 0;
}
初始化
因为是一个99的棋盘,所以要计算一圈来确定雷的数量,就应该初始哈一个1111的棋盘
void game()
{
char buzhi[ROWS][COLS] = { 0 };//0
char paicha[ROWS][COLS] = { 0 };//*
chushi(buzhi,ROWS,COLS,'0');
chushi(paicha, ROWS, COLS, '*');
}
void chushi(char chushi[ROWS][COLS], int x, int y, char c)
{
for (int i = 0; i < ROWS; i++)
{
for (int j = 0; j < COLS; j++)
{
chushi[i][j] = c;
}
}
}
打印棋盘
初始化之后要打印棋盘,下面是打印函数的代码。
void print(char dayin[ROWS][COLS], int x, int y)
{
for (int z = 0; z <= ROW; z++)
printf("%d ", z);
printf("\n");
for (int i = 1; i <= ROW; i++)
{
printf("%d ", i);
for (int j = 1; j <= COL; j++)
{
printf("%c ", dayin[i][j]);
}
printf("\n");
}
}
布置雷
这一模块应该在不知数组里面设定雷,我设置的是10个。
void bu(char fang[ROWS][COLS], int x, int y)
{
int c = LEI;
while (c)
{
int a = rand() % 9 + 1;
int b = rand() % 9 + 1;
if (fang[a][b] == '0')
{
fang[a][b] = '1';
c--;
}
}
}
排查雷
这一模块主要是在排查函数中对雷进行排查。
int zhouwei(char buzhi[ROWS][COLS],int x, int y)
{
return (buzhi[x - 1][y] + buzhi[x - 1][y - 1] + buzhi[x][y - 1] + buzhi[x + 1][y -
1] + buzhi[x + 1][y] +
buzhi[x + 1][y + 1] + buzhi[x][y + 1] + buzhi[x - 1][y + 1] - 8 * '0');
}
void pai(char buzhi[ROWS][COLS], char paicha[ROWS][COLS], int x, int y)
{
int a = 0;
int b = 0;
int win = 0;
while (win < ROW * COL - LEI)
{
printf("请排查\n");
scanf("%d %d", &a, &b);
if ((a >= 1 && a <= 9) && (b >= 1 && b <= 9))
{
if (buzhi[a][b] == '1')
{
printf("很遗憾你输了\n");
break;
}
else
{
int c = zhouwei(buzhi, a, b);
paicha[a][b] = c + '0';
print(paicha, ROWS, COLS);
}
}
else
{
printf("坐标输入超出范围,重新输入\n");
}
}
}
二、全部代码
1.test.h(头文件)
这个文件主要是放函数的声明的
#pragma once
#include <stdio.h>
#include<stdlib.h>
#include <time.h>
#define ROWS ROW+2
#define COLS COL+2
#define ROW 9
#define COL 9
#define LEI 80
void chushi(char chushi[ROWS][COLS], int x , int y, char c);//初始化
void print(char dayin[ROWS][COLS], int x, int y);//打印
void bu(char fang[ROWS][COLS], int x, int y);//布置雷
void pai(char buzhi[ROWS][COLS], char paicha[ROWS][COLS], int x, int y);//排查
2.test.c
这个文件是放主调函数的文件
代码如下(示例):
#include "test.h"
void maaa()
{
printf("*********************\n");
printf("*****1. 开始*******\n");
printf("*********************\n");
printf("*****0. 退出********\n");
printf("*********************\n");
}
void game()
{
char buzhi[ROWS][COLS] = { 0 };//0
char paicha[ROWS][COLS] = { 0 };//*
chushi(buzhi,ROWS,COLS,'0');
chushi(paicha, ROWS, COLS, '*');//初始化
bu(buzhi, ROWS, COLS);
print(buzhi, ROWS, COLS);
//print(paicha, ROWS, COLS);
pai(buzhi, paicha, ROWS, COLS);
}
int main()
{
srand((unsigned int)time(NULL));
int a = 0;
do
{
maaa();
printf("请选择:\n");
scanf("%d", &a);
switch (a)
{
case 1:
printf("开始游戏\n");
game();
break;
case 0:
printf("退出游戏");
break;
default:
printf("输入错误,重新输入");
break;
}
} while (a);
return 0;
}
aaa.c文件
这个文件是对初始化,打印,布置雷,排查雷函数的定义。
#include "test.h"
void chushi(char chushi[ROWS][COLS], int x, int y, char c)
{
for (int i = 0; i < ROWS; i++)
{
for (int j = 0; j < COLS; j++)
{
chushi[i][j] = c;
}
}
}
void print(char dayin[ROWS][COLS], int x, int y)
{
for (int z = 0; z <= ROW; z++)
printf("%d ", z);
printf("\n");
for (int i = 1; i <= ROW; i++)
{
printf("%d ", i);
for (int j = 1; j <= COL; j++)
{
printf("%c ", dayin[i][j]);
}
printf("\n");
}
}
void bu(char fang[ROWS][COLS], int x, int y)
{
int c = LEI;
while (c)
{
int a = rand() % 9 + 1;
int b = rand() % 9 + 1;
if (fang[a][b] == '0')
{
fang[a][b] = '1';
c--;
}
}
}
int zhouwei(char buzhi[ROWS][COLS],int x, int y)
{
return (buzhi[x - 1][y] + buzhi[x - 1][y - 1] + buzhi[x][y - 1] + buzhi[x + 1][y -
1] + buzhi[x + 1][y] +
buzhi[x + 1][y + 1] + buzhi[x][y + 1] + buzhi[x - 1][y + 1] - 8 * '0');
}
void pai(char buzhi[ROWS][COLS], char paicha[ROWS][COLS], int x, int y)
{
int a = 0;
int b = 0;
int win = 0;
while (win < ROW * COL - LEI)
{
printf("请排查\n");
scanf("%d %d", &a, &b);
if ((a >= 1 && a <= 9) && (b >= 1 && b <= 9))
{
if (buzhi[a][b] == '1')
{
printf("很遗憾你输了\n");
break;
}
else
{
int c = zhouwei(buzhi, a, b);
paicha[a][b] = c + '0';
print(paicha, ROWS, COLS);
}
}
else
{
printf("坐标输入超出范围,重新输入\n");
}
}
}
C语言实现简易扫雷游戏
537

被折叠的 条评论
为什么被折叠?



