java扫雷递归算法
用java做一个扫雷,现在就剩关键的算法翻开周围没有雷德格子以及和他相连的所有没有雷德格子的递归算法,写了好久就是出错,请问怎么个处理方法啊?难道不是递归?...
用java做一个扫雷,现在就剩关键的算法翻开周围没有雷德格子以及和他相连的所有没有雷德格子的递归算法,写了好久就是出错,请问怎么个处理方法啊?难道不是递归?
展开
2个回答
展开全部
根据规则,应该有个 “打开没有空白方格时递归打开周围空白或数字方格” 的方法;
还要有个 “点击数字方格时,判断周围8个方格标记地雷数量与数字是否相同,相同打开未标记地雷的方块” 的方法。
方格类的思路应该是
class fangGe{
//标记是数字空白还是地雷
int type;
void daKai (){
//判断是否已经打开
//判断类型
//如果是空白 循环周围8个方格 调用其打开方法
//如果是数字,打开自己
//如果是地雷GameOver
}
}
只写了问题相关的,希望对你有帮助。
还要有个 “点击数字方格时,判断周围8个方格标记地雷数量与数字是否相同,相同打开未标记地雷的方块” 的方法。
方格类的思路应该是
class fangGe{
//标记是数字空白还是地雷
int type;
void daKai (){
//判断是否已经打开
//判断类型
//如果是空白 循环周围8个方格 调用其打开方法
//如果是数字,打开自己
//如果是地雷GameOver
}
}
只写了问题相关的,希望对你有帮助。
展开全部
在扫雷游戏中,如何实现使Field处于打开状态。如果它是地雷,打开所有Field;如果它不是地雷,并且它四周也没有地雷,将其四周Field也打开。
//雷的数目如果是0,可以打开当前Field四周的Field
if (getField(x, y).getMineValue() == 0) {
List<Field> arroundList = getAround(x, y);
for (Field field : arroundList) {
//递归调用open方法,
open(field.getX(), field.getY());
}
}
Open方法指的就是你指定的打开方法,这里通过0或者数字1来定义是否为雷,如果是1则是
雷。希望能提示到你。主要就是使用到啦增强型for循环
//雷的数目如果是0,可以打开当前Field四周的Field
if (getField(x, y).getMineValue() == 0) {
List<Field> arroundList = getAround(x, y);
for (Field field : arroundList) {
//递归调用open方法,
open(field.getX(), field.getY());
}
}
Open方法指的就是你指定的打开方法,这里通过0或者数字1来定义是否为雷,如果是1则是
雷。希望能提示到你。主要就是使用到啦增强型for循环
追问
我写了一下,但是总是朝一个方向判断,打开的总是一个方向的空格子,还报错啊。
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at sun.nio.cs.ext.DoubleByte$Encoder.encodeArrayLoop(DoubleByte.java:475)
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询