to 28楼 比如我上面举的例子,是一个10*10的矩阵 你可以把它扩展一圈,变成12*12的,其中里面的第i=1行到第i=10行,第j=1列到第j=10列为原来的10*10矩阵。相当于给原来的10*10矩阵围了一个圈。这些新增的地方,值都设为0.然后你扫描从i=1到i=10,j=1到j=10,每个都判断下邻近的8个格子就ok了。 你一开始考虑的,主要是担心在边上和角上的点,不是判断相邻的8个格子对吧?这样一转换,给它围一个圈就没问题了难得有人就具体的问题思考,展开讨论,而不是简单的贴个什么链接...握个手
如果只要思想,可以给你提供个思路吧先说说如何初始化。
比如你的界面是10*10的,上面有10个雷,那你可以生成一个数组10*10的数组a,第一行的10个数a[0][i]都等于-1,表示10个雷,其他9行的90个数,都等于0,表示没雷。
然后生成一个10*10的随即数组b,里面每个数都是属于0-99;然后从头到尾扫描一遍a数组和b数组,比如扫描到第i个数,则先找b[i]对应的值,假设等于79,则a[i]和a[79]交换
这样就在10*10的格子上布好10个雷了
然后再扫描一遍a数组,对其中的每个数,如果这个数是0(代表不是雷点),判断它周围的相邻格子有几个雷(即周围格子中有几个格子值为-1),这个格子填上相应的数
这样就把10*10的棋盘初始化好了如果你要带界面,可以真正开始扫雷,还得在数组a的每个格子中增加一个bool型数据,表示这个格子是否打开。
刚开始,所有格子的这个值都是false。一点击棋盘上某个点,先判断下这个点的数是不是-1。是-1,则gameover,把所有其他上的bool值设为true,提示“you lost”;若不是-1,是0,则从这个点开始,与它相邻的点也延伸出去,找到挨着的所有等于0的点,把这些点都设为true;弱属于[1,8],则仅仅把这个点bool设为true。
下一个点击的点,重复一上过程,知道所有点都为true以上应该就是扫雷游戏的逻辑了,挺简单的
确实如10所说,要是连连看,就比较麻烦。有空再想想其中逻辑
你在CSDN的下载栏目中搜索 “C#扫雷游戏源码”或“ C#扫雷游戏开发文档”或“ C#扫雷游戏chm格式使用说明”可以下载。
随机分面雷存在到一个泛型里或者那里都行.
比如我上面举的例子,是一个10*10的矩阵
你可以把它扩展一圈,变成12*12的,其中里面的第i=1行到第i=10行,第j=1列到第j=10列为原来的10*10矩阵。相当于给原来的10*10矩阵围了一个圈。这些新增的地方,值都设为0.然后你扫描从i=1到i=10,j=1到j=10,每个都判断下邻近的8个格子就ok了。
你一开始考虑的,主要是担心在边上和角上的点,不是判断相邻的8个格子对吧?这样一转换,给它围一个圈就没问题了难得有人就具体的问题思考,展开讨论,而不是简单的贴个什么链接...握个手
编程这东西,关键在于自己理解,看人家代码看的再明白,等你自己写时一样不会写。
开始一点头绪都没有,慢慢地解决问题,等问题都解决完了,扫雷也就出来了。
按15楼说的,你先做个简单的10*10,然后就可以扩展为N*N了,
我的递归思路:在递归中写入判断,左上,上,右上,右,右下,下,左下,左等八个方向的判断,如果某个格子为false(数组中标记位无雷),则继续调用此递归.....
自己写,碰到具体问题再问,最后别看人家代码....
只要有心,会进步的。
大致思路么首先定义一个类,包括坐标、有没有雷、周围雷数、是否被翻开、是否被标记等成员变量,然后建一个这个类对象的二位数组,初始化。在写一个方法随即生成雷,一个方法扫描所有对象计算出周围的雷数。
UI的话直接用button作每一个格子就可以,写一个方法自动生成所有button,用Tag属性前面的说得对象,统一click事件响应,大致就是这样
1 随机生成雷的二位数组位置
2 循环每个没有雷的格子 判断周围8个格雷的数目over
这里面有
if(i >= 1)
{
//执行上面3个格子计算 0行除外
}if(i <= 最大行 - 1)
{
//执行下面3个格子计算 最后行除外
}if()
{
// 列同理
}if()
{
// 列同理
}
然后自己研究研究 然后把不理解的地方放CSDN问高手 别一次把所有代码都贴出来 没人有那耐心
感觉这里的前辈们都太热心了,我忙了两天忘记看帖子了~~实在不好意思...惭愧
感谢回复我帖子,给我的问题提供解决思路的各路大侠们做一个东西能发现自身不少问题(绝对包括基础差这个问题~~CSDN的扫雷代码基本都下载了...一个也没看懂...唉...)
基本思路和15楼差不多,不过没有用数组,直接按坐标循环布局,加入是否有雷和有几个雷的属性,再按行列坐标递归判断相邻8格雷数(整整两天时间全用在解决递归死循环了...最后发现像素坐标判断不准确,改用行列)
随机生雷还没有解决好,会出现+-2的误差...最后,再次感谢百忙中伸出援手的各位前辈,感激不尽~~