扫雷的部分实现
2021-01-19 22:28
801 查看
头文件
#pragma once #define ROW 9 #define COL 9 #define ROWS ROW+2 #define COLS COL+2 #define EASY_COUNT 10 #include <stdio.h> #include <stdlib.h> #include <time.h> void InitBoard(char board[ROWS][COLS], int rows, int cols, char set); void Display(char board[ROWS][COLS], int rows, int cols); void SetMine(char board[ROWS][COLS], int row, int col); void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col);
函数实现
#define _CRT_SECURE_NO_WARNINGS 1 #include "game.h" void InitBoard(char board[ROWS][COLS], int rows, int cols, char set) { int i = 0; int j = 0; for (i = 0; i < rows; i++) { for (j = 0; j < cols; j++) { board[i][j] = set; } } } void Display(char board[ROWS][COLS], int row, int col) { int i = 0; int j = 0; for (i = 0; i < row+1; i++) { for (j = 0; j < col+1; j++) { if (i != 0 && j != 0) { printf("%c ", board[i][j]); } if (i == 0) { printf("%d ", j); } if (j == 0 && i != 0) { printf("%d ", i); } } printf("\n"); } } void SetMine(char board[ROWS][COLS], int row, int col) { int count = EASY_COUNT; int x = 0; int y = 0; while (count) { x = rand() % 9 + 1; y = rand() % 9 + 1; if (board[x][y] == '0') { board[x][y] = '1'; } else continue; count--; } } char get_mine_count(char mine[ROWS][COLS], int x, int y) { return 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] + mine[x - 1][y] + mine[x - 1][y - 1] - 8 * '0'; } /*void Extend(char mine[ROWS][COLS],char show[ROWS][COLS], int x, int y) { int count = 0; int i = 0; for (i = 1;; i++) { if (mine[x][y - i] == mine[x + i][y - i] == mine[x + i][y] == mine[x + i][y + i] == mine[x][y + i] == mine[x - i][y + i] == mine[x - i][y] == mine[x - i][y - i] == '0') { show[x][y - i] = '0'; count = get_mine_count(mine, x, y-i); show[x][y-i] = count + '0'; show[x + i][y - i] = '0'; count = get_mine_count(mine, x+i, y-i); show[x + i][y - i] = count + '0'; show[x + i][y] = '0'; count = get_mine_count(mine, x+i, y); show[x + i][y] = count + '0'; show[x + i][y + i] = '0'; count = get_mine_count(mine, x+i, y+i); show[x + i][y + i] = count + '0'; show[x][y + i] = '0'; count = get_mine_count(mine, x, y); show[x][y + i] = count + '0'; show[x - i][y + i] = '0'; count = get_mine_count(mine, x-i, y+i); show[x - i][y + i] = count + '0'; show[x - i][y] = '0'; count = get_mine_count(mine, x-i, y); show[x - i][y] = count + '0'; show[x - i][y - i] = '0'; count = get_mine_count(mine, x-i, y-i); show[x - i][y - i] = count + '0'; Extend(mine, show, x, y); } else { break; } } //count = get_mine_count(mine, x, y); //show[x][y] = count + '0'; }*/ void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) { int x = 0; int y = 0; int count = 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("雷区蹦迪呢宝贝er,很遗憾你死了!!\n"); Display(mine, ROW, COL); break; } else { //Extend(mine, show, x, y); count = get_mine_count(mine, x, y); show[x][y] = count + '0'; Display(show, ROW, COL); win++; } if (win == row * col - EASY_COUNT) { printf("恭喜你,你赢了\a\n"); Display(mine, row, col); } } else { printf("非法坐标,请重新输入\a\n"); } } } //递归 实现扫雷的展开
主函数
#define _CRT_SECURE_NO_WARNINGS 1 #include "game.h" void game() { //雷的信息存储 //1.布置好的雷的信息 char mine[ROWS][COLS] = { 0 }; //2.排查出的雷的信息 char show[ROWS][COLS] = { 0 }; //数组的初始化 InitBoard(mine, ROWS, COLS,'0'); InitBoard(show, ROWS, COLS,'*'); //打印棋盘 //Display(mine, ROW, COL); Display(show, ROW, COL); //布置雷 SetMine(mine, ROW, COL); //Display(mine, ROW, COL); //扫雷 FindMine(mine,show,ROW,COL); } void menu() { printf("****************************\n"); printf("******* 0.Exit *******\n"); printf("******* 1.Play *******\n"); printf("****************************\n"); } void test() { srand((unsigned int)time(NULL)); int input = 0; do { menu(); printf("请选择是否开始游戏:>\n"); scanf("%d", &input); switch (input) { case 1: { printf("Game Start!!!\n"); game(); break; } case 0: { printf("退出游戏\n"); break; } default: { printf("非法输入,请重新选择>:\n"); } } } while (input); } int main() { test(); return 0; }
相关文章推荐
- 用C语言实现扫雷部分功能(可连续展开)
- 用java实现,数字四舍五入时,只小数部分四舍五入,整数不进位
- 二叉树一些常见问题的实现(部分)
- Android开发,MapBox的使用及部分功能实现(一)----- 初始化、标记、定位、styleurl
- 4行CSS实现表格内容超过一行的部分,用省略号代替
- LuaBit 对于LUA语言位操作符LUA语言实现,依赖于LUA Number的定义。(可参看未定义的实现部分)
- 实现上半部分是直角,下半部分是圆角半圆角的效果
- 新手上路系列5:部分字符串使用函数的程序实现
- C++中的inline函数的实现部分到底该放在哪里
- Java实现以字符串某一位置为界,将它之前的部分与之后的部分互换位置
- Android View部分消失效果实现
- 前几天过做的,一个可以实现+=部分先后的计算器
- python实现反转部分单向链表
- javascript实现让一个表单里的两个部分相等
- 结对编程-电梯调度算法的实现 (附加题部分请参考对应博客)
- 我对linux内核链表实现中的部分函数的理解——第一节
- Windows8系统更新时怎么实现仅更新部分补丁
- 左神的书——《程序员代码面试指南》之打印两个有序链表的公共部分 c++实现
- URL部分功能代码实现
- Android 实现部分文字高亮的三种方法