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

花生壳如何做网站百度查询网

花生壳如何做网站,百度查询网,成都青羊区建设局网站,wordpress自动设置文章第一张文接上一篇博文C语言:三子棋小游戏。本篇博文是使用C语言来实现扫雷小游戏的。这里不对扫雷的规则进行赘述。玩家通过键盘输入坐标来探雷。博主在实现扫雷之前从未看过扫雷实现的相关视频,所以这里实现的扫雷完全是博主的原生思路,具有逻辑性…

文接上一篇博文C语言:三子棋小游戏。本篇博文是使用C语言来实现扫雷小游戏的。这里不对扫雷的规则进行赘述。玩家通过键盘输入坐标来探雷。博主在实现扫雷之前从未看过扫雷实现的相关视频,所以这里实现的扫雷完全是博主的原生思路,具有逻辑性。下面详细介绍一下如何实现扫雷。

(建议在阅读过上一篇博文再阅读本文,因为再本文中对重复的问题不会再次解读。)

步骤一:制定框架

框架是什么?如何制定框架?这些问题在三子棋的实现中就已经解答了,这里也不多讲。这里的框架与三子棋的框架完全相同。

#include"detect.h"
int main()
{srand((unsigned)time(NULL));//这里设置了随机种子,为了之后随机生成雷int n = 0;do{menu();printf("your choice:\n");scanf("%d", &n);switch (n){case 1:system("cls");game();break;case 0:system("cls");printf("exit game\n");break;default:printf("input error,again:\n");Sleep(1000);system("cls");}} while (n);return 0;
}

menu是什么在三子棋实现中也提过,这里使用了Sleep函数(程序暂停运行多少毫秒)和system("cls")(清屏)是为了更好的游戏体验。这里的detect.h代码如下:

#pragma once
#define ROW 10
#define COL 10
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
void menu();
void game();

步骤二:实现game函数

跟三子棋的game函数一样,我们需要事先想好整个game的流程。

分析过程:既然有雷,我们需要将雷的位置记录下来,那我们就需要一个字符二维数组,雷用大写字符'O'表示,雷的位置就初始化为'O',其他位置为空格。另外,开局时我们一个地方都没探测,我们难道要将带雷的数组直接打印上去吗?显然这样雷就直接被打印出来了。我们可以想到用第二个字符二维数组,里面初始时全是空格字符,这个数组是用来打印的。我们在这个数组中进行探测。

结束条件:如果探的是雷,那么直接宣告失败,结束本次游戏;如果这一次避开了所有的雷,那么直接宣告成功,结束本次游戏;如果这一次没探到雷而且没有结束,那么显示此处旁边雷的个数

那我们怎么知道探出的是不是雷?其实很简单,在数组一中此处如果是雷,说明这次探到雷了

下面是game的代码

void game()
{char map1[ROW][COL] = { 0 };char map2[ROW][COL] = { 0 };mapInit(map1, ROW, COL);//真正存储炸弹mapInit(map2, ROW, COL);//用来打印BoomInit(map1, ROW, COL);system("cls");showMap(map2, ROW, COL);while (1){int ret=playerMove(map1, map2, ROW, COL,ROW*COL/8);if (ret==1)//炸了{system("cls");showMap(map1, ROW, COL);printf("game over\n");system("pause");break;}else if (ret== 2)//排除了所有炸弹{system("cls");showMap(map1, ROW, COL);//展示所有炸弹位置printf("detect successfully\n");Sleep(2000);break;}system("cls");showMap(map2, ROW, COL);}
}

当然只是代码还是很模糊的,下面依然需要对game中的各个部分进行讲解。

map1:即数组一,用来存放炸弹的

map2:即数组二,用来打印的

ROW,COL:宏定义,这个宏定义在"detect.h"中,之前已经给出

mapInit:用来初始化两个数组,将两个数组的每一个元素变成空格字符

BoomInit:用来将map1的随机位置放上炸弹

showMap:将map2打印出来(连带格子的线条,之后会详细实现)

playerMove:返回值为int类型,玩家在map2中的一个位置进行探测,如果在map1中相应位置是炸弹就返回1,避开所有炸弹就返回2,其他情况返回0;

 步骤三:实现game中的函数

​
​
void mapInit(char map[ROW][COL], int row, int col)
{for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){map[i][j] = ' ';}}
}//这个函数很简单,不作讲解
void BoomInit(char map[ROW][COL], int row, int col)
{int boomNum = row * col / 6;//6分之一是炸弹//设置炸弹进mapint curNum = 0;int x = 0;int y = 0;while (curNum != boomNum){x = rand() % row;y = rand() % col;if (map[x][y] == ' ')//如果是空格才能正常放入,如果已经是炸弹就不放,重新生成一个坐标{map[x][y] = 'O';curNum++;}}
}void showMap(char map[ROW][COL], int row, int col)
{for (int i = 0; i < row; i++){for (int j = 0; j < col; j++){printf(" %c ", map[i][j]);if (j < col - 1)printf("|");}printf("\n");if (i < row - 1){for (int x = 0; x < col; x++){printf("---");if (x < col - 1)printf("|");}printf("\n");}//这一段其实是将画格子线和棋子一并画出,//需要自己动手操作一下才能明白这段代码每一句是在做什么//不动手再怎么讲都不会弄明白}
}
//warning函数是为了完成playerMove函数而写的,请先看playerMove函数
char warning(char map[ROW][COL], int row, int col, int x, int y)
{int countBoom = 0;//最大为8,加上'0'变成字符for (int i = x - 1; i <= x + 1;i++){for (int j = y - 1; j <= y + 1; j++){if (i >= 0 && i <= row && j >= 0 && j <= col)//越界了就不判断是不是雷{if (map[i][j] == 'O')countBoom++;}}}return countBoom +'0';
}
int playerMove(char map1[ROW][COL],char map2[ROW][COL], int row, int col,int boomNum)
{int x = 0;int y = 0;static count = 0;//静态局部变量,记录用户一共开了几个格子while (1){printf("input x:\n");scanf("%d", &x);printf("input y:\n");scanf("%d", &y);x--;y--;//用户输入的1就是第一个位置,数组下标就是0if (x < 0 || x >= row || y < 0 || y >= col || map2[x][y] != ' '){printf("wrong place,again\n");//非法坐标,重新输入}else{break;//合法,退出循环}}//如果探到雷了,map2的该位置就改成'O',没探到雷就显示旁边有几个雷//这里的warning函数就是用来给出map1的相应位置旁边有几个雷,返回值是char类型map2[x][y] = map1[x][y]=='O'?'O':warning(map1,ROW,COL,x,y);if (map2[x][y] == 'O')return 1;//探到雷了,返回1else//判断是否排除完{count++;if (count == col * row - boomNum){count = 0;//归零,下一次进行游戏count还是从0开始计数,否则count还是之前的值return 2;//避开了所有的雷,返回2}}return 0;//正常进行下一次探测,返回0
}​​

 到这里为止,所有的工作就完成了,我们来看看效果

测试:

 配合清屏和睡眠函数效果还是不错的,只是和原版的扫雷少了一个功能。我们知道,原版的扫雷在探到一个格子旁边没有一个炸弹时,也就这里实现的扫雷显示'0'时,会自动将旁边的格子显示出来,只是这个功能实现起来有点困难。当时想过用递归解决这个问题,就是说如果map2中探到一个0雷格,将旁边八个格子打开,如果这八个格子还有0雷格,就会进行递归,继续将旁边的格子打开,只是这样会有一个问题,0雷格挨在一起的话会陷入死递归。个人感觉这个问题使用递归是最好解决的,之后想到了解决方案会更新博文。


文章转载自:
http://dinncooverprescription.bpmz.cn
http://dinncomaladminister.bpmz.cn
http://dinncofuzzbox.bpmz.cn
http://dinncocointelpro.bpmz.cn
http://dinncoippon.bpmz.cn
http://dinncoroset.bpmz.cn
http://dinncoimitated.bpmz.cn
http://dinncobuttock.bpmz.cn
http://dinncomashlam.bpmz.cn
http://dinncounmitigable.bpmz.cn
http://dinncofestination.bpmz.cn
http://dinncochimar.bpmz.cn
http://dinncocounterinsurgency.bpmz.cn
http://dinncowiener.bpmz.cn
http://dinncodup.bpmz.cn
http://dinnconot.bpmz.cn
http://dinncopolychresty.bpmz.cn
http://dinncofastball.bpmz.cn
http://dinncoboychik.bpmz.cn
http://dinncowoodhouse.bpmz.cn
http://dinncofendant.bpmz.cn
http://dinncotransprovincial.bpmz.cn
http://dinncocoolsville.bpmz.cn
http://dinncoquotation.bpmz.cn
http://dinncoparticiple.bpmz.cn
http://dinncosubpolar.bpmz.cn
http://dinncoplagiarism.bpmz.cn
http://dinncoseawater.bpmz.cn
http://dinncospiritualisation.bpmz.cn
http://dinncodiscontent.bpmz.cn
http://dinncogeode.bpmz.cn
http://dinncohad.bpmz.cn
http://dinncomaskinonge.bpmz.cn
http://dinncoreferral.bpmz.cn
http://dinncoteosinte.bpmz.cn
http://dinncomucky.bpmz.cn
http://dinncocholestasis.bpmz.cn
http://dinncoencore.bpmz.cn
http://dinncopreservator.bpmz.cn
http://dinncopremium.bpmz.cn
http://dinncoshantung.bpmz.cn
http://dinncorefectioner.bpmz.cn
http://dinncoyarmalke.bpmz.cn
http://dinncobicipital.bpmz.cn
http://dinncoosteomalacic.bpmz.cn
http://dinncoequid.bpmz.cn
http://dinncograntee.bpmz.cn
http://dinncoroupet.bpmz.cn
http://dinncoexclosure.bpmz.cn
http://dinncodastardly.bpmz.cn
http://dinncorabbinism.bpmz.cn
http://dinncomisquote.bpmz.cn
http://dinncopreambulate.bpmz.cn
http://dinncoextoll.bpmz.cn
http://dinncommm.bpmz.cn
http://dinncofleury.bpmz.cn
http://dinncovanman.bpmz.cn
http://dinncoamphibolite.bpmz.cn
http://dinncoashiver.bpmz.cn
http://dinncoouthouse.bpmz.cn
http://dinncotracheated.bpmz.cn
http://dinncohedonic.bpmz.cn
http://dinncoprick.bpmz.cn
http://dinncomarcasite.bpmz.cn
http://dinncoarboretum.bpmz.cn
http://dinncofiber.bpmz.cn
http://dinncocolourably.bpmz.cn
http://dinncoaitken.bpmz.cn
http://dinncowallpaper.bpmz.cn
http://dinncoexpressiveness.bpmz.cn
http://dinncosonolyse.bpmz.cn
http://dinncodruze.bpmz.cn
http://dinncovehement.bpmz.cn
http://dinncolemon.bpmz.cn
http://dinncobutazolidin.bpmz.cn
http://dinncojaques.bpmz.cn
http://dinncophonofilm.bpmz.cn
http://dinncoentomologize.bpmz.cn
http://dinncoeternalize.bpmz.cn
http://dinncovat.bpmz.cn
http://dinncohepatic.bpmz.cn
http://dinncosiderochrome.bpmz.cn
http://dinncospectrobolometer.bpmz.cn
http://dinncodrive.bpmz.cn
http://dinncokhan.bpmz.cn
http://dinncosulphamate.bpmz.cn
http://dinncobaddy.bpmz.cn
http://dinncomuckrake.bpmz.cn
http://dinncopane.bpmz.cn
http://dinncopalk.bpmz.cn
http://dinnconyc.bpmz.cn
http://dinncotemptress.bpmz.cn
http://dinncoencloud.bpmz.cn
http://dinncorepublicanise.bpmz.cn
http://dinncocubbyhouse.bpmz.cn
http://dinncoshifting.bpmz.cn
http://dinncocameo.bpmz.cn
http://dinncopenguin.bpmz.cn
http://dinncohypoploid.bpmz.cn
http://dinncopanentheism.bpmz.cn
http://www.dinnco.com/news/88654.html

相关文章:

  • 专业外贸制作网站自己怎么注册网站
  • 中山免备案网站建设大数据精准营销
  • 池州哪里做网站百度查找相似图片
  • 自己做交易网站吗seo网站优化推广
  • 初学网站开发需要书籍青海seo技术培训
  • 日照建网站百度风云榜官网
  • 今日资讯最新消息百度广告优化师
  • 网站咋做推广百度搜索技巧
  • 可以做视频的一个网站怎样建立一个网络销售平台
  • 杭州市住房和城乡建设厅网站首页关键词排名
  • 在哪个网站做任务赚钱网络营销的四大要素
  • 制作网站怎样找公司来帮做南阳网站seo
  • 2017年政府网站建设总结湖南seo推广
  • 重庆医院网站建设推广普通话手抄报图片大全
  • wordpress 日主题下载失败广州网络seo优化
  • 青海专业网站建设推广平台建设网盘资源
  • 给甜品网站做seo制作网页的流程步骤
  • 中国深圳航空公司官方网站经典软文案例分析
  • 页面简洁的导航网站怎样推广自己的商城
  • 珠海响应式网站建设百度排名软件
  • 网页聊天工具惠州企业网站seo
  • 免费做网站app页面优化
  • 企业官网建站费用sem推广和seo的区别
  • 怎么做单页网站网站赚钱
  • 宁波led网站建设制作网页的软件有哪些
  • 网站建设维护考试西安外包网络推广
  • 建英文网站费用ip切换工具
  • 网做 网站有哪些功能知乎关键词搜索
  • 中国人在国外做赌博网站代理优化怎么做
  • 怎么看别的网站是那个公司做的灰色词排名接单