用已经学的知识 实现一个 简易的扫雷小游戏!
思路
1,打印一个简易游戏菜单
2,创建扫雷棋盘
3,布雷
4,玩家输入坐标进行坐标排雷,并检测附近坐标
如果是雷 ,游戏结束
不是雷 反馈出附近8个坐标的雷数
5,判定玩家输赢
头文件 .h
#pragma once
#include<stdio.h>
#include<stdlib.h>// rand 与 srand
#include<time.h>// 时间戳
// 展示数组 行和列
#define ROW 9
#define COL 9
// 布雷数组 行和列
#define ROWS ROW+2
#define COLS COL+2
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
// 游戏简易菜单
void menu();
// 初始化 展示数组
void init_arr(char arr[][COLS],int r,int c,char ch);
// 打印 排雷数组
void print_arr(char arr[][COLS],int r,int c);
// 布雷
void Layout_mine(char arr[][COLS],int r,int c);
// 排雷
void Check_mine(char arr1[][COLS], char arr2[][COLS],int r,int c);
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
具体函数定义的实现 .c
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
// 游戏简易菜单
void menu()
{
printf("************************************\n");
printf("********* ---- 扫雷小游戏 ---- *****\n");
printf("*********** game: 1 *******\n");
printf("*********** exit: 0 *******\n");
printf("***********************************\n");
}
// 初始化 展示数组
void init_arr(char arr[][COLS],int r,int c,char ch)
{
int i = 0;
for (; i < r; i++)
{
int j = 0;
for (; j < c; j++)
{
arr[i][j] = ch;
}
}
}
// 打印
void print_arr(char arr[][COLS],int r,int c)
{
int i = 0;
// 打印对应的 行号
printf(" 0 ");
for (int i = 1; i <= r; i++)
{
printf("%d ",i);
}
printf("\n");
for (i=1; i <= r; i++)
{
printf("%2d: ",i);
int j = 1;
for (; j <= c; j++)
{
printf("%c ", arr[i][j]);
}
printf("\n");
}
printf("\n");
}
// 布雷
// 在布雷数组中 生成 1-10的下标位置
void Layout_mine(char arr[][COLS],int r,int c)
{
// 玩家自己设置 雷的数量
printf("请输入想要设置 雷的数量,最大雷数为%d~\n", r * c);
int a = 0;
again:
scanf("%d", &a);
// 对 行和列的 最大布雷数做出判断,最小为 1个雷,最大为 行×列,不然会陷入死循环
if (a<1 || a>r * c)
{
printf("\n *请合理设置 雷数~\n");
goto again;
}
printf("生成中.......\n");
while (a)
{
// 生成 0-9的数字 +1 得到 1-10 的数字
//得到 行下标 x , 列下标 y
int x = rand() % r + 1; //获取随机数
int y = rand() % c + 1;
// 将 下标插入到 布雷数组中,将其改为 字符 '1'
// 注意 ! 有概率 坐标位置相同
if (arr[x][y] == '0')
{
arr[x][y] = '1';
a--;// 布雷成功 --,失败则 不操作
}
}
printf("加载完成!\n");
}
// 排雷
void Check_mine(char arr1[][COLS], char arr2[][COLS],int r,int c)
{
// 输入坐标 进行 排雷
int x = 0;// 行
int y = 0;// 列
while (1)
{
printf("********* 扫雷 **********\n");
print_arr(arr1, r, c);
// 输入
printf("请输入,需要排查的坐标:>");
again:
scanf("%d %d", &x, &y);
//system("cls");
// 检查坐标合法性
if (( x<1 || x>r ) || ( y<1 || y>c ))
{
// 坐标 不合法 ,提示
printf("\n坐标不合法,请重新输入:");
// goto 实现直接跳转
goto again;
}
else if (arr1[x][y] != '*')
{
printf("坐标无效!请重新输入:>");
goto again;
}
// 坐标合法 时 ,检查坐标位置是否是 雷,雷则游戏结束,不是雷则将 周围 8个坐标进行排查 有几个雷
else
{
// 判断
if (arr2[x][y] == '1')
{
arr1[x][y] = '1';
print_arr(arr2,c,r);
printf("很不幸!你被炸死了~\n\n");
return;
}
else
{ // 续行符 \ ,后面不可以跟任何东西,包括 注释,多打一个空格键都不可以
/* 上 */int a = (arr2[x - 1][y] - '0') + (arr2[x - 1][y - 1] - '0') + (arr2[x - 1][y + 1] - '0')\
/* 中*/ + (arr2[x][y - 1] - '0') + (arr2[x][y + 1] - '0')\
/* 下*/ + (arr2[x + 1][y] - '0') + (arr2[x + 1][y - 1] - '0') + (arr2[x + 1][y + 1] - '0');
arr1[x][y] = a + '0';
}
}
}
}
---------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------
main函数调用 .c 游戏开始
void game()
//{
// // 排雷 数组
// char show[ROWS][COLS] = { 0 };
// // 布雷 数组
// char mine[ROWS][COLS] = { 0 };
//
// // 初始化 排雷
// init_arr(show,ROWS,COLS,'*');
// // 初始化 布雷
// init_arr(mine,ROWS,COLS,'0');
//
// // 打印 show
// //print_arr(show,ROW,COL);
//
// // 布雷
// Layout_mine(mine,ROW,COL);
// // 打印 布雷后的数组
// //print_arr(mine,ROW,COL);
//
// // 开始 排雷
// Check_mine(show, mine,ROW,COL);
//
//}
//int main()
//{
//
// // 产生随机数
// srand((unsigned int)time(NULL));
//
// int n = 0;
//
// do {
// menu();
// printf("**请输入~~:> ");
// scanf("%d", &n);
// switch (n)
// {
// case 1:
// game();
// break;// 执行完跳出
// case 0:
// printf("退出游戏!\n");
// break;
//
// default :// 输入错误 走这里提示
// printf("输入错误!请重新输入!\n");
// break;
// }
//
// } while (n);
//
// return 0;
//}
int main()
{
int a = 0;
int b = 0;
scanf("%x %o", &a, &b);
printf("%x %o %d\n", a, b,a+b);
return 0;
}
代码敲完最重要的就是 运行出bug后 如何调试!
下一章 简述VS的调试如何使用。。。。。。。