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

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

?? sheep.java

?? J2ME MIDP_Example_Applications
?? JAVA
字號:
// Copyright 2003 Nokia Corporation.
//
// THIS SOURCE CODE IS PROVIDED 'AS IS', WITH NO WARRANTIES WHATSOEVER,
// EXPRESS OR IMPLIED, INCLUDING ANY WARRANTY OF MERCHANTABILITY, FITNESS
// FOR ANY PARTICULAR PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE
// OR TRADE PRACTICE, RELATING TO THE SOURCE CODE OR ANY WARRANTY OTHERWISE
// ARISING OUT OF ANY PROPOSAL, SPECIFICATION, OR SAMPLE AND WITH NO
// OBLIGATION OF NOKIA TO PROVIDE THE LICENSEE WITH ANY MAINTENANCE OR
// SUPPORT. FURTHERMORE, NOKIA MAKES NO WARRANTY THAT EXERCISE OF THE
// RIGHTS GRANTED HEREUNDER DOES NOT INFRINGE OR MAY NOT CAUSE INFRINGEMENT
// OF ANY PATENT OR OTHER INTELLECTUAL PROPERTY RIGHTS OWNED OR CONTROLLED
// BY THIRD PARTIES
//
// Furthermore, information provided in this source code is preliminary,
// and may be changed substantially prior to final release. Nokia Corporation
// retains the right to make changes to this source code at
// any time, without notice. This source code is provided for informational
// purposes only.
//
// Nokia and Nokia Connecting People are registered trademarks of Nokia
// Corporation.
// Java and all Java-based marks are trademarks or registered trademarks of
// Sun Microsystems, Inc.
// Other product and company names mentioned herein may be trademarks or
// trade names of their respective owners.
//
// A non-exclusive, non-transferable, worldwide, limited license is hereby
// granted to the Licensee to download, print, reproduce and modify the
// source code. The licensee has the right to market, sell, distribute and
// make available the source code in original or modified form only when
// incorporated into the programs developed by the Licensee. No other
// license, express or implied, by estoppel or otherwise, to any other
// intellectual property rights is granted herein.


// unnamed package

import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import java.util.*;


class Sheep
    extends Sprite
{
    static final int WIDTH = 15;
    static final int HEIGHT = 15;

    private final SheepdogCanvas canvas;
    private int[][][] animations = {{{0},                // stand up
                                     {1, 2, 3, 4}},      // run up
                                    {{5},                // stand left
                                     {6, 7, 8, 9}},      // run left
                                    {{10},               // stand down
                                     {11, 12, 13, 14}}}; // run down
    private int animationTick;
    private static int numSheep = 0;
    private static final int STAND = 0;
    private static final int RUN = 1;
    private int currentDirection = SheepdogCanvas.DOWN;

    private final int flockFactor;
    private final int minDogFactor;
    private final int maxDogFactor;
    private int dogFactor;

    Sheep(SheepdogCanvas canvas)
    {
        super(SheepdogMIDlet.createImage("/sheep.png"), WIDTH, HEIGHT);
        defineCollisionRectangle(2, 2, WIDTH-4, WIDTH-4);
        defineReferencePixel(WIDTH/2, HEIGHT/2);

        this.canvas = canvas;
        animationTick = numSheep++;

        flockFactor = 100 + SheepdogMIDlet.random(100);
        minDogFactor = SheepdogMIDlet.random(20);
        maxDogFactor = minDogFactor + 10;
        dogFactor = minDogFactor;
    }


    void tick()
    {
        // sheep are 4x as slow as dogs
        if ((animationTick++ % 4) != 0)
        {
            return;
        }

        // adjust dog factor
        adjustDogFactor();

        // ARTIFICIAL INTELLIGENCE SECTION
        // - wants to move away from dog, if dog is close
        // - wants to move closer to flock (average position of other
        //   sheep) if they are close
        // - if preferred direction is diagonal and major direction is
        //   blocked, take minor direction
        // - each sheep varies in how much it's scared of the dog, and
        //   how much it wants to flock
        // We do this by calculating a weighted direction vector

        // First calculate dog effect
        Sheepdog sheepdog = canvas.getSheepdog();
        int dx = getX() - sheepdog.getX();
        int dy = getY() - sheepdog.getY();
        int sumsq = dx * dx + dy * dy;
        Field field = canvas.getField();
        int dogEffectX =
            dogFactor * dx * field.getWidth() * field.getWidth() / sumsq;
        int dogEffectY =
            dogFactor * dy * field.getHeight() * field.getHeight() / sumsq;

        // Next calculate flock effect
        int flockDx = 0;
        int flockDy = 0;
        Vector sheep = canvas.getSheep();
        for (int i = 0; i < sheep.size(); ++i)
        {
            Sheep sh = (Sheep)(sheep.elementAt(i));
            if (sh != this)
            {
                flockDx += getX() - sh.getX();
                flockDy += getY() - sh.getY();
            }
        }
        int flockEffectX = (flockDx * flockFactor) / (sheep.size() - 1);
        int flockEffectY = (flockDy * flockFactor) / (sheep.size() - 1);

        // Now calculate total effect
        int totalEffectX = dogEffectX - flockEffectX;
        int totalEffectY = dogEffectY - flockEffectY;

        // Determine preferred directions
        int firstDirection;
        int secondDirection;
        int thirdDirection;
        if (Math.abs(totalEffectY) > Math.abs(totalEffectX))
        {
            // Prefer to move vertically
            if (totalEffectY > 0)
            {
                firstDirection = SheepdogCanvas.DOWN;
            }
            else
            {
                firstDirection = SheepdogCanvas.UP;
            }
            if (totalEffectX > 0)
            {
                secondDirection = SheepdogCanvas.RIGHT;
                thirdDirection = SheepdogCanvas.NONE;
            }
            else if (totalEffectX < 0)
            {
                secondDirection = SheepdogCanvas.LEFT;
                thirdDirection = SheepdogCanvas.NONE;
            }
            else  // totalEffectX == 0
            {
                if (SheepdogMIDlet.random(2) == 0)
                {
                    secondDirection = SheepdogCanvas.LEFT;
                    thirdDirection = SheepdogCanvas.RIGHT;
                }
                else
                {
                    secondDirection = SheepdogCanvas.RIGHT;
                    thirdDirection = SheepdogCanvas.LEFT;
                }
            }
        }
        else
        {
            // Prefer to move horizontally
            if (totalEffectX > 0)
            {
                firstDirection = SheepdogCanvas.RIGHT;
            }
            else
            {
                firstDirection = SheepdogCanvas.LEFT;
            }
            if (totalEffectY > 0)
            {
                secondDirection = SheepdogCanvas.DOWN;
                thirdDirection = SheepdogCanvas.NONE;
            }
            else if (totalEffectY < 0)
            {
                secondDirection = SheepdogCanvas.UP;
                thirdDirection = SheepdogCanvas.NONE;
            }
            else  // totalEffectY == 0
            {
                if (SheepdogMIDlet.random(2) == 0)
                {
                    secondDirection = SheepdogCanvas.UP;
                    thirdDirection = SheepdogCanvas.DOWN;
                }
                else
                {
                    secondDirection = SheepdogCanvas.DOWN;
                    thirdDirection = SheepdogCanvas.UP;
                }
            }
        }

        // if we can move in the preferred directions, do so, else stand
        // facing the dog
        if (tryMove(firstDirection) ||
            tryMove(secondDirection) ||
            ((thirdDirection != SheepdogCanvas.NONE) &&
             tryMove(thirdDirection)))
        {
            advanceRunningAnimation();
        }
        else
        {
            if (Math.abs(dx) > Math.abs(dy))
            {
                if (dx > 0)
                {
                    currentDirection = SheepdogCanvas.LEFT;
                }
                else
                {
                    currentDirection = SheepdogCanvas.RIGHT;
                }
            }
            else
            {
                if (dy > 0)
                {
                    currentDirection = SheepdogCanvas.UP;
                }
                else
                {
                    currentDirection = SheepdogCanvas.DOWN;
                }
            }
            setStandingAnimation();
        }

        // Will baa occasionally if dog is close. Dog distance ranges from
        // about 11 minimum to double width of field
        int dogDistance = Math.abs(dx) + Math.abs(dy);
        if (SheepdogMIDlet.random(dogDistance - 10) == 0)
        {
            SoundEffects.getInstance().startSheepSound();
        }
    }


    private void adjustDogFactor()
    {
        dogFactor += SheepdogMIDlet.random(4) - 2;  // -2..1
        if (dogFactor < minDogFactor)
        {
            dogFactor = minDogFactor;
        }
        else if (dogFactor > maxDogFactor)
        {
            dogFactor = maxDogFactor;
        }
    }


    private boolean tryMove(int direction)
    {
        Field field = canvas.getField();
        boolean blocked = true;
        int dx = 0;
        int dy = 0;
        switch (direction)
        {
        case SheepdogCanvas.UP:
            if ((getY() > 0) &&
                !field.containsImpassableArea(getX(),
                                              getY() - 1,
                                              getWidth(),
                                              1))
            {
                blocked = false;
                dy = -1;
            }
            break;
        case SheepdogCanvas.LEFT:
            if ((getX() > 0) &&
                !field.containsImpassableArea(getX() - 1,
                                              getY(),
                                              1,
                                              getHeight()))
            {
                blocked = false;
                dx = -1;
            }
            break;
        case SheepdogCanvas.DOWN:
            if ((getY() + getHeight() - 1 < field.getWidth()) &&
                !field.containsImpassableArea(getX(),
                                              getY() + getHeight(),
                                              getWidth(),
                                              1))
            {
                blocked = false;
                dy = 1;
            }
            break;
        case SheepdogCanvas.RIGHT:
            if ((getX() + getWidth() - 1 < field.getWidth()) &&
                !field.containsImpassableArea(getX() + getWidth(),
                                              getY(),
                                              1,
                                              getHeight()))
            {
                blocked = false;
                dx = 1;
            }
            break;
        default:
            // can't happen
            break;
        }

        boolean success = false;
        if (!blocked)
        {
            boolean wasInFold = field.inFold(this);
            move(dx, dy);
            if (canvas.overlapsOtherSheep(this) ||
                canvas.overlapsSheepdog(this) ||
                (wasInFold && !field.inFold(this)))
            {
                move(-dx, -dy);
            }
            else
            {
                currentDirection = direction;
                success = true;
            }
        }

        return success;
    }


    private void advanceRunningAnimation()
    {
        int[] sequence;
        if (currentDirection == SheepdogCanvas.RIGHT)
        {
            sequence = animations[SheepdogCanvas.LEFT][RUN];
            setTransform(TRANS_MIRROR);
        }
        else
        {
            sequence = animations[currentDirection][RUN];
            setTransform(TRANS_NONE);
        }
        setFrame(sequence[(animationTick >> 2) % sequence.length]);
    }


    private void setStandingAnimation()
    {
        if (currentDirection == SheepdogCanvas.RIGHT)
        {
            setFrame(animations[SheepdogCanvas.LEFT][STAND][0]);
            setTransform(TRANS_MIRROR);
        }
        else
        {
            setFrame(animations[currentDirection][STAND][0]);
            setTransform(TRANS_NONE);
        }
    }


    void handleDogBark()
    {
        // sheep should get nervous
        dogFactor += 5;
        if (dogFactor > maxDogFactor)
        {
            dogFactor = maxDogFactor;
        }
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久777色| 丝袜脚交一区二区| 色综合久久综合网| 亚洲成人av资源| 欧美高清视频不卡网| 97精品久久久久中文字幕| 亚洲欧洲精品一区二区三区| 91在线视频观看| 午夜免费久久看| 26uuu欧美| 91影视在线播放| 亚洲va欧美va人人爽| 精品国产一区二区三区不卡| 成人动漫视频在线| 亚洲午夜电影网| 日韩欧美卡一卡二| 成人av午夜电影| 亚洲在线免费播放| 日韩欧美激情一区| 99视频精品免费视频| 亚洲国产裸拍裸体视频在线观看乱了| 7777精品伊人久久久大香线蕉的| 久草这里只有精品视频| 亚洲视频狠狠干| 日韩欧美黄色影院| 一本色道久久综合狠狠躁的推荐| 蜜桃视频在线观看一区| 中文欧美字幕免费| 91精品国产一区二区人妖| 国产91精品在线观看| 午夜国产不卡在线观看视频| 国产丝袜在线精品| 欧美视频精品在线| 国产.欧美.日韩| 日韩和欧美一区二区| 亚洲欧美日韩综合aⅴ视频| 日韩一区二区影院| 欧美在线观看视频一区二区三区| 欧美日本在线视频| 北条麻妃一区二区三区| 青青草伊人久久| 亚洲精品美国一| 欧美国产在线观看| 精品久久国产字幕高潮| 欧美日韩一区高清| 91影视在线播放| 懂色av一区二区在线播放| 久88久久88久久久| 青青草国产精品97视觉盛宴| 亚洲色图清纯唯美| 国产日产欧美一区二区视频| 日韩久久免费av| 欧美一级片免费看| 欧美欧美午夜aⅴ在线观看| 91蝌蚪国产九色| 成人午夜电影网站| 国产精品中文字幕一区二区三区| 日韩电影在线免费看| 亚洲色图另类专区| 国产精品久久久99| 国产女主播视频一区二区| 久久一区二区三区四区| 日韩欧美国产电影| 日韩午夜精品视频| 欧美一区二区三区免费在线看| 欧美性一二三区| 日本高清不卡在线观看| 91官网在线免费观看| 91视频在线观看| 91女厕偷拍女厕偷拍高清| 国产成人精品一区二区三区网站观看| 国产在线看一区| 国内精品在线播放| 国产成人精品aa毛片| 国产91综合一区在线观看| 国产成人鲁色资源国产91色综| 精品一区二区三区香蕉蜜桃| 久久99精品久久久久婷婷| 精品一区二区三区在线播放视频| 理论片日本一区| 精品一区二区三区久久| 精品一区二区三区日韩| 国产精品白丝av| av中文字幕亚洲| 日本精品一区二区三区高清 | 日韩三级av在线播放| 91精品国产综合久久久蜜臀粉嫩| 在线91免费看| 26uuu精品一区二区三区四区在线| 精品久久国产97色综合| 国产日韩欧美精品在线| 亚洲视频一二三| 午夜欧美在线一二页| 久久爱www久久做| 成人美女视频在线观看18| 91免费版在线| 91麻豆精品国产91久久久久久| 日韩一区国产二区欧美三区| 精品国产91九色蝌蚪| 国产精品乱码一区二三区小蝌蚪| 一区二区三区 在线观看视频| 日韩激情一区二区| 在线观看精品一区| 精品日韩一区二区三区免费视频| 欧美激情在线观看视频免费| 亚洲一卡二卡三卡四卡无卡久久| 日本亚洲免费观看| 国产盗摄女厕一区二区三区| 91丨porny丨中文| 日韩一区二区三区在线| 国产精品青草综合久久久久99| 亚洲综合精品自拍| 经典三级视频一区| 99久久99久久精品国产片果冻| 91麻豆精品国产| 国产欧美一区二区三区在线看蜜臀 | 国产亚洲污的网站| 亚洲综合色区另类av| 国产成人一区在线| 91麻豆精品国产自产在线观看一区 | 欧美一级日韩免费不卡| 国产精品丝袜久久久久久app| 午夜精品成人在线| 成人av资源站| 日韩欧美在线网站| 亚洲永久免费av| 成人一二三区视频| 欧美电影免费观看完整版| 一区二区三区在线视频免费 | 成人激情文学综合网| 欧美一级二级三级蜜桃| 亚洲男人天堂av| 国产一区二区久久| 欧美日韩久久一区| 亚洲欧美在线视频观看| 国产在线精品一区二区夜色| 欧美三级三级三级| 亚洲精品视频在线| 丁香婷婷综合色啪| 久久久噜噜噜久久人人看| 日本亚洲三级在线| 欧美视频在线观看一区| 国产精品久久久久久久岛一牛影视| 久久精品99国产精品| 91精品蜜臀在线一区尤物| 亚洲伊人伊色伊影伊综合网| 成人国产精品免费观看动漫| 亚洲第一久久影院| 91麻豆国产香蕉久久精品| 国产亚洲精品免费| 黄色资源网久久资源365| 欧美一区在线视频| 日韩影院在线观看| 91精品国产综合久久精品麻豆| 夜夜精品视频一区二区 | 欧美在线免费播放| 亚洲欧洲日产国码二区| 岛国精品在线播放| 国产农村妇女毛片精品久久麻豆 | 一区二区三区日韩在线观看| 成人精品高清在线| 中文字幕一区二区在线播放| 成人ar影院免费观看视频| 中文字幕乱码久久午夜不卡| 国产毛片精品视频| 国产色综合久久| 大尺度一区二区| 1000精品久久久久久久久| 91色九色蝌蚪| 亚洲一区二区视频在线观看| 91论坛在线播放| 亚洲成人久久影院| 日韩欧美一区二区久久婷婷| 激情综合亚洲精品| 国产日韩欧美综合在线| 成人sese在线| 亚洲精品乱码久久久久久久久| 色哟哟一区二区| 午夜国产精品一区| 欧美刺激午夜性久久久久久久| 精品夜夜嗨av一区二区三区| 国产午夜精品理论片a级大结局| 韩国精品一区二区| 国产精品国产三级国产aⅴ无密码| 91亚洲精品久久久蜜桃| 香蕉av福利精品导航| 日韩欧美一级精品久久| 国产成人小视频| 一区二区三区欧美亚洲| 欧美视频三区在线播放| 精品亚洲成a人| 1024亚洲合集| 欧美一区二区三区视频免费| 国产高清一区日本| 亚洲在线视频一区| 欧美xxxx老人做受| 91免费看片在线观看| 日韩av在线发布| 中文字幕日韩精品一区 | 国产寡妇亲子伦一区二区|