亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? unlinkfishcanvas.java

?? 深入java 虛擬機中的一個Java程序
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:
/*
* Copyright (c) 1996, 1997 Bill Venners. All Rights Reserved.
*
* This Java source file is part of the Interactive Illustrations Web
* Site, which is delivered in the applets directory of the CD-ROM
* that accompanies the book "Inside the Java Virtual Machine" by Bill
* Venners, published by McGraw-Hill, 1997,ISBN: 0-07-913248-0. This
* source file is provided for evaluation purposes only, but you can
* redistribute it under certain conditions, described in the full
* copyright notice below.
*
* Full Copyright Notice:
*
* All the web pages and Java applets delivered in the applets
* directory of the CD-ROM, consisting of ".html," ".gif," ".class,"
* and ".java" files, are copyrighted (c) 1996, 1997 by Bill
* Venners, and all rights are reserved.  This material may be copied
* and placed on any commercial or non-commercial web server on any
* network (including the internet) provided that the following
* guidelines are followed:
*
* a. All the web pages and Java Applets (".html," ".gif," ".class,"
* and ".java" files), including the source code, that are delivered
* in the applets directory of the CD-ROM that
* accompanies the book must be published together on the same web
* site.
*
* b. All the web pages and Java Applets (".html," ".gif," ".class,"
* and ".java" files) must be published "as is" and may not be altered
* in any way.
*
* c. All use and access to this web site must be free, and no fees
* can be charged to view these materials, unless express written
* permission is obtained from Bill Venners.
*
* d. The web pages and Java Applets may not be distributed on any
* media, other than a web server on a network, and may not accompany
* any book or publication.
*
* BILL VENNERS MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE
* SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING
* BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR PARTICULAR PURPOSE, OR NON-INFRINGEMENT.  BILL VENNERS
* SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY A LICENSEE AS A
* RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
* DERIVATIVES.
*/
import java.awt.*;

/**
* This class is the canvas that displays the user interface
* during the unlink fish sub-mode of the assign references mode.
* This class contains the code that handles the collision detection
* and clicking that unlinks fish.
*
* @author  Bill Venners
*/
public class UnlinkFishCanvas extends AssignReferencesCanvas {

    private boolean iconClicked = false;
    private boolean overYellowLocalVarLine = false;
    private boolean overBlueLocalVarLine = false;
    private boolean overRedLocalVarLine = false;
    private boolean overInterFishLine = false;

    private Point interFishLineStart;
    private Point interFishLineEnd;
    private int interFishRefToClear;
    private Color interFishLineColor;

    private Point posOfMouseInsideIconWhenFirstPressed = new Point(0, 0);
    private int objectIndexOfFishIconThatWasClicked;

    private boolean dragging = false;
    private Point currentMouseDragPosition = new Point(0, 0);
    private boolean mouseIsOverAnIconThatCanBeDroppedUpon = false;
    private int objectIndexOfIconThatCanBeDroppedUpon;

    private Color colorOfUnlinkableLine = Color.black;

    private final int extraZeros = 1000;

    // mouseFatness is the number of pixels around the mouse which will form the rectangle
    // that a line must cross for it to be unlinked.
    private int mouseFatness = 3;

    UnlinkFishCanvas(GCHeap heap, LocalVariables locVars, HeapOfFishTextArea ta) {
        gcHeap = heap;
        localVars = locVars;
        controlPanelTextArea = ta;
    }

    public Dimension minimumSize() {
        return new Dimension(500, 240);
    }

    public Dimension preferredSize() {
        return new Dimension(500, 240);
    }

    public boolean mouseDrag(Event evt, int x, int y) {
        return mouseMove(evt, x, y);
    }

    public boolean mouseMove(Event evt, int x, int y) {

        if (overYellowLocalVarLine) {
            if (mouseOverLine(x, y, localVars.yellowLineStart, localVars.yellowLineEnd)) {
                return true;
            }
            Graphics g = getGraphics();
            g.setColor(Color.yellow);
            g.drawLine(localVars.yellowLineStart.x, localVars.yellowLineStart.y,
                localVars.yellowLineEnd.x, localVars.yellowLineEnd.y);
            overYellowLocalVarLine = false;
        }

        if (overBlueLocalVarLine) {
            if (mouseOverLine(x, y, localVars.blueLineStart, localVars.blueLineEnd)) {
                return true;
            }
            Graphics g = getGraphics();
            g.setColor(Color.cyan);
            g.drawLine(localVars.blueLineStart.x, localVars.blueLineStart.y,
                localVars.blueLineEnd.x, localVars.blueLineEnd.y);
            overBlueLocalVarLine = false;
        }

        if (overRedLocalVarLine) {
            if (mouseOverLine(x, y, localVars.redLineStart, localVars.redLineEnd)) {
                return true;
            }
            Graphics g = getGraphics();
            g.setColor(Color.red);
            g.drawLine(localVars.redLineStart.x, localVars.redLineStart.y,
                localVars.redLineEnd.x, localVars.redLineEnd.y);
            overRedLocalVarLine = false;
        }

        if (overInterFishLine) {
            if (mouseOverLine(x, y, interFishLineStart, interFishLineEnd)) {
                return true;
            }
            Graphics g = getGraphics();
            g.setColor(interFishLineColor);
            g.drawLine(interFishLineStart.x, interFishLineStart.y,
                interFishLineEnd.x, interFishLineEnd.y);
            overInterFishLine = false;
        }

        // Now see if the mouse is over a new line.
        if (localVars.yellowFish != 0) {
            if (mouseOverLine(x, y, localVars.yellowLineStart, localVars.yellowLineEnd)) {
                Graphics g = getGraphics();
                g.setColor(Color.yellow);
                g.setXORMode(colorOfUnlinkableLine);
                g.drawLine(localVars.yellowLineStart.x, localVars.yellowLineStart.y,
                    localVars.yellowLineEnd.x, localVars.yellowLineEnd.y);
                g.setPaintMode();
                overYellowLocalVarLine = true;
                return true;
            }
        }

        if (localVars.blueFish != 0) {
            if (mouseOverLine(x, y, localVars.blueLineStart, localVars.blueLineEnd)) {
                Graphics g = getGraphics();
                g.setColor(Color.cyan);
                g.setXORMode(colorOfUnlinkableLine);
                g.drawLine(localVars.blueLineStart.x, localVars.blueLineStart.y,
                    localVars.blueLineEnd.x, localVars.blueLineEnd.y);
                g.setPaintMode();
                overBlueLocalVarLine = true;
                return true;
            }
        }

        if (localVars.redFish != 0) {
            if (mouseOverLine(x, y, localVars.redLineStart, localVars.redLineEnd)) {
                Graphics g = getGraphics();
                g.setColor(Color.red);
                g.setXORMode(colorOfUnlinkableLine);
                g.drawLine(localVars.redLineStart.x, localVars.redLineStart.y,
                    localVars.redLineEnd.x, localVars.redLineEnd.y);
                g.setPaintMode();
                overRedLocalVarLine = true;
                return true;
            }
        }

        for (int i = gcHeap.getHandlePoolSize() - 1; i >= 0; --i) {
            ObjectHandle oh = gcHeap.getObjectHandle(i + 1);
            if (!oh.free) {
                if (oh.gotFriend && (gcHeap.getObjectPool(oh.objectPos) != 0)) {
                    if (mouseOverLine(x, y, oh.myFriendLineStart, oh.myFriendLineEnd)) {
                        interFishLineStart = oh.myFriendLineStart;
                        interFishLineEnd = oh.myFriendLineEnd;
                        interFishRefToClear = oh.objectPos;
                        interFishLineColor = oh.fish.getFishColor();
                        Graphics g = getGraphics();
                        g.setColor(interFishLineColor);
                        g.setXORMode(colorOfUnlinkableLine);
                        g.drawLine(interFishLineStart.x, interFishLineStart.y,
                            interFishLineEnd.x, interFishLineEnd.y);
                        g.setPaintMode();
                        overInterFishLine = true;
                        return true;
                    }
                }
                if (oh.gotLunch && (gcHeap.getObjectPool(oh.objectPos + 1) != 0)) {
                    if (mouseOverLine(x, y, oh.myLunchLineStart, oh.myLunchLineEnd)) {
                        interFishLineStart = oh.myLunchLineStart;
                        interFishLineEnd = oh.myLunchLineEnd;
                        interFishRefToClear = oh.objectPos + 1;
                        interFishLineColor = oh.fish.getFishColor();
                        Graphics g = getGraphics();
                        g.setColor(interFishLineColor);
                        g.setXORMode(colorOfUnlinkableLine);
                        g.drawLine(interFishLineStart.x, interFishLineStart.y,
                            interFishLineEnd.x, interFishLineEnd.y);
                        g.setPaintMode();
                        overInterFishLine = true;
                        return true;
                    }
                }
                if (oh.gotSnack && (gcHeap.getObjectPool(oh.objectPos + 2) != 0)) {
                    if (mouseOverLine(x, y, oh.mySnackLineStart, oh.mySnackLineEnd)) {
                        interFishLineStart = oh.mySnackLineStart;
                        interFishLineEnd = oh.mySnackLineEnd;
                        interFishRefToClear = oh.objectPos + 2;
                        interFishLineColor = oh.fish.getFishColor();
                        Graphics g = getGraphics();
                        g.setColor(interFishLineColor);
                        g.setXORMode(colorOfUnlinkableLine);
                        g.drawLine(interFishLineStart.x, interFishLineStart.y,
                            interFishLineEnd.x, interFishLineEnd.y);
                        g.setPaintMode();
                        overInterFishLine = true;
                        return true;
                    }
                }
            }
        }
        return true;
    }

    public boolean mouseUp(Event evt, int x, int y) {
        if (overYellowLocalVarLine) {
            if (mouseOverLine(x, y, localVars.yellowLineStart, localVars.yellowLineEnd)) {
                localVars.yellowFish = 0;
                overYellowLocalVarLine = false;
                repaint();
            }
        }

        if (overBlueLocalVarLine) {
            if (mouseOverLine(x, y, localVars.blueLineStart, localVars.blueLineEnd)) {
                localVars.blueFish = 0;
                overBlueLocalVarLine = false;
                repaint();
            }
        }

        if (overRedLocalVarLine) {
            if (mouseOverLine(x, y, localVars.redLineStart, localVars.redLineEnd)) {
                localVars.redFish = 0;
                overRedLocalVarLine = false;
                repaint();
            }
        }

        if (overInterFishLine) {
            if (mouseOverLine(x, y, interFishLineStart, interFishLineEnd)) {
                gcHeap.setObjectPool(interFishRefToClear, 0);
                overInterFishLine = false;
                repaint();
            }
        }

        return true;
    }

    private boolean mouseOverLine(int x, int y, Point lineStart, Point lineEnd) {
        // Determine if the line defined by lineStart and lineEnd crosses a square
        // that is 2 * mouseFatness in width and height centered on the x, y mouse
        // position. Do this by looking to see if the line crosses any of 3 sides of
        // the rectangle. If not, the line does not intersect the rectangle.

        if (lineStart.x > lineEnd.x) {
            if ((x > lineStart.x || x < lineEnd.x)
                && (lineStart.x - lineEnd.x > (2 * mouseFatness))) {
                return false;
            }
        }
        else if (lineStart.x < lineEnd.x) {
            if ((x < lineStart.x || x > lineEnd.x)
                && (lineEnd.x - lineStart.x > (2 * mouseFatness))) {
                return false;
            }
        }

        if (lineStart.y > lineEnd.y) {
            if ((y > lineStart.y || y < lineEnd.y)
                && (lineStart.y - lineEnd.y > (2 * mouseFatness))) {
                return false;
            }
        }
        else if (lineStart.y < lineEnd.y) {
            if ((y < lineStart.y || y > lineEnd.y)
                && (lineEnd.y - lineStart.y > (2 * mouseFatness))) {
                return false;
            }
        }

        int xRectLeft = x - mouseFatness;
        int xRectRight = x + mouseFatness;
        int yRectTop = y - mouseFatness;
        int yRectBottom = y + mouseFatness;

        // Check for one special case, a line with infinite slope.
        if (lineStart.x == lineEnd.x) {
            if (x >= lineStart.x - mouseFatness && x <= lineStart.x + mouseFatness) {
                return true;
            }
            else {
                return false;
            }
        }

        // Calculate slope of line.
        float m = ((float) (lineEnd.y - lineStart.y) / (float) (lineEnd.x - lineStart.x));

        // Calculate y intercept of line.
        float b = ((float) lineStart.y - (m * (float) lineStart.x));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
6080yy午夜一二三区久久| 国产精品丝袜黑色高跟| 一本到三区不卡视频| 粉嫩绯色av一区二区在线观看| 蜜臀精品久久久久久蜜臀| 亚洲国产成人av好男人在线观看| 亚洲精品五月天| 亚洲一区二区三区四区在线观看| 一区二区欧美精品| 亚洲午夜日本在线观看| 午夜精品一区在线观看| 日本亚洲视频在线| 久久99国产精品麻豆| 国产综合久久久久影院| 丁香桃色午夜亚洲一区二区三区| 懂色av一区二区三区蜜臀| av一二三不卡影片| 欧美中文字幕一区二区三区亚洲| 欧美在线|欧美| 欧美一级片免费看| 久久九九国产精品| 亚洲欧洲性图库| 亚洲成人av福利| 九色porny丨国产精品| 丁香六月久久综合狠狠色| 色偷偷一区二区三区| 欧美日韩一区二区三区免费看| 91精品国产欧美一区二区18| www国产成人| 综合久久综合久久| 亚洲电影欧美电影有声小说| 蜜桃精品在线观看| 成人一区二区三区视频在线观看| voyeur盗摄精品| 欧美日韩国产另类不卡| 欧美精品一区二区三区蜜臀| 国产精品视频在线看| 亚洲国产精品影院| 国产在线精品不卡| 91偷拍与自偷拍精品| 51久久夜色精品国产麻豆| 久久精品男人天堂av| 亚洲一区二区三区四区的| 精品伊人久久久久7777人| 不卡的电视剧免费网站有什么| 欧洲精品在线观看| 久久精品在这里| 亚洲高清一区二区三区| 国产一区二区精品久久99| 在线精品视频小说1| 久久久久久久综合狠狠综合| 一区二区三区精品在线| 国产一区二区免费在线| 欧美三片在线视频观看| 欧美国产一区二区在线观看| 亚洲chinese男男1069| 粉嫩av一区二区三区粉嫩 | 欧美在线看片a免费观看| 欧美一级黄色片| 自拍偷拍欧美激情| 久久9热精品视频| 欧美三级韩国三级日本三斤| 国产色产综合产在线视频| 亚洲v日本v欧美v久久精品| 国产精品69毛片高清亚洲| 精品视频一区二区三区免费| 国产三级精品在线| 麻豆免费看一区二区三区| 在线精品观看国产| 国产精品蜜臀av| 狠狠狠色丁香婷婷综合久久五月| 在线观看日韩av先锋影音电影院| 国产日本亚洲高清| 欧美aⅴ一区二区三区视频| 91国产成人在线| 亚洲国产高清在线| 精品亚洲porn| 91精品午夜视频| 一区二区三区精品久久久| av男人天堂一区| 亚洲国产高清aⅴ视频| 国内精品久久久久影院一蜜桃| 欧美精品在线观看播放| 亚洲午夜精品网| 在线观看免费视频综合| 成人欧美一区二区三区白人| 国产曰批免费观看久久久| 日韩女优av电影| 奇米影视7777精品一区二区| 欧美精品乱码久久久久久按摩 | 免费在线视频一区| 91福利视频在线| 亚洲乱码国产乱码精品精的特点| 成人综合在线网站| 国产欧美精品一区二区色综合朱莉| 久久精品国产99久久6| 3d动漫精品啪啪| 日本欧美在线看| 日韩一区二区三区在线视频| 日本在线播放一区二区三区| 欧美精品在线一区二区| 日韩福利电影在线| 欧美日韩不卡一区二区| 亚洲一区日韩精品中文字幕| 欧美性一区二区| 日韩中文字幕不卡| 欧美一区永久视频免费观看| 日韩中文欧美在线| 日韩视频免费观看高清在线视频| 久久精品久久99精品久久| 精品福利在线导航| 国产一区二区三区四| 国产欧美精品一区| 成人av电影观看| 亚洲伦理在线精品| 欧美三级日韩三级| 日韩国产高清在线| 精品少妇一区二区三区日产乱码| 国产精品一区专区| 中文字幕中文乱码欧美一区二区| 91麻豆精品秘密| 性久久久久久久| 精品盗摄一区二区三区| 国产成人精品影视| 亚洲伦理在线精品| 56国语精品自产拍在线观看| 精品一区二区国语对白| 国产欧美精品在线观看| 在线观看视频欧美| 日韩成人一级片| 国产欧美精品在线观看| 色婷婷狠狠综合| 麻豆成人综合网| 欧美国产在线观看| 欧美日韩高清一区二区不卡| 久久国产生活片100| 中文字幕成人av| 欧洲激情一区二区| 紧缚捆绑精品一区二区| 1000部国产精品成人观看| 欧美精品丝袜中出| 国产成人欧美日韩在线电影| 一区二区三区四区亚洲| 日韩欧美激情在线| 91免费在线播放| 看片的网站亚洲| 亚洲欧美激情小说另类| 日韩欧美国产精品| 97se亚洲国产综合自在线| 视频一区二区三区中文字幕| 国产亚洲精品中文字幕| 91国内精品野花午夜精品 | 日韩精品中午字幕| 成人丝袜18视频在线观看| 午夜欧美电影在线观看| 亚洲国产精品99久久久久久久久| 欧美亚洲综合一区| 国产九九视频一区二区三区| 亚洲成人777| 国产精品久久久久9999吃药| 91精品国产综合久久蜜臀| 波多野结衣中文字幕一区| 日本美女一区二区三区| 日韩一区有码在线| xnxx国产精品| 91精品免费在线| 一本色道久久综合狠狠躁的推荐| 久久精品国产999大香线蕉| 夜夜夜精品看看| 中文字幕一区二区在线播放 | 亚洲一区电影777| 国产欧美日韩另类视频免费观看| 日韩一区二区免费高清| 97久久精品人人做人人爽| 国产酒店精品激情| 美日韩一区二区| 亚洲国产裸拍裸体视频在线观看乱了 | 成人精品鲁一区一区二区| 日日夜夜免费精品视频| 亚洲色图清纯唯美| 国产蜜臀97一区二区三区| 日韩免费高清av| 这里只有精品视频在线观看| 在线观看一区二区视频| 99热国产精品| 成人中文字幕合集| 国产一区二区三区国产| 美女视频第一区二区三区免费观看网站 | 中文字幕精品三区| 精品国产欧美一区二区| 337p亚洲精品色噜噜噜| 欧美丝袜第三区| 在线亚洲欧美专区二区| 91美女在线看| 99热国产精品| 99国产精品99久久久久久| 成人午夜电影久久影院| 国产91精品一区二区| 国产精品影视天天线| 国产精品一区免费视频|