win10里怎么玩扫雷

win10里怎么玩扫雷,第1张

在win10系统的应用商城下载好“扫雷”程序,然后即可打开程序玩扫雷。具体 *** 作请参照以下步骤。

1、在win10系统中使用快捷键win+Q启动搜索框,在搜索框内输入store来打开应用商城。

2、在出现界面的搜索框中输入minesweeper,找到“Microsoft minesweeper”图标进行点击。

3、点击获取,商店将进行下载安装,安装完成后会显示开始按钮。

4、在开始菜单的搜索框输入minesweeper,选中扫雷程序后右击鼠标,在右键菜单中选择“固定到开始屏幕”选项点击。

5、完成以上设置后,就可直接在开始菜单中点击“扫雷”图标进行游戏了。

普通版本WINDOS扫雷程序是将布雷和扫雷结合

扫雷程序思想讲解

在我大二的时候就编写了一个扫雷程序,现在也有很多

源程序下载,我不知道他们的算法是怎么样的,但我想我的

算法应是最清晰和简单的。下面就来讲解我的扫雷程序思想。

首先我们在雷区上随机地放上雷,没有雷的地方被点击

后就会显示一个数字表示它周围有几个雷,这是怎么实现的

呢?我们可以把整个雷区看成一个二维数组a[i,j],如雷区:

11 12 13 14 15 16 17 18

21 22 23 24 25 26 27 28

31 32 33 34 35 36 37 38

41 42 43 44 45 46 47 48

51 52 53 54 55 56 57 58

我要知道a[34]周围有几个雷,就只有去检测

a[23],a[24],a[25]

a[33], a[35]

a[43],a[44],a[45]

这8个雷区是否放上了雷,仔细观察它们成在数学关系。

抽象出来就是:a[i,j]的雷的个数就是由

a[i-1,j-1],a[i-1,j],a[i-1,j+1]

a[ i ,j-1], a[ i ,j+1]

a[i+1,j-1],a[i+1,j],a[i+1,j+1]

(如果超出边界再加以判断)

这样的8个雷区决定的。

扫雷程序还会自动展开已确定没有雷的雷区。如果

a[3,4]周围雷数为1,a[2,3]已被标示为地雷,那么

a[24],a[25],a[33],a[35],a[43],a[44],a[45]

将被展开,一直波及到不可确定的雷区。这也是实现的

关键。我们可以把数组的元素设定为一个类对象,它们

所属的类

因此普通版本WINDOS扫雷程序是将布雷和扫雷结合的

第一个JAVA文件

import javax.swing.*

import java.awt.*

import java.awt.event.*

/**

* 显示所有按钮的面板

* @author Administrator

*

*/

public class AllButtonPanel extends JPanel implements ActionListener{

private int row//行数

private int col//列数

private int mineCount//地雷数

private MineButton[][] allButtons//所有按钮

public AllButtonPanel(int row,int col,int mineCount){

this.row=row

this.col=col

this.mineCount=mineCount

allButtons=new MineButton[row][col]

createButtons()

createMine()

init()

}

private void init(){

this.setLayout(new GridLayout(row,col))

for(int i=0i<allButtons.lengthi++){

for(int j=0j<allButtons[i].lengthj++){

this.add(allButtons[i][j])

}

}

}

/**

* 随机布雷的方法

*

*/

private void createMine(){

int n=0

while(n<mineCount){//随机生成mineCount个地雷

int i=(int)(Math.random()*row)

int j=(int)(Math.random()*col)

if(allButtons[i][j].getCountOfSurroundMines()!=-1){

allButtons[i][j].setCountOfSurroundMines(-1)

n++

}

}

for(int i=0i<allButtons.lengthi++){//计算每个位置的周围地雷数

for(int j=0j<allButtons[i].lengthj++){

if(allButtons[i][j].getCountOfSurroundMines()!=-1){

allButtons[i][j].setCountOfSurroundMines(getSurroundMineCount(i,j))

}

}

}

}

/**

* 统计(i,j)坐标周围8个位置的地雷数

* @param data

* @param i

* @param j

* @return

*/

private int getSurroundMineCount(int i,int j){

int num=0//统计周围的雷数

if(i-1>=0&&j-1>=0){

num+=(allButtons[i-1][j-1].getCountOfSurroundMines()==-1?1:0)

}

if(i-1>=0){

num+=(allButtons[i-1][j].getCountOfSurroundMines()==-1?1:0)

}

if(i-1>=0&&j+1<allButtons[0].length){

num+=(allButtons[i-1][j+1].getCountOfSurroundMines()==-1?1:0)

}

if(j-1>=0){

num+=(allButtons[i][j-1].getCountOfSurroundMines()==-1?1:0)

}

if(j+1<allButtons[0].length){

num+=(allButtons[i][j+1].getCountOfSurroundMines()==-1?1:0)

}

if(i+1<allButtons.length&&j-1>=0){

num+=(allButtons[i+1][j-1].getCountOfSurroundMines()==-1?1:0)

}

if(i+1<allButtons.length){

num+=(allButtons[i+1][j].getCountOfSurroundMines()==-1?1:0)

}

if(i+1<allButtons.length&&j+1<allButtons[0].length){

num+=(allButtons[i+1][j+1].getCountOfSurroundMines()==-1?1:0)

}

return num

}

/**

* 生成按钮

*

*/

private void createButtons(){

for(int i=0i<allButtons.lengthi++){

for(int j=0j<allButtons[i].lengthj++){

allButtons[i][j]=new MineButton(i,j)

allButtons[i][j].setSize(6,6)

allButtons[i][j].addActionListener(this)//添加点击事件监听

allButtons[i][j].addMouseListener(new MouseAdapter(){//添加鼠标右键事件监听

public void mouseClicked(MouseEvent e) {

if(e.getButton()==MouseEvent.BUTTON3){

int remain=Integer.parseInt(CleanMine.remainMine.getText())

JButton b=(JButton)e.getSource()

if(b.getText().equals("")){

remain--

CleanMine.remainMine.setText(remain+"")

b.setText("&")

}else if(b.getText().equals("&")){

remain++

CleanMine.remainMine.setText(remain+"")

b.setText("")

}

}

}

})

}

}

}

public void actionPerformed(ActionEvent e) {//点击事件监听的方法

MineButton b=(MineButton)e.getSource()

int r=b.getRow()

int c=b.getCol()

if(allButtons[r][c].getCountOfSurroundMines()==-1){//如果是地雷

for(int i=0i<allButtons.lengthi++){//把所有按钮都显示出来

for(int j=0j<allButtons[i].lengthj++){

if(allButtons[i][j].getCountOfSurroundMines()==-1){//如果该位置是地雷

allButtons[i][j].setText("$")

}else if(allButtons[i][j].getCountOfSurroundMines()==0){//如果该位置为空(该位置不是地雷,周围8个位置也没有地雷)

allButtons[i][j].setText("")

allButtons[i][j].setBackground(Color.CYAN)

}else{//如果该位置不是地雷,但周围8个位置中有地雷

allButtons[i][j].setText(allButtons[i][j].getCountOfSurroundMines()+"")

allButtons[i][j].setBackground(Color.CYAN)

}

}

}

}else{//如果不是地雷

showEmpty(r,c)//执行排空 *** 作

}

}

/**

* 排空方法,若(i,j)位置为空,则显示空白。然后依次递归找它周围的8个位置。

* @param data

* @param i

* @param j

*/

private void showEmpty(int i,int j){

MineButton b=allButtons[i][j]

if(b.isCleared()){

return

}

if(allButtons[i][j].getCountOfSurroundMines()==0){

b.setBackground(Color.CYAN)

b.setCleared(true)

if(i-1>=0&&j-1>=0){

showEmpty(i-1,j-1)

}

if(i-1>=0){

showEmpty(i-1,j)

}

if(i-1>=0&&j+1<allButtons[0].length){

showEmpty(i-1,j+1)

}

if(j-1>=0){

showEmpty(i,j-1)

}

if(j+1<allButtons[0].length){

showEmpty(i,j+1)

}

if(i+1<allButtons.length&&j-1>=0){

showEmpty(i+1,j-1)

}

if(i+1<allButtons.length){

showEmpty(i+1,j)

}

if(i+1<allButtons.length&&j+1<allButtons[0].length){

showEmpty(i+1,j+1)

}

}else if(allButtons[i][j].getCountOfSurroundMines()>0){

b.setText(allButtons[i][j].getCountOfSurroundMines()+"")

b.setBackground(Color.CYAN)

b.setCleared(true)

}

}

}

第二个JAVA文件

import javax.swing.*

import java.awt.*

import java.awt.event.*

/**

* 扫雷游戏主界面

* @author tony.tang

*

*/

public class CleanMine extends JFrame implements ActionListener{

private JLabel text1,text2

public static JLabel remainMine//剩余地雷数

private JLabel time//消耗时间

private JButton reset//重新开始

private JPanel center

private int row,col,mine

public CleanMine(){

text1=new JLabel("剩余地雷:")

text2=new JLabel("消耗时间:")

remainMine=new JLabel("10")

time=new JLabel("0")

reset=new JButton("重新开始")

reset.addActionListener(this)

JMenuBar bar=new JMenuBar()

JMenu game=new JMenu("游戏")

JMenu help=new JMenu("帮助")

JMenuItem item

game.add(item=new JMenuItem("开局"))item.addActionListener(this)

game.addSeparator()

ButtonGroup bg=new ButtonGroup()

game.add(item=new JCheckBoxMenuItem("初级",true))bg.add(item)item.addActionListener(this)

game.add(item=new JCheckBoxMenuItem("中级"))bg.add(item)item.addActionListener(this)

game.add(item=new JCheckBoxMenuItem("高级"))bg.add(item)item.addActionListener(this)

game.add(item=new JCheckBoxMenuItem("自定义..."))bg.add(item)item.addActionListener(this)

game.addSeparator()

game.add(item=new JMenuItem("退出"))item.addActionListener(this)

help.add(item=new JMenuItem("查看帮助"))item.addActionListener(this)

help.add(item=new JMenuItem("关于扫雷..."))item.addActionListener(this)

bar.add(game)

bar.add(help)

this.setJMenuBar(bar)

init()

}

private void init(){

JPanel north=new JPanel()

north.add(text1)

north.add(remainMine)

north.add(reset)

north.add(text2)

north.add(time)

this.add(north,BorderLayout.NORTH)

this.row=9

this.col=9

this.mine=10

restart()

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

new Thread(){

public void run(){

while(Integer.parseInt(remainMine.getText())>0){

try {

Thread.sleep(1000)

} catch (InterruptedException e) {

e.printStackTrace()

}

time.setText((Integer.parseInt(time.getText())+1)+"")

}

}

}.start()

}

public void actionPerformed(ActionEvent e) {

if(e.getActionCommand().equals("初级")){

this.row=9

this.col=9

this.mine=10

restart()

return

}

if(e.getActionCommand().equals("中级")){

this.row=16

this.col=16

this.mine=40

restart()

return

}

if(e.getActionCommand().equals("高级")){

this.row=16

this.col=30

this.mine=99

restart()

return

}

if(e.getActionCommand().equals("重新开始")){

restart()

return

}

}

private void restart(){

if(center!=null){

this.remove(center)

}

center=new AllButtonPanel(row,col,mine)

this.add(center,BorderLayout.CENTER)

this.remainMine.setText(mine+"")

this.time.setText("0")

this.setSize(col*30,row*30+10)

this.setResizable(false)

this.setVisible(true)

}

/**

* @param args

*/

public static void main(String[] args) {

new CleanMine()

}

}

第三个JAVA文件.

import javax.swing.JButton

import java.awt.*

public class MineButton extends JButton {

private int row

private int col

private boolean cleared=false

private int countOfSurroundMines//周围地雷数,如果本按钮是雷,则为-1;

public MineButton(int row,int col){

this.row=row

this.col=col

this.setMargin(new Insets(0,0,0,0))

}

public int getCol() {

return col

}

public int getRow() {

return row

}

public boolean isCleared() {

return cleared

}

public void setCleared(boolean cleared) {

this.cleared = cleared

}

public int getCountOfSurroundMines() {

return countOfSurroundMines

}

public void setCountOfSurroundMines(int countOfSurroundMines) {

this.countOfSurroundMines = countOfSurroundMines

}

}

全部编译以后就可以执行了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11868629.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存