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

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

?? gen_solve.java

?? 這是一個可自動生成迷宮、自動或人工尋找迷宮路徑的java程序
?? JAVA
字號:
package maze;import java.awt.*;import java.awt.event.*;/** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2003</p> * <p>Company: </p> * @author unascribed * @version 1.0 */public class Gen_Solve {    public static final int NORTH = 0x01;    public static final int WEST = 0x02;    public static final int SOUTH = 0x04;    public static final int EAST = 0x08;    public static final int S_NORTH = 0x10;    public static final int S_WEST = 0x20;    public static final int S_SOUTH = 0x40;    public static final int S_EAST = 0x80;    public static final int W_NORTH = 0x0100;    public static final int W_WEST = 0x0200;    public static final int W_SOUTH = 0x0400;    public static final int W_EAST = 0x0800;    public static final int WALL = 0x0F;    public static final int WRONG = 0x0F00;    public static final int SOLVE = 0xF0;    public static int istrack = 0;    public static int isauto = 0;    public static int nowstart = 1;    public static int total = 0;    private Drawer drawer;    private ControlPanel controlPane;    private ConDialog mydialog = new ConDialog();    private int width;    private int height;    private int[] data;    private int[] stack;    private int [] manstack;    private int start = -1, end = -1;    private int stackPointer = -1;    private int manstackPointer = -1;    private int delayTime = 100;    private boolean stop = false;    private int isover = 0;    private int lastdirect = -1;    private int isfirst = 0;    public Gen_Solve(ControlPanel controlPane, Drawer drawer) {        this(controlPane.getMazeWidth(), controlPane.getMazeHeight());        setControlPane(controlPane);        setDrawer(drawer);    }    public Gen_Solve(int width, int height) {        this.width = width;        this.height = height;        data = new int[width * height];        stack = new int[data.length];        manstack = new int[data.length];        manstack[++manstackPointer] = start;        isfirst = 1;    }    private void Setstack(int width, int height) {        this.width = width;        this.height = height;        data = new int[width * height];        stack = new int[data.length];        manstack = new int[data.length];        manstack[++manstackPointer] = start;    }    public int getWidth() {        return width;    }    public int getHeight() {        return height;    }    public int getData(int x, int y) {        return data[y * width + x];    }    public void setStartEnd() {        int size = width * height;        int[] pos = {0, size - width, size - 1, width - 1};        int i = (int) (Math.random() * 4);        start = pos[i];        i += 2;        if (i > 3) i -= 4;        end = pos[i];    }    public int getStart() {        return start;    }    public int getEnd() {        return end;    }    private int getDirection(int pos) {        int i = 0;        int[] directions = new int[4];        int x = pos % width;        int y = pos / width;        if (y > 0 && (data[pos - width] & 0x0F) == 0) {            directions[i++] = NORTH;        }        if (x > 0 && (data[pos - 1] & 0x0F) == 0) {            directions[i++] = WEST;        }        if (y < height - 1 && (data[pos + width] & 0x0F) == 0) {            directions[i++] = SOUTH;        }        if (x < width - 1 && (data[pos + 1] & 0x0F) == 0) {            directions[i++] = EAST;        }        if (i == 0) {            return -1;        }        return directions[(int) (Math.random() * i)];    }    private int gen_next_step( int pos, int direction) {        int next;        switch (direction) {        case NORTH:            next = pos - width;            data[pos] |= NORTH;            data[next] |= SOUTH;            break;        case WEST:            next = pos - 1;            data[pos] |= WEST;            data[next] |= EAST;            break;        case SOUTH:            next = pos + width;            data[pos] |= SOUTH;            data[next] |= NORTH;            break;        case EAST:            next = pos + 1;            data[pos] |= EAST;            data[next] |= WEST;            break;        default:            throw new RuntimeException("Unknow Error when go (pos = " + pos                                       + ", direction is " + direction + ")");        }        return next;    }    public void generate() {        start = -1;        end = -1;        stackPointer = -1;        manstackPointer = -1;        stop = false;        isover = 0;        lastdirect = -1;        isauto = 0;        total = 0;        width = controlPane.getMazeWidth();        height =  controlPane.getMazeHeight();        if(isfirst == 1)          Setstack(width,height);        int left = data.length - 1;        int pos = (int) (Math.random() * left);        while (left > 0) {          if (stop) return;          int direction;          while ((direction = getDirection(pos)) < 0) {            pos = stack[stackPointer--];            if (stackPointer < 0) {              throw new RuntimeException("Unknowen Error: statck null");            }          }          stack[++stackPointer] = pos;          pos = gen_next_step(pos, direction);          left--;       }       setStartEnd();       draw();    }    public void solve() {        istrack = controlPane.isTrack();        if (start < 0) {            return;        }        stackPointer = -1;        for(int i=0;i<manstackPointer;i++)        {          stack[++stackPointer] = manstack[i];        }        new Thread() {            public void run() {                int pos = nowstart;                while (true) {                    if (stop) return;                    if (pos == end) {                       isover = 1;                       break;                      }                      pos = Solve_next_step(pos);                    if (controlPane != null) {                        delayTime = controlPane.getSolveDelay();                    }                    if (delayTime <= 0) {                        continue;                    }                    draw();                    try {                        Thread.sleep(delayTime);                    } catch (Exception exception) {                        // Ignore                    }                }                draw();               if(isover==1) mydialog.show();            }        }.start();    }    private int solveWrong(int wrongPos) {        int pos = stack[stackPointer--];        if (stackPointer < -1) {            throw new RuntimeException("Unknown Error: statck null");        }        data[wrongPos] &= ~SOLVE;        if (wrongPos == pos - width) {            data[pos] |= W_NORTH;            data[pos] &= ~S_NORTH;            data[wrongPos] |= W_SOUTH;        } else if (wrongPos == pos - 1) {            data[pos] |= W_WEST;            data[pos] &= ~S_WEST;            data[wrongPos] |= W_EAST;        } else if (wrongPos == pos + width) {            data[pos] |= W_SOUTH;            data[pos] &= ~S_SOUTH;            data[wrongPos] |= W_NORTH;        } else if (wrongPos == pos + 1) {            data[pos] |= W_EAST;            data[pos] &= ~S_EAST;            data[wrongPos] |= W_WEST;        } else {            throw new RuntimeException("Unkonwn Error: no way!");        }        return pos;    }    private int Solve_next_step(int pos) {        int x = pos % width;        int y = pos / width;        int next;        if (y > 0 && (data[pos] & NORTH) > 0){          next = pos - width;          if(next == end)            return next;        }        if (x > 0 && (data[pos] & WEST) > 0){          next = pos - 1;          if(next == end)            return next;        }        if (y < height - 1 && (data[pos] & SOUTH) > 0){          next = pos + width;          if(next == end)            return next;        }        if (x < width - 1 && (data[pos] & EAST) > 0){          next = pos + 1;          if(next == end)            return next;        }        if (y > 0 && (data[pos] & NORTH) > 0            && (data[pos] & W_NORTH) == 0 && (data[pos] & S_NORTH) == 0) {            next = pos - width;            data[pos] |= S_NORTH;            data[next] |= S_SOUTH;        } else if (x > 0 && (data[pos] & WEST) > 0                   && (data[pos] & W_WEST) == 0 && (data[pos] & S_WEST) == 0) {            next = pos - 1;            data[pos] |= S_WEST;            data[next] |= S_EAST;        } else if (y < height - 1 && (data[pos] & SOUTH) > 0                   && (data[pos] & W_SOUTH) == 0 && (data[pos] & S_SOUTH) == 0) {            next = pos + width;            data[pos] |= S_SOUTH;            data[next] |= S_NORTH;        } else if (x < width - 1 && (data[pos] & EAST) > 0                   && (data[pos] & W_EAST) == 0 && (data[pos] & S_EAST) == 0) {            next = pos + 1;            data[pos] |= S_EAST;            data[next] |= S_WEST;        } else {            next = solveWrong(pos);            return next;        }        stack[++stackPointer] = pos;        return next;    }    private int man_Solve_next_step(int pos,KeyEvent e) {      int x = pos % width;      int y = pos / width;      int next =-1;      lastdirect = -1;      if (y > 0 && (data[pos] & NORTH) > 0 &&(e.getKeyCode()==KeyEvent.VK_W)){          next = pos - width;          data[pos] |= S_NORTH;          data[next] |= S_SOUTH;          lastdirect = 1;        }     else if (x > 0 && (data[pos] & WEST) > 0 &&(e.getKeyCode()==KeyEvent.VK_A)){          next = pos - 1;          data[pos] |= S_WEST;          data[next] |= S_EAST;          lastdirect = 2;         }      else if (y < height - 1 && (data[pos] & SOUTH) > 0 &&(e.getKeyCode()== KeyEvent.VK_S)){          next = pos + width;          data[pos] |= S_SOUTH;          data[next] |= S_NORTH;          lastdirect = 3;         }      else if (x < width - 1 && (data[pos] & EAST) > 0 &&(e.getKeyCode()== KeyEvent.VK_D)){          next = pos + 1;          data[pos] |= S_EAST;          data[next] |= S_WEST;          lastdirect = 4;       }      else        return -1;      if(total == 0){        manstack[++manstackPointer] = pos;      }      return next;    }    public int man_solve(KeyEvent e,int pos) {            int nowpos;            istrack = controlPane.isTrack();            if (start < 0) {                return -1;            }           if (stop) return -1;           if (pos == end) {              mydialog.show();              return -1;            }            nowpos = pos;            pos = man_Solve_next_step(pos,e);            total++;            if(pos == -1) return -1;            if((manstackPointer > 0) && (pos == manstack[manstackPointer-1])){             switch(lastdirect){             case 1://north               data[pos] &= ~S_SOUTH;               data[pos] |= W_SOUTH;               data[nowpos] &= ~S_NORTH;               data[nowpos] |= W_NORTH;               draw();               data[pos] &= ~W_SOUTH;               data[nowpos] &= ~W_NORTH;             break;             case 2:               data[pos] &= ~S_EAST;               data[pos] |= W_EAST;               data[nowpos] &= ~S_WEST;               data[nowpos] |= W_WEST;               draw();               data[pos] &= ~W_EAST;               data[nowpos] &= ~W_WEST;             break;             case 3:               data[pos] &= ~S_NORTH;               data[pos] |= W_NORTH;               data[nowpos] &= ~S_SOUTH;               data[nowpos] |= W_SOUTH;               draw();               data[pos] &= ~W_NORTH;               data[nowpos] &= ~W_SOUTH;             break;             case 4:               data[pos] &= ~S_WEST;               data[pos] |= W_WEST;               data[nowpos] &= ~S_EAST;               data[nowpos] |= W_EAST;               draw();               data[pos] &= ~W_WEST;               data[nowpos] &= ~W_EAST;             break;             }             manstackPointer--;            }            else{              manstack[++manstackPointer] = pos;              draw();            }            nowstart = pos;            return pos;    }    public void setControlPane(ControlPanel controlPane) {        this.controlPane = controlPane;        controlPane.setGenerator(this);    }    public void setDrawer(Drawer drawer) {        this.drawer = drawer;        drawer.setGenerator(this);    }    private void draw() {        if (drawer == null) return;        drawer.refreshMaze();    }    public void stop() {        stop = true;    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产片一区二区| 欧美一级免费大片| 亚洲男人的天堂网| 91精品福利在线| 香蕉乱码成人久久天堂爱免费| 欧美系列日韩一区| 免费人成网站在线观看欧美高清| 日韩一级完整毛片| 国产黄色精品视频| 亚洲色图视频网站| 欧美日韩国产精品自在自线| 蜜桃精品在线观看| 国产精品伦理在线| 777xxx欧美| 成人中文字幕电影| 亚洲成av人片一区二区三区| 欧美成人女星排名| 色综合中文字幕国产 | 国产成人av网站| 日韩久久一区二区| 91精品国产黑色紧身裤美女| 丁香一区二区三区| 亚洲成人你懂的| 国产女主播在线一区二区| 日本国产一区二区| 国产老肥熟一区二区三区| 亚洲色图欧洲色图婷婷| 欧美一级电影网站| 不卡一区二区三区四区| 三级一区在线视频先锋| 国产欧美一区二区三区在线看蜜臀 | 欧美一区午夜视频在线观看| 国产激情视频一区二区在线观看| 亚洲一区二区三区视频在线| 精品入口麻豆88视频| 在线一区二区视频| 国产成人啪午夜精品网站男同| 亚洲小少妇裸体bbw| 国产亚洲精品精华液| 911精品产国品一二三产区| av亚洲产国偷v产偷v自拍| 日本系列欧美系列| 亚洲综合一区二区精品导航| 中文字幕国产一区| 精品国产亚洲一区二区三区在线观看| 色婷婷亚洲婷婷| 成人a区在线观看| 国产精品资源站在线| 秋霞电影一区二区| 一区二区三区中文免费| 中文字幕第一区| 精品裸体舞一区二区三区| 欧美日韩免费一区二区三区| 93久久精品日日躁夜夜躁欧美| 狠狠色丁香婷综合久久| 免费黄网站欧美| 中文字幕欧美三区| 欧美麻豆精品久久久久久| 岛国一区二区三区| 九九视频精品免费| 奇米综合一区二区三区精品视频 | 亚洲成a人在线观看| 亚洲欧洲国产日韩| 国产精品女人毛片| 国产日韩在线不卡| 欧美韩日一区二区三区| 国产日韩精品一区二区浪潮av| 欧美sm美女调教| 久久综合av免费| 精品国产乱码久久久久久牛牛| 日韩色视频在线观看| 日韩一区二区免费在线电影 | 精品中文字幕一区二区小辣椒 | 久久日一线二线三线suv| 欧美一区二区精美| 精品少妇一区二区三区免费观看 | 久久国产精品第一页| 美女网站色91| 日本欧美大码aⅴ在线播放| 日韩国产欧美在线播放| 日本三级韩国三级欧美三级| 日韩高清欧美激情| 蜜臀av性久久久久蜜臀aⅴ| 日韩一区精品视频| 老司机精品视频线观看86| 蜜桃一区二区三区在线观看| 麻豆91在线观看| 国产美女精品在线| 成人网在线免费视频| 91小视频免费观看| 欧美在线不卡一区| 7777精品伊人久久久大香线蕉完整版| 欧美一区二区私人影院日本| 精品国产乱码久久久久久牛牛| 久久久久久一二三区| 最新国产の精品合集bt伙计| 亚洲已满18点击进入久久| 日韩国产在线观看一区| 国产综合色在线| 99热精品一区二区| 欧美日韩激情一区| 精品免费国产一区二区三区四区| 亚洲国产精品精华液ab| 中文字幕在线播放不卡一区| 亚洲电影激情视频网站| 久久精品国产一区二区| 成人激情校园春色| 欧美日本乱大交xxxxx| 久久这里只精品最新地址| 欧美国产精品一区二区| 亚洲影视资源网| 国产精品一区免费在线观看| 99re热这里只有精品视频| 欧美猛男gaygay网站| 久久亚洲一区二区三区明星换脸 | 欧美国产丝袜视频| 亚洲主播在线播放| 国产毛片精品一区| 欧美在线看片a免费观看| 精品999在线播放| 一区二区三区中文字幕精品精品 | 中文字幕在线观看不卡| 午夜精品免费在线| 国产成人精品免费在线| 欧美日本在线一区| 日韩毛片高清在线播放| 日韩精品成人一区二区三区| 北岛玲一区二区三区四区| 欧美福利电影网| 亚洲精品国产第一综合99久久 | 亚洲综合网站在线观看| 国产一区二区三区免费看| 欧美体内she精视频| 欧美精品一区二区三区四区| 亚洲一区二区三区不卡国产欧美| 欧美肥胖老妇做爰| 一区二区三区四区中文字幕| 美女免费视频一区| 在线观看欧美黄色| 国产精品久久久久影院| 毛片不卡一区二区| 欧洲精品一区二区| 国产精品无遮挡| 狠狠色狠狠色合久久伊人| 欧美另类久久久品| 亚洲乱码精品一二三四区日韩在线| 九色综合国产一区二区三区| 欧美老年两性高潮| 亚洲欧美另类小说视频| 国产mv日韩mv欧美| 精品粉嫩aⅴ一区二区三区四区| 亚洲国产精品综合小说图片区| 成人精品免费看| 久久久久国产精品厨房| 国模一区二区三区白浆| 欧美一区二区观看视频| 性做久久久久久免费观看| 欧美午夜理伦三级在线观看| 一区二区三区蜜桃网| 91在线一区二区三区| 国产精品福利av| aaa亚洲精品| 亚洲欧洲精品一区二区精品久久久| 国产v日产∨综合v精品视频| 国产女人18水真多18精品一级做 | 美女免费视频一区二区| 91精品综合久久久久久| 日韩高清不卡在线| 欧美日韩一级二级三级| 三级在线观看一区二区| 91精品欧美一区二区三区综合在| 午夜欧美一区二区三区在线播放| 欧美性一级生活| 日韩专区中文字幕一区二区| 7777精品伊人久久久大香线蕉完整版 | 大陆成人av片| 中文字幕亚洲区| 欧美自拍丝袜亚洲| 石原莉奈在线亚洲三区| 6080亚洲精品一区二区| 捆绑紧缚一区二区三区视频| 精品88久久久久88久久久| 国产精品一二二区| 综合欧美一区二区三区| 欧美性猛片xxxx免费看久爱| 日精品一区二区| 久久综合九色综合欧美98 | 91黄色激情网站| 视频在线观看91| 久久精品夜夜夜夜久久| 97精品电影院| 午夜视频一区二区| 精品福利一二区| 成人午夜激情视频| 亚洲国产精品影院| 久久午夜免费电影| 91亚洲大成网污www| 三级成人在线视频| 国产精品欧美一级免费| 欧美理论片在线|