js版掃雷實現代碼原理不錯,js 掃雷

本文目錄一覽:

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-05 20:01
下一篇 2024-12-05 20:01

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在着手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python實現簡易心形代碼

    在這個文章中,我們將會介紹如何用Python語言編寫一個非常簡單的代碼來生成一個心形圖案。我們將會從安裝Python開始介紹,逐步深入了解如何實現這一任務。 一、安裝Python …

    編程 2025-04-29
  • Harris角點檢測算法原理與實現

    本文將從多個方面對Harris角點檢測算法進行詳細的闡述,包括算法原理、實現步驟、代碼實現等。 一、Harris角點檢測算法原理 Harris角點檢測算法是一種經典的計算機視覺算法…

    編程 2025-04-29
  • 怎麼寫不影響Python運行的長段代碼

    在Python編程的過程中,我們不可避免地需要編寫一些長段代碼,包括函數、類、複雜的控制語句等等。在編寫這些代碼時,我們需要考慮代碼可讀性、易用性以及對Python運行性能的影響。…

    編程 2025-04-29

發表回復

登錄後才能評論