1.思路:创建两个二维数组,一个用来显示最终结果,一个用来显示排查结果,布置炸d时可用
srand函数、rand函数、time函数配合使用,生成随机数,可通过%的方法控制其生成范围
(srand函数、rand函数、time函数三子棋章节略有介绍)
2.在计算排查炸d数时,为了防止计算越界可额外扩大其访问空间一圈,并将其初始值赋值为字符‘0’,使后面便于计算排查炸d
3.实现扫雷小游戏
(1)头文件lin.h(声明函数)
#pragma once #include#include #include //行 #define ROW 9 //列 #define COL 9 //防止计算越界 #define ROWS ROW+2 //防止计算越界 #define COLS ROW+2 //设置炸d个数 #define NUMBER 10 //声明控制间距 void distance(); //声明初始化 void My_lin(char arr[ROWS][COLS], int rows, int cols); //声明打印 void My_print(char str[ROWS][COLS], int row, int col); //声明布置炸d void My_qin(char num[ROWS][COLS], int row, int col); //声明排查结果 void My_yan(char arr[ROWS][COLS], char str[ROWS][COLS], int row, int col);
(2)源文件lin.c(实现函数)
#include"lin.h" //实现控制间距 void distance() { printf("nnn"); } //实现初始化 void My_lin(char num[ROWS][COLS], int rows, int cols,char set) { int i = 0; for (i = 0; i < rows; i++) { int j = 0; for (j = 0; j < cols; j++) { num[i][j] = set; } } } //实现打印棋盘 void My_print(char num[ROWS][COLS], int row, int col) { int i = 0; for (i = 0; i <= col; i++) { printf(" %d ", i); } printf("nn"); for (i = 1; i <= row; i++) { printf(" %d ", i); int j = 0; for (j = 1; j <= col; j++) { printf(" %c ",num[i][j]); } printf("nn"); } } //实现布置炸弹 void My_qin(char num[ROWS][COLS], int row, int col) { int x = 0; int y = 0; int count = NUMBER; while (count) { //设置生成随机数的取值范围[1,row] x = rand() % row+1; //设置生成随机数的取值范围[1,col] y = rand() % col + 1; if ('0' == num[x][y]) { num[x][y] = '1'; count--; } } } //实现排查炸弹数 int My_li(char arr[ROWS][COLS], int x, int y) { return arr[x - 1][y - 1] + arr[x - 1][y] + arr[x - 1][y + 1] + arr[x - 1][y - 1] + arr[x][y + 1] + arr[x + 1][y - 1] + arr[x + 1][y] + arr[x + 1][y + 1] - 8 * '0'; } //实现排查结果 void My_yan(char arr[ROWS][COLS], char str[ROWS][COLS], int row, int col) { int x = 0; int y = 0; int le = 0; while(le= 1 && x <= row && y >= 1 && y <= col) { //排查出炸弹 if ('1' == arr[x][y]) { printf("很遗憾,你被炸死了n"); break; } //未排查出炸弹 else { /排查数 int count=My_li(arr, x, y); str[x][y] = count + '0'; //打印排查后的棋盘 My_print(str, ROW, COL); le++; } } else { printf("坐标无效,请重新输入n"); } } if (le == row * col - NUMBER) { printf("恭喜你,获胜啦n"); } }
(3)源文件test.c(主函数)
#include "lin.h" void menu() { //控制间距 distance(); printf(" 1.开始游戏n"); printf(" 2.退出游戏n"); //控制间距 distance(); } void lin() { char arr[ROWS][COLS] = { 0 }; char str[ROWS][COLS] = { 0 }; //初始化为0 My_lin(arr, ROWS, COLS,'0'); //初始化为* My_lin(str, ROWS, COLS,'*'); //布置炸d My_qin(arr,ROW,COL); //打印棋盘 My_print(str, ROW, COL); //控制间距 distance(); //排查结果 My_yan(arr, str, ROW, COL); //控制间距 distance(); //打印棋盘 My_print(arr, ROW, COL); //控制间距 distance(); } void test() { int input = 0; srand((unsigned int)time(NULL)); do { //打印菜单 menu(); printf("请输入选项:"); scanf("%d", &input); //控制间距 distance(); switch (input) { case 1: lin(); break; case 2: input = 0; printf("退出游戏n"); break; default: printf("选择无效,请重新选择n"); } }while (input); } int main() { test(); return 0; }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)