当前位置: 首页 > news >正文

【【C语言康复训练-4】】

C语言康复训练-4

head.h

#pragma once
#define ROWS 11
#define COLS 11
#define ROW 9//为什么会在头文件中定义两个 因为1到9是我们想要实现的标准单元
#define COL 9 //但是对于我们幕后调控者,对边角上并不能和其他一样方便操作,所以我们向外拓展了一圈
#define number 10
void menu();
void game();
void initboard(char board[ROWS][COLS], int rows, int cols, char ret);
void displayboard(char board[ROWS][COLS], int row, int col);
void mailei(char board[ROWS][COLS], int row, int col);
void pailei(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
int tongji(char board[ROWS][COLS], int row, int col);
void jifa(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col, int x, int y);
void biaoji(char show[ROWS][COLS], int row, int col);

head.c

#define _CRT_SECURE_NO_WARNINGS  1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include"head.h"int main()
{int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请开始你的选择:\n");scanf("%d", &input);switch (input){case 1:  printf("游戏开始:\n");game(); break;case 0: printf("爱玩玩,不玩滚\n"); break;default: printf("输入非法,请重试\n"); break;}} while (input);return 0;
}

project.c

#define _CRT_SECURE_NO_WARNINGS  1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include"head.h"void menu()
{printf("*************************\n");printf("*************************\n");printf("*******1.开始游戏********\n");printf("*******0.退出游戏********\n");printf("*************************\n");printf("*************************\n");
}void game()
{//进行任何游戏首先第一步是建立一个表格char mine[ROWS][COLS] = { 0 };//ROWS和COLS代表行和列因为在此处一直用上我们在头文件中定义//这样以后对于行列的修改会更加便利char show[ROWS][COLS] = { 0 };//创建一个显示模块,//在实现扫雷过程中,我们将埋雷与排雷置于两张表格initboard(mine, ROWS, COLS, '0');//初始化埋雷表格,置入字符‘0’initboard(show, ROWS, COLS, '*');//初始化结束,对于玩家来说到这里什么也没有,那么我先写一个显示模块// displayboard(mine, ROW, COL);//地雷模块我们一般显示只是为了确认正确性// displayboard(show, ROW, COL);//显示模块是显示在屏幕上的我们把自己增加的外围去掉用ROW//当初始化完成之后,我们需要真正开始游戏mailei(mine, ROW, COL);//埋雷// displayboard(mine, ROW, COL);displayboard(show, ROW, COL);//display只是为了调试时候方便 最后哪个不好看,自己删去即可//雷埋好了,也显示出来了我们需要去排雷pailei(mine, show, ROW, COL);
}//初始化
void initboard(char board[ROWS][COLS], int rows, int cols, char ret)
{int i = 0;int j = 0;//设定两个数开始循环for (i = 0; i < rows; i++){for (j = 0; j < cols; j++){board[i][j] = ret;//为什么要设置ret 因为我们在初始化显示模块与地雷模块时赋予了不同的值//为了使两个模块在一次初始化中就完成操作}}}
//显示模块
void displayboard(char board[ROWS][COLS], int row, int col)
{//依次打印值喽int i = 0;int j = 0;for (i = 0; i <= row; i++)//第一行打印 数字序列 1到9{printf("%d ", i);}printf("\n");//换行真正意义上打印数字组for (i = 1; i <= row; i++){printf("%d ", i);//每次经过一轮打印一个数字for (j = 1; j <= col; j++){printf("%c ", board[i][j]);}printf("\n");}
}
//埋雷模块
void mailei(char board[ROWS][COLS], int row, int col)
{//我们需要电脑生成随机数。随机生成地雷int x = 0;int y = 0;int count = number;//头文件定义雷的数量是10个while (count)//怎么保证有指定数量的雷呢,这里用count--{x = rand() % row + 1;//指的是1-9y = rand() % col + 1;//rand模块我们需要去game函数中定义if (board[x][y] == '0'){board[x][y] = '1';count--;}}
}
//排雷模块
void pailei(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int x = 0;int y = 0;int win = 0;char ch = 0;while (win < row * col - number){printf("请输入雷区坐标:\n");//让用户输入坐标scanf("%d%d", &x, &y);//输入坐标我们首先判断是不是无效坐标if (x >= 1 && y >= 1 && x <= row && y <= col){if (mine[x][y] == '1'){printf("你输了\n");displayboard(mine, ROW, COL);break;}else{//此处不是地雷,我们需要激发周围的对象,就像原版扫雷一样,炸开直至看到是地雷的序号//需要我们去递归进行操作jifa(mine, show, row, col, x, y);displayboard(show, row, col);printf("是否标记:Y,不需要标记:N\n");while ((ch = getchar()) != '\n');//剔除掉我们最喜欢摁的回车scanf("%c", &ch);switch (ch){case 'Y':biaoji(show, row, col);break;default:break;}}}else{printf("字符非法,请重新输入:");}}if (win >= row * col - number){printf("扫雷成功");}else{printf("扫雷失败\n");}
}
//统计模块int tongji(char mine[ROWS][COLS], int x, int y)
{//因为我们是字符0,地雷为字符1 ,根据ASICII码值我们得出结论‘1’-‘0’=1return  mine[x - 1][y] +mine[x - 1][y - 1] +mine[x - 1][y + 1] +mine[x][y - 1] +mine[x - 1][y + 1] +mine[x + 1][y - 1] +mine[x + 1][y] +mine[x + 1][y + 1] - 8 * '0';
}
//激发模块
void jifa(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col, int x, int y)
{//激发面对的是如果if (x >= 1 && x <= row && y >= 1 && y <= col){int z = tongji(mine, x, y);if (z == 0){//把附近没有地雷的位置变成字符 “空格”show[x][y] = ' ';int i = 0;//向四周共8个位置递归调用for (i = x - 1; i <= x + 1; i++)//3行{int j = 0;for (j = y - 1; j <= y + 1; j++)//3列{if (show[i][j] == '*'){jifa(mine, show, row, col, i, j);}}}}else{show[x][y] = z + '0';}}
}
//标记模块
void biaoji(char show[ROWS][COLS], int row, int col)
{int x = 0;int y = 0;while (1){printf("请输入要标记的坐标:");scanf("%d%d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col){if (show[x][y] == '*'){show[x][y] = '!';break;}else{printf("输入非法,请重新输入:\n");}}else{printf("输入非法,请重新输入:\n");}}displayboard(show, row, col);
}
http://www.lryc.cn/news/160620.html

相关文章:

  • [DM8] DM-DM DBLINK DPI方式
  • 创建了一个名为nums_list的vector容器,其中存储了一系列的pair<int, int>
  • SpringMVC文件上传、文件下载多文件上传及jrebel的使用与配置
  • Leetcode143. 重排链表
  • Git 回顾小结
  • 响应式布局(3种) + flex计算
  • Pytorch从零开始实战01
  • inappropriate address 127.0.0.1 for the fudge command, line ignored 时间同步的时候报错
  • linux并发服务器 —— 项目实战(九)
  • 生信教程|替代模型选择
  • redis持久化、主从和哨兵架构
  • Python 连接 Oracle 详解
  • 认识模块化
  • 2023年及以后语言、视觉和生成模型的发展和展望
  • OpenLdap +PhpLdapAdmin + Grafana docker-compose部署安装
  • Java | 排序内容大总结
  • Go 语言入门指南:基础语法和常用特性解析
  • 20.添加HTTP模块
  • Qemu 架构 硬件模拟器
  • 通过starrocks jdbc外表查询sqlserver
  • ArcGIS 10.5安装教程!
  • ConstraintLayout约束布局
  • 通过pyinstaller将python项目打包成exe执行文件
  • P1068 [NOIP2009 普及组] 分数线划定
  • 应用在汽车新风系统中消毒杀菌的UVC灯珠
  • TOOLLLM: FACILITATING LARGE LANGUAGE MODELS TO MASTER 16000+ REAL-WORLD APIS
  • 【JavaSpring】spring接口-beanfactory和applicationcontext与事件解耦
  • 《深入理解Java虚拟机》——Java内存区域与内存溢出异常
  • 公众号hanniman往期精选
  • 谷粒商城----缓存与分布式锁