本文目录一览:
- 1、js实现网页版扫雷,新手,如何实现除显示当周边无雷时将周边的无雷区全部显示出来。
- 2、js编写扫雷中,用for(i
- 3、扫雷点到空格时的算法 跪求
- 4、求高手帮忙一个“扫雷”游戏的JAVA的程序代码
js实现网页版扫雷,新手,如何实现除显示当周边无雷时将周边的无雷区全部显示出来。
用递归啊。你肯定已经做了一个方法用来检测当前点周边8个点是否无雷了吧?对于无雷的点逐个再次调用该方法。
以下是伪码示例. isBad是用来检测指定的点是否是雷的方法
function checkRimPoint(x, y) {
var points = [[x-1,y-1],[x,y-1],[x+1,y-1],[x-1,y],[x+1,y],[x-1,y+1],[x,y+1],[x+1,y+1];
for(var i = 0; i points.length; i++) {
if (! isBad(points[i][0], points[i][1])) {
showPoint(points[i][0], points[i][1]));//这个不是雷,调用方法显示这个点
checkRimPoint(points[i][0], points[i][1])); //对该点递归处理
}
}
}
以上只是个思路,没有实际价值哦,我记得展开后的效果一种可能是到边界了,另一种可能就是显示周围有几个雷的那种数字框。不过核心就是递归处理。
如果有帮助的话望采纳
js编写扫雷中,用for(i
for(var i=0;i100;i++){
odivs[j].indexs = i;
if(odivs[j].attri=='default')
odivs[j].onclick= function(){
this.style.background='#fff';
rec(odivs[j].indexs+1);
}
else
if(odivs[j].attri!='mine')
{
odivs[j].onclick=function(){
this.innerHTML=this.attri;
this.style.background='#fff';
}
}
}
扫雷点到空格时的算法 跪求
从手工点开的这个空格进行处理,按上右下左或你自己定义的一个顺序来判断相应位置的格式是否是空格且未被点开,如果不是,则跳过,如果是,则将其自动点开,同时把这几个位置加入队列后续处理。
简单的流程图示意:
当前位置是空白位置?----否--- 非空白的处理
|
| 是
|
V
加入队列
|
V
+---队列为空?--------是--- 结束
| |
| |否
| |
| V
| 第一个元素出队
| |
| V
| 点开该元素所指的位置
| |
| V
| 上左下右的位置如果是空白且未点开则入队
| |
--------+
上面是非递归的方案,递归方案则更容易了:
伪代码算法描述如下:
Click(pos) // 点开 pos 这个位置
{
// IsClicked() 判断是否是已经点开的格子
if (IsClicked(pos))
return;
// IsBlank() 判断是否是空白格子
if (! IsBlank(pos))
{
点开非空白格子的处理
}
// 下面是点开空白格子的处理
ClickBlank(pos);
}
ClickBlank(pos)
{
if (! IsBlank(pos))
rerurn;
if (IsClicked(pos))
return;
// 下面对四个方向的格子进行自动点开
// 你需要计算四向的格子位置,无效的直接返回
ClickBlank(pos上面的格子);
ClickBlank(pos右面的格子);
ClickBlank(pos下面的格子);
ClickBlank(pos左面的格子);
}
求高手帮忙一个“扫雷”游戏的JAVA的程序代码
import javax.swing.ImageIcon; //程序入口
public class Block {
String name; //名字,比如"雷"或数字
int aroundMineNumber; //周围雷的数目
ImageIcon mineIcon; //雷的图标
boolean isMine=false; //是否是雷
boolean isMark=false; //是否被标记
boolean isOpen=false; //是否被挖开
public void setName(String name) {
this.name=name;
}
//设置周围的雷数
public void setAroundMineNumber(int n) {
aroundMineNumber=n;
}
//获得周围的雷数
public int getAroundMineNumber() {
return aroundMineNumber;
}
public String getName() {
return name;
}
//判断是否是雷
public boolean isMine() {
return isMine;
}
//设置是否为雷
public void setIsMine(boolean b) {
isMine=b;
}
//设置雷的图标
public void setMineIcon(ImageIcon icon){
mineIcon=icon;
}
//获得雷的图标
public ImageIcon getMineicon(){
return mineIcon;
}
//确定雷是否被挖开
public boolean getIsOpen() {
return isOpen;
}
//设置为已经被挖开
public void setIsOpen(boolean p) {
isOpen=p;
}
//返回此处是否已经被标记
public boolean getIsMark() {
return isMark;
}
//设置此处是否已经被标记
public void setIsMark(boolean m) {
isMark=m;
}
import javax.swing.*;
import java.awt.*;
public class BlockView extends JPanel{
JLabel blockNameOrIcon; //用来显示Block对象的name、number和mineIcon属性
JButton blockCover; //用来遮挡blockNameOrIcon.
CardLayout card; //卡片式布局
BlockView(){
card=new CardLayout();
setLayout(card);
blockNameOrIcon=new JLabel("",JLabel.CENTER);
blockNameOrIcon.setHorizontalTextPosition(AbstractButton.CENTER);
blockNameOrIcon.setVerticalTextPosition(AbstractButton.CENTER);
blockCover=new JButton();
add("cover",blockCover);
add("view",blockNameOrIcon);
}
//给出视觉效果变化
public void giveView(Block block){
// 如果是雷,将对应的图标和文字更改
if(block.isMine){
blockNameOrIcon.setText(block.getName());
blockNameOrIcon.setIcon(block.getMineicon());
}
else {
int n=block.getAroundMineNumber();
if(n=1)
blockNameOrIcon.setText(""+n);
else
blockNameOrIcon.setText(" ");
}
}
public void seeBlockNameOrIcon(){
card.show(this,"view");
validate();
}
public void seeBlockCover(){
card.show(this,"cover");
validate();
}
public JButton getBlockCover(){
return blockCover;
}
}