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

怎样做网站兼职攻击asp网站

怎样做网站兼职,攻击asp网站,51比购网官方网站,wordpress怎么加联系工具本篇博客会讲解#xff0c;如何使用C语言实现扫雷小游戏。 0.思路及准备工作 使用2个二维数组mine和show#xff0c;分别来存储雷的位置信息和排查出来的雷的信息#xff0c;前者隐藏#xff0c;后者展示给玩家。假设盘面大小是99#xff0c;这2个二维数组都要开大一圈…本篇博客会讲解如何使用C语言实现扫雷小游戏。 0.思路及准备工作 使用2个二维数组mine和show分别来存储雷的位置信息和排查出来的雷的信息前者隐藏后者展示给玩家。假设盘面大小是9×9这2个二维数组都要开大一圈也就是大小是11×11这是为了更加方便的数边角上雷的个数防止越界。mine数组中用字符1表示雷字符0表示非雷。show数组中用*表示该位置没有被排查过数字字符表示周围一圈8个位置有几个雷空格表示周围一圈没有雷!表示该位置被标记了。如果玩家排查的位置是雷那么游戏失败。当玩家把所有非雷的位置找出来后扫雷成功。 先定义一些符号后面会用。 // 扫雷盘面的有效区域大小 // 雷会在该区域中生成玩家只能在该区域内排查或者标记雷 // 同时是实际展示的区域大小 #define ROW 9 #define COL 9// 实际的盘面大小 // 防止扫描周围8个坐标时出现越界访问 // 此时哪怕扫描有效区域的周围哪怕不进行判断也不会越界 // 因为最外面有一圈保护措施 #define ROWS (ROW 2) #define COLS (COL 2)// 雷的个数 #define EASY_COUNT 10 // 简单难度2个数组分别是 // 存储雷的位置信息 // 1 - 雷 // 0 - 非雷 char mine[ROWS][COLS] { 0 };// 展示给玩家的信息 // * - 未排查 // 1~9 - 该位置已被排查且该位置周围有雷 // 数字字符表示周围雷的个数 // 空格 - 该位置已被排查且该位置周围没有雷 // ! - 该位置被玩家标记可能是雷也可能不是雷 // !所在位置并没有被排查不算作已排查位置 char show[ROWS][COLS] { 0 };1.初始化 我们分别把mine和show数组初始化成全字符0和全*。可以利用二维数组在内存中连续存放的特点使用memset函数来设置内存中的值。 void InitBoard(char board[ROWS][COLS], int rows, int cols, char set) {// board为二维数组在内存中连续存放// 使用memset把rows*cols的空间初始化为setmemset(board, set, rows * cols * sizeof(char)); }2.打印盘面 打印时使用2层循环来遍历二维数组同时把行标和列标都打印出来。注意打印时只需打印中间的9×9的位置为了区分我用rows和cols来表示多了一圈后的行和列用row和col表示有效的盘面大小。 void PrintBoard(char board[ROWS][COLS], int row, int col) {// 打印分割行printf(********* 扫雷 *********\n);// 打印列标0是占位的for (int i 0; i row; i){printf(%d , i);}printf(\n);// 打印数据每行前面打印行标for (int i 1; i row; i){// 打印行标printf(%d , i);// 打印数据for (int j 1; j col; j){printf(%c , board[i][j]);}printf(\n);}// 打印分割行printf(********* 扫雷 *********\n); }打印效果 3.设置雷 可以使用rand函数随机生成10个雷注意如果该位置已经生成雷就重新再生成坐标不能重复。 void SetMine(char mine[ROWS][COLS], int row, int col) {// 待放置的雷的个数int count EASY_COUNT;// 布置雷while (count){// 产生随机坐标int x rand() % row 1; // 1~rowint y rand() % col 1; // 1~col// 该位置如果没有布置雷则放雷if (mine[x][y] 0){mine[x][y] 1;--count;}} }4.排查雷 排查雷的逻辑就相对复杂点了这里我分以下几点来叙述。 使用GetMineCount函数来获取周围8个位置雷的个数。只需要把周围8个坐标的值加起来由于都是字符’1’或字符’0’还需要减去8个字符’0’得到的就是字符’1’的个数。使用如果满足递归条件就递归展开。展开的思路是如果该位置没有越界、自己不是雷、周围没有雷、且没有被排查过则递归展开上下左右。使用count变量来保存待排查的位置的个数当count减到0则排雷成功。玩家输入排查的坐标后需要分别检查是否合法、该位置是否被排查过、该位置是不是雷如果检查过后不是雷再进行正常的递归展开等。如果玩家选择标记若该位置未被排查过可以切换标记状态。 // 获取x,y坐标周围8个位置的雷的个数 static int GetMineCount(char mine[ROWS][COLS], int x, int y) {// 既然只有8个坐标直接加起来就行了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; }// 我也不想设计这么多参数但是似乎只能这样了没想到更好的办法 // x,y为排查的坐标 // pcount指向countcount为玩家需要排查非雷位置的个数 // 当count减到0时玩家扫雷成功 static void ShowMessage(char mine[ROWS][COLS], char show[ROWS][COLS],int row, int col, int x, int y, int* pcount) {// 是否展开的判断if (x 1 x row y 1 y col // 坐标合法性判断 mine[x][y] 0 // 该坐标不是雷 (show[x][y] * || show[x][y] !)) // 该位置没有被排查过{// 获取周围8个坐标雷的个数int mineCount GetMineCount(mine, x, y);// 判断周围有没有雷if (mineCount 0) // 周围没有雷{show[x][y] ;*pcount *pcount - 1;// 递归展开ShowMessage(mine, show, row, col, x - 1, y, pcount); // 上ShowMessage(mine, show, row, col, x 1, y, pcount); // 下ShowMessage(mine, show, row, col, x, y - 1, pcount); // 左ShowMessage(mine, show, row, col, x, y 1, pcount); // 右}else // 周围有雷{show[x][y] mineCount 0;*pcount *pcount - 1;}} }// 若该位置未被排查切换标记状态 // 若标记则取消标记 // 若未标记则标记 static void SignMine(char show[ROWS][COLS], int x, int y) {if (show[x][y] !){// 取消标记show[x][y] *;}else if (show[x][y] *){// 标记show[x][y] !;} }void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) {// 坐标int x 0;int y 0;// 存储玩家输入的数据int input 0;// 玩家需要排查的位置总数即非雷的位置总数// 当count减到0时玩家扫雷成功int count row * col - EASY_COUNT;while (count){// 玩家输入坐标printf(请输入坐标:);scanf(%d %d, x, y);// 判断坐标有效性if (x 0 || x row || y 0 || y col){printf(坐标非法请重新输入\n);continue;}// 选择排查/标记while (1){printf(你想要排查(1)还是标记(0):);scanf(%d, input);// 判断输入有效性if (input 0 || input 1){break;}else{printf(选择错误请重新选择\n);}}if (input 1){// 排查// 检查该坐标是否已被排查过if (show[x][y] ! * show[x][y] ! !){printf(该坐标已被排查过\n);}else if (mine[x][y] 0) // 判断是否踩到雷{// 根据玩家排查的位置显示雷的信息ShowMessage(mine, show, row, col, x, y, count);PrintBoard(show, row, col);}else // 踩到雷了{printf(你踩到雷了扫雷失败\n);break;}}else if (input 0){// 标记SignMine(show, x, y);}}if (count 0){printf(恭喜你扫雷成功\n);} }5.测试 // 打印菜单 void menu() {printf(************************\n);printf(****** 1. play ******\n);printf(****** 0. exit ******\n);printf(************************\n); }void game() {// 存储雷的位置信息// 1 - 雷// 0 - 非雷char mine[ROWS][COLS] { 0 };// 展示给玩家的信息// * - 未排查// 1~9 - 该位置已被排查且该位置周围有雷// 数字字符表示周围雷的个数// 空格 - 该位置已被排查且该位置周围没有雷// ! - 该位置被玩家标记可能是雷也可能不是雷// !所在位置并没有被排查不算作已排查位置char show[ROWS][COLS] { 0 };// 初始化盘面InitBoard(mine, ROWS, COLS, 0); // 初始化为全0InitBoard(show, ROWS, COLS, *); // 初始化为全*// 随机布置雷只在有效区域内SetMine(mine, ROW, COL);// 打印盘面只打印有效区域//PrintBoard(mine, ROW, COL);PrintBoard(show, ROW, COL);// 玩家排查雷FindMine(mine, show, ROW, COL); }// 测试游戏的逻辑 void test() {// 生成随机数生成器起点srand((unsigned int)time(NULL));int input 0; // 存储玩家输入的数据do{menu();printf(请选择:);scanf(%d, input);switch (input){case 1:// 游戏的逻辑game();break;case 0:printf(退出游戏\n);break;default:printf(选择错误重新选择\n);break;}} while (input); }int main() {test();return 0; }总结 扫雷小游戏的实现需要2个二维数组需要了解二维数组的相关知识比如在内存中的存储方式。初始化盘面利用二维数组在内存中连续存放的特点使用memset一步到位。打印盘面以及后面的一部分逻辑遍历二维数组时使用2层for循环是一个常见的思路。设置雷的位置采用随机生成的方式需要了解C语言如何生成随机数的知识点我之前写过一篇博客讲解过。排查雷时需要通过反复的判断语句防止玩家输入的坐标不满足需求。尤其需要重点理解递归的思路递归有限制条件如该位置不是雷、周围没有雷、该位置没有越界、该位置没有被排查过等同时不断趋近于限制条件递归上下左右时一定会接近边界。动手写 感谢大家的阅读
http://www.dnsts.com.cn/news/83859.html

相关文章:

  • asp.netmvc 做网站网站推广的四个阶段
  • 百度seo优化方案湛江做网站seo
  • 网站如何发布到网上做网站要学些什么
  • 做it行业招标网站有哪些长沙企业100强名单
  • 怎样建设外贸网站ui界面设计培训班
  • 建设银行网站多少静态网站建设开发
  • 吴江区建设工程招标网站青岛手机网站建设
  • 网站空间到期怎么办西安网站建设工程
  • 家具营销型网站模板公司做网站的价格江阴
  • 什么是网站主题优化请人做网站注意事项
  • 手把手教你学网站建设拼多多采用了哪些网络营销方式
  • 电商做网站公益组织网站源码
  • html网站开发例子上海建设行业的资质网站
  • 设计制作简单的手机网站公司网站开发费用兴田德润在哪儿
  • 深圳去聋哑做义工申请网站设计师在线接单
  • 网站建设基本步骤是什么网站界面分析
  • 安装 wordpress多用户seo推广优化公司
  • 电子商务网站建设与管理相关论文广东省建设注册中心网站
  • 张扬网站建设站群搭建
  • 网站程序合同苏州吴中区住房和城乡建设局网站
  • 天津设计师网站大全软件开发工程师岗位要求
  • 网站建设与管理专业的行业发展网站开发客户阿里云案例
  • dedecms做门户网站北京到安阳的大巴
  • wordpress登陆的插件wordpress 优化
  • 朗读者外国人做的汉字网站软件设计是什么工作
  • 网站模板html整站商标生成器在线制作
  • 做视频解析网站违法不网站绝对路径301
  • 张家界建设信息网站湖南的商城网站建设
  • 云南网站建设优选平台关于建设工程的网站
  • 巨鹿网站建设多少钱php 7.0 wordpress