博主为在校大学生,因为想写博客记录代码成神之路,但是现在假期在家打CS腾不出手,先放上草稿版
数组和函数实现:扫雷游戏
控制台程序
分为三个文件,
Text.c游戏测试 逻辑
Game.c逻辑实现
Game.h
包含头文件后可以直接使用宏常量
思路:不管写什么大的程序都从菜单先写起,两种情况继续玩或者退出
防止数组越界,可以直接扩大一圈
可以设置两个数组,一个存储信息,一个用来展示
数组可以用宏常量来定义
Game,c里面放函数主体
我们在实践的过程中慢慢去完善我们的函数
.h放函数声明,.c放函数实现
布置雷可以用srand函数,出横纵坐标的函数即可想布置几个就自己定义宏常量
如果显示无法写入exe文件,只需要关闭运行框即可
可以先减去字符0再加起来即可
菜单——思索展示和信息数组----初始化函数---打印棋盘----布置雷--- 排查雷
完善程序和函数
大范围排雷一次性
显示时间
可标记雷
代码书写部分及思路:
1.菜单函数List单纯打印
2.主要逻辑部分text函数
3.从text函数开始往上数为顺序
作者创建了三个文件,分别是一个头文件game.h和game.c,text.c
game.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
#define rows 11
#define cols 11
#define row rows - 2
#define col cols - 2
#define COUNT 10
void List()
{
printf("****************\n");
printf("****1.open ****\n");
printf("****0.exit ****\n");
printf("****************\n");
}
void SetArray(char array[rows][cols], char ch, int a, int b)//数组初始化
{
int i = 0;
int j = 0;
for (i = 0; i < a; i++)
{
for (j = 0; j < b; j++)
{
array[i][j] = ch;
}
}
}
void ShowArray(char array[rows][cols], int r, int c)//打印数组
{
int i = 0;
int j = 0;
for (i = 0; i <= row; i++)
{
printf("%d ", i);
}
printf("\n");
for (i = 1; i <= r; i++)
{
printf("%d ", i);
for (j = 1; j <= c; j++)
{
printf("%c ", array[i][j]);
}
printf("\n");
}
}
void Setmine(char mine[rows][cols], int ROW, int COL)//设置雷
{
int count = COUNT;
while (count)
{
int x = rand() % ROW + 1;
int y = rand() % COL + 1;
if (mine[x][y] = '0')
{
mine[x][y] = '1';
/*printf("x = %d,y = %d\n", x, y);*/
}
count--;
}
}
int Clmine(char mine[rows][cols], int x, int y)//获得雷的个数
{
int i = 0;
int j = 0;
int minenum = 0;
for (i = x - 1; i <= x + 1; i++)
{
for (j = y - 1; j <= y + 1; j++)
{
if (mine[x][y] == '1')
minenum++;
}
}
return minenum;
}
void Getmine(char mine[rows][cols], char show[rows][cols], int ROW, int COL)//排雷
{
while (1)
{
int x = 0;
int y = 0;
int cc = 0;
printf("请输入想排查的雷的坐标:\n");
scanf("%d %d", &x, &y);
if (x > 0 && x <= ROW && y > 0 && y <= COL)
{
if (mine[x][y] == '0')
{
cc = Clmine(mine, x, y);
show[x][y] = '0' + cc;
if (show[x][y] == '0')
{
}
ShowArray(show, ROW, COL);
}
else
{
printf("踩到雷了,游戏结束\n");
ShowArray(mine, row, col);
break;
}
}
else
{
printf("输入错误,请重新输入\n");
}
}
}
void Game()//游戏主体
{
int i = 0;
int x = 0;
int y = 0;
char mine[rows][cols] = { 0 };
char show[rows][cols] = { 0 };
SetArray(mine, '0', rows, cols);
SetArray(show, '*', rows, cols);
Setmine(mine, row, col);
ShowArray(mine ,row, col);
ShowArray(show, row, col);
Getmine(mine, show, row, col);
}
void Text()
{
int input = 0;
do
{
List();
printf("Please input you choice:\n");
scanf("%d", &input);
switch (input)
{
case 1:
{
printf("扫雷游戏开始\n");
Game();
}
break;
case 0:
{
printf("Game over\n");
}
break;
default:
printf("Input error,please enter again\n");
break;
}
} while (input);
}
game.h
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void Text();
text.c
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include "game.h"
int main()
{
srand((unsigned int)time(NULL));
Text();
return 0;
}
295

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



