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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? board.java

?? 名稱:games
?? JAVA
字號(hào):
/* * * Copyright ? 2007 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */package example.pushpuzzle;import javax.microedition.lcdui.*;/** * The class Board knows how the pieces move, handles undo, and * handles reading of screens. */public class Board {    // Move directions    public static final int LEFT = 0;    public static final int RIGHT = 3;    public static final int UP = 1;    public static final int DOWN = 2;    public static final int MOVEPACKET = 4;    // Bit definitions for pieces of each board position    public static final byte GROUND = 0; // If nothing there    public static final byte STORE = 1; // If it is a storage place    public static final byte PACKET = 2; // If it has a packet    public static final byte WALL = 4; // If it is a wall    public static final byte PUSHER = 8; // If the pusher is there    private int level;    private byte[] array;    private byte[] pathmap; // used for runTo to find shortest path    private int width;    private int height;    private int pusher; // position of the pusher at index into array    private int packets = 0; // total number of packets    private int stored = 0; // number of packets in Stores    private byte[] moves; // recorded moves    private int nmoves; // number of moves executed    private int npushes; // number of pushes executed    /**     * Creates new Board initialized to a simple puzzle.     */    public Board() {        moves = new byte[200];        screen0();    }    /**     * Create the hard coded simple game board.     */    public void screen0() {        width = 9;        height = 7;        array = new byte[width * height];        level = 0;        nmoves = 0;        npushes = 0;        for (int x = 0; x < width; x++) {            for (int y = 0; y < height; y++) {                byte t =                    ((x == 0) || (y == 0) || (x == (width - 1)) || (y == (height - 1))) ? WALL                                                                                        : GROUND;                set(x, y, t);            }        }        packets = 2;        stored = 0;        set(2, 2, PACKET);        set(4, 4, PACKET);        set(4, 2, STORE);        set(6, 4, STORE);        pusher = index(1, 1);    }    /**     * Move the pusher in the direction indicated.     * If there is a wall, don't move.     * if there is a packet in that direction, try to move it.     * @param move the direction; one of LEFT, RIGHT, UP, DOWN     * @return the direction actually moved, -1 if not moved     */    public int move(int move) {        int obj = pusher + indexOffset(move);        // Handle the simple cases        if ((array[obj] & WALL) != 0) {            return -1;        }        int m = movePacket(obj, move);        if (m < 0) {            return -1; // If can't move packet, done!        }        pusher = obj; // move the pusher to the new spot        saveMove(m);        return m;    }    /**     * Move the packet in the direction indicated relative to     * the pusher.  If it fits into a store position remember.     * @return -1 if can't be moved or the updated move     * including the packet flag if there was a packet to move.     */    private int movePacket(int index, int move) {        if ((array[index] & PACKET) == 0) {            return move; // no packet to move        }        int dest = index + indexOffset(move);        if (array[dest] > STORE) {            return -1; // can't move packet into next spot.        }        // Remove packet from current location        array[index] &= ~PACKET;        if ((array[index] & STORE) != 0) {            stored--;        }        // Insert packet into new location        array[dest] |= PACKET;        if ((array[dest] & STORE) != 0) {            stored++;        }        npushes++; // count pushes done        return move + MOVEPACKET;    }    /*     * Save a move, extending the array if necessary.     */    private void saveMove(int move) {        if (nmoves >= moves.length) {            byte[] n = new byte[moves.length + 50];            System.arraycopy(moves, 0, n, 0, moves.length);            moves = n;        }        moves[nmoves++] = (byte)move;    }    /**     * Undo the most recent move     * @return the move undone;  if none -1 is returned;     *  See LEFT, RIGHT, UP, DOWN, and MOVEPACKET     */    public int undoMove() {        if (nmoves <= 0) {            return -1;        }        int move = moves[--nmoves];        int rev = (move & 3) ^ 3; // reverse the direction        int back = pusher + indexOffset(rev);        if ((move & MOVEPACKET) != 0) {            npushes--; // "unpush"            movePacket(pusher + indexOffset(move), rev); // move packet        }        pusher = back;        return move;    }    /**     * Determine if the screen has been solved.     */    public boolean solved() {        return packets == stored;    }    /**     * Move the player to the position (x,y), if possible. Return     * the direction it moved if successful, otherwise -1.     * The position (x,y) must be empty.     * @param x window coordinate     * @param y window coordinate     * @return the direction that it moved, -1 is not moved;     *  See LEFT, RIGHT, UP, DOWN, MOVEPACKET     */    public int runTo(int x, int y, int max) {        int target = index(x, y);        if ((target < 0) || (target >= array.length)) {            return -1;        }        if (target == pusher) {            return -1; // already there        }        /* Fill the path map */        if ((pathmap == null) || (pathmap.length != array.length)) {            pathmap = new byte[array.length];        }        // Fill with unset value.        for (int i = 0; i < pathmap.length; i++)            pathmap[i] = 127;        // flood fill search to find a shortest path to the push point.        findTarget(target, (byte)0);        /*         * if we didn't make it back to the players position,         * there is no valid path to that place.         */        if (pathmap[pusher] == 127) {            return -1;        } else {            // We made it back, so let's walk the path we just built up            // Save the final move to return            int pathlen = pathmap[pusher];            int pathmin = pathlen - max;            int dir = -1;            for (pathlen--; pathlen >= pathmin; pathlen--) {                if (pathmap[pusher - 1] == pathlen) {                    dir = LEFT;                    saveMove(dir);                    pusher--;                } else if (pathmap[pusher + 1] == pathlen) {                    dir = RIGHT;                    saveMove(dir);                    pusher++;                } else if (pathmap[pusher - width] == pathlen) {                    dir = UP;                    saveMove(dir);                    pusher -= width;                } else if (pathmap[pusher + width] == pathlen) {                    dir = DOWN;                    saveMove(dir);                    pusher += width;                } else {                    /*                     * if we get here, something is SERIOUSLY wrong,                     * so we should abort                     */                    throw new RuntimeException("runTo abort");                }            }            return dir;        }    }    /**     * Find the shortest path to the pusher via a fill search algorithm     */    private void findTarget(int t, byte pathlen) {        if (array[t] > STORE) {            return; // Either a wall or looped back to player        }        // Already tried here and this way is longer        if (pathmap[t] <= pathlen) {            return;        }        pathmap[t] = pathlen++; // set path length to this location        if (t == pusher) {            return;        }        // avoiding ArrayIndexOutOfBoundException        if ((t - 1) >= 0) {            findTarget(t - 1, pathlen); // to previous cell        }        if ((t + 1) < array.length) {            findTarget(t + 1, pathlen); // to next cell        }        if ((t - width) >= 0) {            findTarget(t - width, pathlen); // to previous row        }        if ((t + width) < array.length) {            findTarget(t + width, pathlen); // to next row        }    }    /**     * Return the pieces at the location.     * @param x location in the board.     * @param y location in the board.     * @return flags indicating what pieces are in this board location.     * Bit flags; combinations of WALL, PUSHER, STORE, PACKET.     */    public byte get(int x, int y) {        int offset = index(x, y);        if (offset == pusher) {            return (byte)(array[offset] | PUSHER);        } else {            return array[offset];        }    }    /**     * Set the value of the location.     */    private void set(int x, int y, byte value) {        array[index(x, y)] = value;    }    /**     * Compute the index in the array of the x, y location.     */    private int index(int x, int y) {        if ((x < 0) || (x >= width) || (y < 0) || (y >= height)) {            return -1;        }        return (y * width) + x;    }    /**     * Get the location of the pusher.     * It is returned as an int with the lower 16 bits being     * the x index and the upper 16 bits being the y index.     * @return the encoded location of the pusher.     */    public int getPusherLocation() {        int x = pusher % width;        int y = pusher / width;        return (y << 16) + x;    }    /**     * Compute the offset in the array of the cell relative     * to the current pusher location in the direction of the move.     * Note: the walls around the edge always make a +/- guard band.     * Also, the order of evaluation should never try to get to +/- 2.     */    private int indexOffset(int move) {        switch (move & 3) {        case LEFT:            return -1;        case RIGHT:            return +1;        case UP:            return -width;        case DOWN:            return +width;        }        return 0;    }    /**     * Read a board from a stream.     * Read it into a fixed size array and then shrink to fit.     */    public void read(java.io.InputStream is, int l) {        final int W = 20;        final int H = 20;        byte[] b = new byte[W * H];        // Add resize code later.        int c;        // Add resize code later.        int w = 0;        int x = 0;        int y = 0;        int xn = 0;        int yn = 0;        int npackets = 0;        try {            while ((c = is.read()) != -1) {                switch (c) {                case '\n':                    if (x > w) {                        w = x;                    }                    y++;                    x = 0;                    break;                case '$':                    b[(y * W) + x++] = PACKET;                    npackets++;                    break;                case '#':                    b[(y * W) + x++] = WALL;                    break;                case ' ':                    b[(y * W) + x++] = GROUND;                    break;                case '.':                    b[(y * W) + x++] = STORE;                    break;                case '*':                    b[(y * W) + x] = PACKET;                    b[(y * W) + x++] |= STORE;                    npackets++;                    stored++;                    break;                case '+': // player and store in same place                    b[(y * W) + x++] = STORE;                case '@':                    xn = x;                    yn = y;                    x++;                    break;                }            }        } catch (java.io.IOException ex) {            ex.printStackTrace();        }        if (y > 0) {            array = new byte[w * y];            if (y > w) { // Switch x for y while copying                width = y;                height = w;                for (y = 0; y < width; y++) {                    for (x = 0; x < w; x++) {                        array[index(y, x)] = b[(y * W) + x];                    }                }                pusher = index(yn, xn);            } else {                width = w;                height = y;                array = new byte[width * height];                for (y = 0; y < height; y++) {                    for (x = 0; x < width; x++) {                        array[index(x, y)] = b[(y * W) + x];                    }                }                pusher = index(xn, yn);            }            stored = 0;            packets = npackets;            level = l;            nmoves = 0;            npushes = 0;        }    }    /**     * Get the width of the game board.     */    public int getWidth() {        return width;    }    /**     * Get the height of the board.     */    public int getHeight() {        return height;    }    /**     * Get the number of moves to get this far.     */    public int getMoves() {        return nmoves;    }    /**     * Get the number of packets pushed around.     */    public int getPushes() {        return npushes;    }    /**     * Get the number of packets stored.     */    public int getStored() {        return stored;    }    /**     * Convert a left/right direction into an offset.     */    private int dx(int dir) {        if (dir == LEFT) {            return -1;        }        if (dir == RIGHT) {            return +1;        }        return 0;    }    /**     * Convert a up/down direction into an offset.     */    private int dy(int dir) {        if (dir == UP) {            return -1;        }        if (dir == DOWN) {            return +1;        }        return 0;    }}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱子伦视频一区二区三区| 一区二区三区中文在线| 欧美日本国产视频| 色综合激情五月| 91在线码无精品| 成人黄页在线观看| 成av人片一区二区| 91在线观看视频| 欧美三级中文字幕在线观看| 欧美高清一级片在线| 91精品国产免费久久综合| 91精品婷婷国产综合久久性色| 7777精品伊人久久久大香线蕉的 | 国产精品久久看| 国产精品久线在线观看| 成人欧美一区二区三区小说| 一区二区三区高清| 日本在线播放一区二区三区| 国产精品一级黄| 成人aa视频在线观看| 欧美色图免费看| 精品日韩99亚洲| 中文字幕一区二区三区色视频| ...xxx性欧美| 日本成人中文字幕| 美腿丝袜在线亚洲一区 | 一卡二卡欧美日韩| 天天综合网天天综合色| 国产一区二区三区不卡在线观看| 成人av资源网站| 欧美性视频一区二区三区| 91精品国产一区二区三区香蕉| 久久亚洲欧美国产精品乐播| 亚洲另类在线视频| 久久国产三级精品| 成人免费高清在线| 欧美高清dvd| 国产精品高潮久久久久无| 中国色在线观看另类| 亚洲一区二区中文在线| 狠狠色狠狠色综合系列| 色婷婷综合在线| 欧美伦理影视网| 国产精品蜜臀在线观看| 亚洲成人一区二区在线观看| 成人小视频在线| 欧美一二三区在线观看| 亚洲色图丝袜美腿| 精品一区二区在线看| 欧美日韩一二三区| 国产精品久久看| 国产一区二区主播在线| 欧美日韩在线精品一区二区三区激情 | 欧美美女视频在线观看| 国产女主播视频一区二区| 美国十次综合导航| 欧美日韩美女一区二区| 亚洲美女视频在线观看| 大陆成人av片| 久久久精品中文字幕麻豆发布| 午夜欧美大尺度福利影院在线看| 色香色香欲天天天影视综合网| 国产精品久久久久影院亚瑟| 经典三级在线一区| 日韩三级在线免费观看| 免费av成人在线| 日韩欧美自拍偷拍| 偷拍亚洲欧洲综合| 欧美日韩一区国产| 天堂在线亚洲视频| 欧美日韩国产综合草草| 亚洲大尺度视频在线观看| 欧美探花视频资源| 亚洲v中文字幕| 欧美日韩成人一区| 日本va欧美va精品发布| 欧美一卡二卡三卡四卡| 麻豆视频一区二区| 精品国产伦一区二区三区观看体验| 日韩av网站在线观看| 欧美精品一级二级| 亚洲成人免费在线观看| 欧美妇女性影城| 国产自产2019最新不卡| 国产偷v国产偷v亚洲高清| 日韩精彩视频在线观看| 欧美一区二区啪啪| 国产一区中文字幕| 国产精品福利一区| 一本色道**综合亚洲精品蜜桃冫| 亚洲国产成人高清精品| 日韩一区二区在线看片| 成人午夜看片网址| 一区二区免费视频| 91精品国产综合久久久蜜臀图片| 久久电影网站中文字幕| 国产精品免费人成网站| 欧美亚洲综合在线| 久久99久久精品| 国产欧美一区二区三区鸳鸯浴| 91丝袜国产在线播放| 亚洲国产精品影院| 久久久影视传媒| 一本一本大道香蕉久在线精品| 三级欧美韩日大片在线看| 久久久蜜桃精品| 欧美最猛黑人xxxxx猛交| 久久福利视频一区二区| 亚洲精品水蜜桃| 欧美成人免费网站| 在线视频一区二区免费| 精品一区二区三区日韩| 亚洲欧美日韩一区二区 | 免费av网站大全久久| 中文字幕一区二区三区乱码在线| 欧美日韩一区不卡| 成人国产电影网| 日韩成人精品视频| 亚洲精品中文在线影院| 日韩亚洲欧美在线| 在线免费观看日韩欧美| 国产99久久久国产精品潘金网站| 午夜精品福利久久久| 中文字幕一区二区在线观看 | 国产1区2区3区精品美女| 亚洲综合色噜噜狠狠| 久久久久久久综合日本| 欧洲一区二区三区免费视频| 琪琪久久久久日韩精品| 一区二区三区在线免费观看| 久久久国际精品| 久久亚洲一区二区三区明星换脸| 7777精品伊人久久久大香线蕉 | av中文字幕在线不卡| 奇米精品一区二区三区在线观看 | 综合亚洲深深色噜噜狠狠网站| 日韩一区二区三区免费观看| 91福利视频在线| av资源网一区| 99国产精品久久久| 99在线视频精品| 成人妖精视频yjsp地址| 激情综合网激情| 韩国在线一区二区| 久久国产夜色精品鲁鲁99| 蜜臀精品一区二区三区在线观看| 亚洲高清在线精品| 五月激情六月综合| 日本强好片久久久久久aaa| 亚欧色一区w666天堂| 亚洲成人1区2区| 午夜精品福利久久久| 日本免费在线视频不卡一不卡二| 日韩电影免费在线看| 日韩精品91亚洲二区在线观看 | 精品久久久久香蕉网| 日韩免费性生活视频播放| 91精品久久久久久蜜臀| 欧美一区2区视频在线观看| 日韩一区和二区| 久久精品视频一区二区三区| 久久一区二区视频| 中文字幕成人网| 亚洲精品自拍动漫在线| 亚洲综合av网| 强制捆绑调教一区二区| 九九视频精品免费| 国产成人鲁色资源国产91色综| 99久久精品国产一区| 在线观看视频91| 欧美肥胖老妇做爰| 2020国产精品自拍| 国产精品乱人伦一区二区| 亚洲视频在线一区二区| 亚洲福中文字幕伊人影院| 久久国产精品99精品国产| 波多野结衣精品在线| 欧美美女网站色| 国产欧美一区二区精品性色超碰| 亚洲欧美综合在线精品| 日本不卡的三区四区五区| 国产精品123区| 精品视频在线免费观看| 久久综合久久综合久久综合| 日韩毛片高清在线播放| 麻豆成人久久精品二区三区红| 福利视频网站一区二区三区| 日本道色综合久久| 欧美videofree性高清杂交| 国产精品动漫网站| 蜜乳av一区二区| 在线免费视频一区二区| 精品国产精品网麻豆系列| 曰韩精品一区二区| 国产麻豆精品一区二区| 欧美色图在线观看| 国产日韩欧美精品一区| 日韩中文字幕区一区有砖一区 | 亚洲午夜电影在线| 成人免费视频一区二区|