WGWG

WGWG

0个粉丝

13

问答

0

专栏

6

资料

WGWG  发布于  2008-08-02 00:21:25
采纳率 0%
13个问答
4188

简单的扫雷的代码

 
Mini Minesweeper is a simple game in which a user clicks on a square to determ
ine if there is a bomb underneath. If there is, the game is over. If there is
not, they continue clicking until either they find the bomb or all squares (ex
cluding the bomb) have been clicked on.
Write a simple application called MiniMineSweeper that implements this simple
game and creates the GUI.
The application should have the following behaviour:
• At the beginning (and only at the beginning!) of the program the follo
wing dialog should be displayed to the user:
On initialisation, the application should randomly choose where the bomb is lo
cated.
• A square is grey if it has not been clicked on. When a grey square is
clicked, it will:
o Change to white if there is no bomb there.
o Change to black if there is a bomb there.
• The game terminates when only one square is left (and it is the bomb s
quare) or the last  square clicked was the bomb. You should inform the user as
to whether or not they have won and ask them if they wish to play again. The
user playing the game in Figure 1 has lost.

上面是要求,一些图片没有弄出来,麻烦,呵呵。
现在简单介绍下如何做的。
先要做一个GUI 。继承JFrame,这样我们就可以显示一个GUI。
我们要生成一个随机种子,用以确定雷点。这里为了简单,我们只有9个方块,其中一个是
雷点。我们用random生成一个值就可以了。
要生成9个按钮,3×3形式的。用GridLayout 方式排列就可以了。
还要监听按钮被触动的事件,如何确定哪个已经被扫过了呢,哪个没有被扫过呢?
哪个是雷呢?
我们可以设置每个按钮的名字就是按钮号,这样我们点了那个按钮,就可以判断出是不是
雷,设置按钮的状态Enabled =false;就可以了。
消息对话框我们可以用JOptionPane.showConfirmDialog,设置就可以了。
大概重要的东西就是上面,我下面贴出了源代码,代码写的有些不规范。呵呵。[code]package com.mine;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;

import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class MainFrame extends JFrame {

        /**
         *
         */
        private static final long serialVersionUID = 1L;

        private JButton jbtn[];//按钮

        private int randmValue;//生成的随机值

        private static int clickCount = 1;//点击次数

        private static int Count = 3*3;//sequare的个数
        private JPanel contentPanel;//显示面板
        /**
         *  设置界面
         *
         */
       
        public MainFrame() {
                this.setTitle("Boom!");
                this.setSize(400, 200);
                this.setLocation(400, 300);
                initFrame();
                this.setVisible(true);
                MessageDiag();
                this.addWindowListener(new WindowAdapter() {
                        public void windowClosed(WindowEvent e) {
                                System.exit(0);
                        }
                        public void windowClosing(WindowEvent e){
                                e.getWindow().dispose();
                        }
                });
        }
        /**
         * 生成一个随机的炸弹的位置1-9
         * @param rand
         * @return
         */
        public int getRandom(int rand) {
                int irand = 0;
                Random randm = new Random();
                irand = randm.nextInt(rand);
                System.out.println(irand + 1);
                return irand+1;
        }
        /**
         * 创建按钮
         * @param count
         */
        public void createJbtn(int count) {
                jbtn = new JButton[count];
                for (int i = 0; i < count; i++) {
                        jbtn = new JButton();
                        jbtn.setName(String.valueOf(i + 1));
                        jbtn.setBackground(Color.gray);
                        jbtn.addActionListener(new ActionListener() {
                                public void actionPerformed(ActionEvent ae) {
                                        String msg;
                                        JButton temp = (JButton) ae.getSource();
                                        int name = Integer.parseInt(temp.getName());
                                        if (clickCount < Count - 1) {
                                                if (name != randmValue) {
                                                        temp.setBackground(Color.white);
                                                        temp.setEnabled(false);
                                                } else {
                                                        temp.setBackground(Color.black);
                                                        temp.setEnabled(false);
                                                                                        msg="BOOooM!!!";
                                                        int iselect = replayYes_No(msg);
                                                        if (iselect == 0) {
                                                                resetValue(true);
                                                        } else{
                                                                resetValue(false);
                                                        }
                                                }
                                        } else if (clickCount == Count - 1) {
                                                temp.setBackground(Color.white);
                                                msg="congratulation";
                                                int iselect = replayYes_No(msg);
                                                if (iselect == 0) {
                                                        resetValue(true);
                                                } else{
                                                        resetValue(false);
                                                }
                                        }
                                        clickCount++;
                                }
                        });
                }
        }
        /**
         * 重玩的时候,
         * 重新设置按钮
         *
         */
        public void resetValue(boolean bool) {
                for (int i = 0; i < Count; i++) {
                        jbtn.setBackground(Color.gray);
                        jbtn.setEnabled(bool);
                }
                clickCount = 0;
                randmValue = this.getRandom(Count);
        }
        /**
         * 显示初始信息的对话框
         *
         */
        public void MessageDiag() {
                String str = "Welcome to Mini-MiniSweeper.\r\n"
                                + "The object of the game is to click on all\r\n"
                                + " the squares Except the one with the bomb.\r\n"
                                + "(There is only one bomb).To choose a square\r\n"
                                + " to display please click on the sequare.\r\n";
                JOptionPane.showMessageDialog(this, str, "information",
                                JOptionPane.INFORMATION_MESSAGE);
        }

        /**
         * 重新玩的显示对话框
         *
         * @param msg
         * @return
         */
        public int replayYes_No(String msg ) {
                int iselect = JOptionPane.showConfirmDialog(null,
                                msg+" Would you play again!", "重新玩?",
                                JOptionPane.YES_NO_OPTION);
                return iselect;
        }
        /**
         *初始界面
         *
         */
        public void initFrame() {
                contentPanel = new JPanel(new GridLayout(3, 3));
                randmValue = this.getRandom(Count);
                createJbtn(Count);
                for (int i = 0; i < Count; i++) {
                        contentPanel.add(jbtn);
                }
                this.setContentPane(contentPanel);
        }
        /**
         * 主函数
         * @param args
         */
        public static void main(String args[]) {
                new MainFrame();
        }
}[/code]
我来回答
回答0个
时间排序
认可量排序
易百纳技术社区暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区