⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blockview.java

📁 windows自带的扫雷游戏
💻 JAVA
字号:
package mine.view;

import java.util.*;
import java.awt.event.*;
import mine.listener.*;
import mine.model.*;
//问题修正说明
//在发布javamine 1。0时,该类从JLabel 继承只为了使用setIcon,造成打开大幅画面缓慢
//性能的瓶颈在于jlable太大了,而不仅在于我使用了递归算法
public class BlockView
    extends ImagePanel
    implements Observer {
    private int xx; //提供此参数是因为当没有M 时仍可以创建视图
    private int yy;
    private boolean mousebutton1 = false; //为了测试鼠标事件
    private boolean mousebutton2 = false;
    private boolean mousebuttonPress1 = false;
    private boolean mousebuttonPress2 = false;
    private boolean mousebuttonRelease1=false;
    private boolean mousebuttonRelease2=false;
    public static final int blocksize = 16;
    private Set gameMouselistenerS = new HashSet();
    private ImageFactory imageFactory = ImageFactory.getInstance();
    private BlockModel blockModel;
    public int getBlockSize() {
        return blocksize;
    }

    public BlockView(BlockModel block) {
        super();
        this.blockModel = block;
        xx = block.getXPos();
        yy = block.getYPos();
        baseinit(xx, yy);
        mouseListenerinit();

    }

    public BlockView(int x, int y) {
        super();
        xx = x;
        yy = y;
        baseinit(xx, yy);
        mouseListenerinit();
    }

    public void update(Observable observable, Object object) {

        if (blockModel.isOpened()) { //开启
            openblock();
            blockModel.setOpened(true);
        }
        else {
            if (blockModel.getMark() == BlockModel.UnopenMark) {
                if (blockModel.isdown()) {
                    this.setIcon(imageFactory.getImageicon(0));
                }
                else {
                    this.setIcon(imageFactory.getImageicon(BlockModel.
                        UnopenMark));
                }
            }
            else {
                this.setIcon(imageFactory.getImageicon(blockModel.getMark()));
            }
        }
    }

    private void openblock() {
        if (blockModel.isMine()) { //是雷?
            if (blockModel.isOnmine()) {
                this.setIcon(imageFactory.getImageicon(12)); //踩雷了;
            }
            else {
                this.setIcon(imageFactory.getImageicon(11)); //正常雷的显示
            }
        }
        else { //是数字
            if (blockModel.isWrongMineOpinion()) {
                this.setIcon(imageFactory.getImageicon(15)); //错误判断;
            }
            else {
                this.setIcon(imageFactory.getImageicon(blockModel.getNumber()));
            }
        }
    }

    public void setModel(BlockModel bm) {
        blockModel = bm;
        bm.addObserver(this);

    }

    public void removeModel() {
        blockModel.deleteObserver(this);
        blockModel = null;

    }

    private void baseinit(int xx, int yy) {
        this.setIcon(imageFactory.getImageicon(9));
//        this.setBorder(BorderFactory.createRaisedBevelBorder());
        this.setBounds(xx * blocksize, yy * blocksize, blocksize, blocksize);
    }

    private void notifyMouseEvent(GameMouseEvent gme) {
        if (gameMouselistenerS.size() != 0) {
            Iterator it = gameMouselistenerS.iterator();
            while (it.hasNext()) {
                GameMouseListener gml = (GameMouseListener) it.
                    next();
                gml.processGameEvent(gme);
            }
        }
    }

    private void mouseListenerinit() {
        this.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent mouseEvent) {
                if(blockModel!=null&&mouseEvent.getButton() == MouseEvent.BUTTON1){
                    blockModel.setdown(true);
                }
                if (mouseEvent.getButton() == MouseEvent.BUTTON1) {
                    BlockView.this.mousebutton1 = true;
                    BlockView.this.mousebuttonPress1 = true;
                    notifyMouseEvent(new GameMouseEvent(
                        BlockView.this.xx, BlockView.this.yy,
                        GameMouseEvent.LeftPress));
                }
                if (mouseEvent.getButton() == MouseEvent.BUTTON3) {
                    BlockView.this.mousebutton2 = true;
                    BlockView.this.mousebuttonPress2 = true;
                }
                if( BlockView.this.mousebuttonPress1 && BlockView.this.mousebuttonPress2){
                    notifyMouseEvent(new GameMouseEvent(
                           BlockView.this.xx, BlockView.this.yy,
                           GameMouseEvent.LRPress));

                }

            }

            public void mouseReleased(MouseEvent mouseEvent) {

                if(blockModel!=null&&mouseEvent.getButton() == MouseEvent.BUTTON1){
                    blockModel.setdown(false);
                }
                if(mouseEvent.getButton()==MouseEvent.BUTTON1){
                    mousebuttonRelease1=true;
                    notifyMouseEvent(new GameMouseEvent(
                               BlockView.this.xx, BlockView.this.yy,
                               GameMouseEvent.leftRealse));

                }
                if(mouseEvent.getButton()==mouseEvent.BUTTON3){
                    mousebuttonRelease2=true;
                }
                if(mousebuttonPress1&&mousebuttonPress2&&mousebuttonRelease1&&mousebuttonRelease2){
                    notifyMouseEvent(new GameMouseEvent(
                                BlockView.this.xx, BlockView.this.yy,
                                GameMouseEvent.LRRelease));
                    mousebuttonPress1=false;
                    mousebuttonPress2=false;
                    mousebuttonRelease1=false;
                    mousebuttonRelease2=false;

                }



                if (mouseEvent.getX() >= 0 &&
                    mouseEvent.getX() <= BlockView.this.getWidth() &&
                    mouseEvent.getY() >= 0 &&
                    mouseEvent.getY() <= BlockView.this.getHeight()
                    ) {
                    if (BlockView.this.mousebutton1 == true &&
                        BlockView.this.mousebutton2 == true) {
                        notifyMouseEvent(new GameMouseEvent(
                            BlockView.this.xx, BlockView.this.yy,
                            GameMouseEvent.LRClick));
                        //左右双击
                    }
                    else if (BlockView.this.mousebutton1 == true) {
                        notifyMouseEvent(new GameMouseEvent(
                            BlockView.this.xx, BlockView.this.yy,
                            GameMouseEvent.LeftClick));
                    }
                    //左

                else if (BlockView.this.mousebutton2 == true) {
                    notifyMouseEvent(new GameMouseEvent(
                        BlockView.this.xx, BlockView.this.yy,
                        GameMouseEvent.RightClick)); //右
                }}
                BlockView.this.mousebutton2 = false;
                BlockView.this.mousebutton1 = false;
            }
        });

    }

    public Set getGameMouselistener() {
        return gameMouselistenerS;
    }

    public void addGameMouseListener(GameMouseListener gameMouselistener) {
        gameMouselistenerS.add(gameMouselistener);
    }

    public void removeGameMouseListener(GameMouseListener gameMouselistener) {
        gameMouselistenerS.remove(gameMouselistener);
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -