亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
精品国产免费一区二区三区四区 | 日本少妇一区二区| 奇米影视在线99精品| 激情亚洲综合在线| 成人免费毛片片v| 在线亚洲精品福利网址导航| 91精品黄色片免费大全| 久久天天做天天爱综合色| 中文字幕乱码亚洲精品一区| 亚洲综合激情网| 欧美日韩一卡二卡三卡| 69av一区二区三区| 国产女人aaa级久久久级| 亚洲免费av网站| 精品综合免费视频观看| 9色porny自拍视频一区二区| 在线播放一区二区三区| 中文乱码免费一区二区| 午夜精品国产更新| 国产成人在线视频播放| 欧美日韩午夜在线| 久久久久88色偷偷免费| 亚洲大片一区二区三区| 国产精品99久久久久久久女警| 色综合久久综合| 2023国产精华国产精品| 亚洲成人av在线电影| 成人美女视频在线看| 欧美精品 国产精品| 中文字幕一区二区在线观看| 久久99精品久久久久久动态图 | 国产精品国产三级国产普通话三级| 亚洲一区二区欧美激情| 国产精品123| 欧美剧情片在线观看| 椎名由奈av一区二区三区| 理论片日本一区| 欧美性感一区二区三区| 国产精品美女www爽爽爽| 久久成人免费电影| 欧美日韩一卡二卡三卡| 亚洲欧美日韩国产一区二区三区 | 久久精品人人爽人人爽| 视频一区在线视频| 91黄色免费网站| 国产精品日产欧美久久久久| 经典三级一区二区| 欧美巨大另类极品videosbest | 99视频精品免费视频| 精品国产髙清在线看国产毛片| 亚洲福利视频一区二区| 99国产一区二区三精品乱码| 国产欧美日韩不卡免费| 久久99精品久久久久久| 日韩午夜电影在线观看| 视频一区视频二区在线观看| 欧美午夜一区二区三区免费大片| 亚洲人成网站色在线观看| 久久久久国产一区二区三区四区| 日韩av一区二区在线影视| 欧美视频在线不卡| 一区二区三区色| 99re这里都是精品| 成人欧美一区二区三区1314| 成人综合日日夜夜| 久久精品男人天堂av| 国产老女人精品毛片久久| 精品福利在线导航| 蜜桃一区二区三区在线| 欧美日韩国产系列| 日韩精品成人一区二区在线| 欧美性生活久久| 亚洲香肠在线观看| 欧美在线观看一二区| 亚洲一区在线观看免费观看电影高清| 91同城在线观看| 亚洲手机成人高清视频| 91在线无精精品入口| 一区二区三区四区亚洲| 日本国产一区二区| 一区二区三区四区激情| 欧美精品在线一区二区三区| 偷拍日韩校园综合在线| 91精品在线免费| 麻豆国产精品官网| 久久久久亚洲蜜桃| 成人av午夜影院| 综合av第一页| 色悠久久久久综合欧美99| 亚洲综合激情另类小说区| 欧美精品日韩一区| 麻豆精品一二三| 久久久久久影视| 91在线丨porny丨国产| 亚洲一区二区高清| 日韩午夜激情免费电影| 国产精品自在欧美一区| 亚洲国产成人在线| 91丨九色丨国产丨porny| 亚洲一区二区黄色| 日韩欧美国产不卡| 成人午夜精品在线| 亚洲激情图片qvod| 欧美一级一级性生活免费录像| 黑人精品欧美一区二区蜜桃| 国产精品久久看| 欧美日韩免费不卡视频一区二区三区| 蜜臀av在线播放一区二区三区| 久久综合九色综合久久久精品综合| 国产成人精品aa毛片| 亚洲精品乱码久久久久久黑人| 69堂精品视频| 国产精品一区二区在线播放| 亚洲男同性视频| 欧美不卡视频一区| 99视频精品全部免费在线| 日韩高清不卡在线| 中文字幕av一区二区三区| 欧美无砖专区一中文字| 国产中文字幕一区| 一区二区高清在线| 亚洲精品一区二区三区四区高清| 色综合网站在线| 精品一区二区三区不卡| 亚洲丝袜另类动漫二区| 精品国产乱子伦一区| 色狠狠色狠狠综合| 国产在线精品国自产拍免费| 夜夜精品视频一区二区| 久久久久久久一区| 欧美日韩国产综合一区二区三区 | 国产性色一区二区| 欧美日韩免费在线视频| 粉嫩av一区二区三区| 日韩国产欧美在线播放| 中文字幕日韩一区| 日韩欧美成人一区| 欧美综合一区二区| 成人中文字幕电影| 七七婷婷婷婷精品国产| 亚洲男人天堂av| 国产日韩欧美高清| 制服丝袜亚洲色图| 91久久一区二区| 成人免费视频app| 久久99精品久久久久久国产越南| 亚洲一区二区三区四区五区中文 | 丁香婷婷综合五月| 久久精品国产99久久6| 亚洲一区二区三区美女| 国产目拍亚洲精品99久久精品| 欧美一区2区视频在线观看| 99精品视频在线播放观看| 国产精品香蕉一区二区三区| 三级久久三级久久| 一区二区三区在线视频免费| 国产欧美日本一区二区三区| 欧美mv日韩mv国产网站app| 精品视频123区在线观看| 91色乱码一区二区三区| 国产激情91久久精品导航| 精品亚洲porn| 蜜桃av噜噜一区| 青青青爽久久午夜综合久久午夜| 亚洲妇熟xx妇色黄| 一区二区三区四区不卡视频| 综合久久综合久久| 国产精品久久影院| 国产女主播一区| 久久精品一区八戒影视| 欧美不卡123| 日韩三级视频在线观看| 69av一区二区三区| 91精品国产全国免费观看| 欧美男生操女生| 欧美日韩一区在线| 欧美日韩高清一区| 欧美日韩视频在线一区二区 | 亚洲1区2区3区视频| 一区二区三区在线观看动漫| 亚洲视频一区在线观看| 国产精品国产成人国产三级| 欧美韩国一区二区| 亚洲国产精品二十页| 国产偷v国产偷v亚洲高清| 精品国产自在久精品国产| 精品国产三级电影在线观看| 26uuu另类欧美| 久久久综合网站| 国产欧美一区二区精品仙草咪| 久久一日本道色综合| 久久久.com| 国产精品久久看| 亚洲柠檬福利资源导航| 国产精品欧美精品| 最新国产の精品合集bt伙计| 日韩伦理电影网| 国产精品久久久99| 国产精品理伦片| 欧美一区三区二区|