本文目錄一覽:
- 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;
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/200553.html