当前位置:首页 » 《随便一记》 » 正文

C语言——扫雷

10 人参与  2024年02月21日 12:36  分类 : 《随便一记》  评论

点击全文阅读


目录

原理:

代码:


原理:

如图所示:

代码:

game.h

#pragma once/*该文件写游戏需要的数据类型和函数声明等*/#include<stdio.h>#include<stdlib.h>#include<time.h>#define EASY_COUNT 10//真正能用到的是9*9的表格#define ROW 9//表示9行#define COL 9//表示9列//为了防止越界,设置11*11#define ROWS ROW+2//表示11行#define COLS COL+2//表示11列//初始化棋盘void InitBoard(char board[ROWS][COLS], int row, int cols, char set);//打印棋盘void DisplayBoard(char board[ROWS][COLS], int row, int col);//布置雷void SetMine(char board[ROWS][COLS], int row, int col);//排查雷void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

game.c

#define _CRT_SECURE_NO_WARNINGS 1#include"game.h"void InitBoard(char board[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++) {board[i][j] = set;}} }void DisplayBoard(char board[ROWS][COLS], int row, int col) {int i = 0;printf("----扫雷游戏----\n");for (i = 0; i <= col; i++) {printf("%d ", i);}printf("\n");for (i = 1; i < row; i++) {printf("%d ", i);int j = 0;for (j = 1; j <= col; j++) {printf("%c ", board[i][j]);}printf("\n");}}void SetMine(char board[ROWS][COLS], int row, int col) {//布置十个雷//生成随机的坐标,布置雷int count = EASY_COUNT;while (count) {int x = rand() % row + 1;int y = rand() % col + 1;if (board[x][y] == '0') {board[x][y] = '1';count--;}}}int GetMineCount(char mine[ROWS][COLS], int x, int y) {return (mine[x - 1][y] + mine[x - 1][y - 1] + mine[x][y - 1] + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] + mine[x][y + 1] + mine[x - 1][y + 1] - 8 * '0');}void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) {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 <= row && y >= 1 && y <= col) {if (mine[x][y] == '1') {printf("很遗憾,你被炸死了\n");DisplayBoard(mine, ROW, COL);break;}else {//该位置不是雷,统计这个mine(x,y)坐标周围有几个雷int count = GetMineCount(mine, x, y);show[x][y] = count + '0';DisplayBoard(show, ROW, COL);win++;}}else{printf("坐标非法,重新输入\n");}}if (win == row * col - EASY_COUNT) {printf("恭喜你,排雷成功\n");DisplayBoard(mine, ROW, COL);}}

test.c

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>#include"game.h"void menu() {printf("*****菜单:请选择:*****\n");printf("**********************\n");printf("********1.play********\n");printf("********0.exit********\n");printf("**********************\n");printf("**********************\n");}void game() {char mine[ROW][COL];//存放布置好的雷char show[ROWS][COLS];//存放排查出的雷的信息//初始化棋盘/*1、mine数组最开始是全‘0’——透视* 2、show数组最开始全是‘*’——游戏*/InitBoard(mine, ROWS, COLS, '0');InitBoard(show, ROWS, COLS, '*');//未排查的用*表示//打印棋盘//DisplayBoard(mine, ROW, COL);DisplayBoard(show, ROW, COL);//1、布置雷SetMine(mine, ROW, COL);//DisplayBoard(show, ROW, COL);//2、排查雷FindMine(mine, show, ROW, COL);}int main() {int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择:>\n");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏成功\n");break;default:printf("选择错误,请重新选择\n");break;}} while (input);return 0;}


点击全文阅读


本文链接:http://zhangshiyu.com/post/69302.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1