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

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

?? snakemodel.java

?? 這是一個(gè)貪食蛇的游戲
?? JAVA
字號(hào):
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Observable;
import java.util.Random;

import javax.swing.JOptionPane;

/**
 * 游戲的Model類,負(fù)責(zé)所有游戲相關(guān)數(shù)據(jù)及運(yùn)行
 */
class SnakeModel extends Observable implements Runnable {
    
	// 蛇運(yùn)行的方向常量
    public static final int UP = 2;
    public static final int DOWN = 4;
    public static final int LEFT = 1;
    public static final int RIGHT = 3;
    
    // 指示位置上有沒蛇體或食物
    private boolean[][] matrix; 
    // 蛇體
   public LinkedList nodeArray = new LinkedList(); 
    // 食物
   public Node food;
    // 蛇活動(dòng)的范圍
    private int maxX;
    private int maxY;
    // 蛇運(yùn)行的方向
    private int direction = UP;
    // 運(yùn)行狀態(tài)
    public boolean running = false;
    // 時(shí)間間隔,毫秒
    public int timeInterval = 200;  
    // 每次的速度變化率
   public double speedChangeRate = 0.75; 
    // 暫停標(biāo)志
    public boolean paused = false;

    // 得分
    public int score = 0; 
    // 吃到食物前移動(dòng)的次數(shù)
    private int countMove = 0;
    
    //構(gòu)造方法
    public SnakeModel(int maxX, int maxY) {
        this.maxX = maxX;
        this.maxY = maxY;
        reset();
    }
    // 重置游戲
    public void reset() {
    	// 蛇運(yùn)行的方向初始向上
        direction = SnakeModel.UP;
        timeInterval = 200; 
        paused = false;
        score = 0;
        countMove = 0;

        // 初始化蛇活動(dòng)的范圍矩陣, 全部清0
        matrix = new boolean[maxX][maxY];
        for (int i = 0; i < maxX; i++) {
            matrix[i] = new boolean[maxY];
            Arrays.fill(matrix[i], false);
        }

        // 初始化蛇體,如果橫向位置超過20個(gè),長度為10,否則為橫向位置的一半
        int initArrayLength = maxX > 20 ? 10 : maxX / 2;
        nodeArray.clear();
        // 初始蛇體居中顯示
        int x = maxX / 2;
        int y = maxY / 2;
        for (int i = 0; i < initArrayLength; i++) {
            nodeArray.addLast(new Node(x, y));
            matrix[x][y] = true;
            x++;
        }

        // 創(chuàng)建食物
        food = createFood();
        matrix[food.x][food.y] = true;
    }

    // 改變蛇運(yùn)動(dòng)的方向
    public void changeDirection(int newDirection) {
        // 改變的方向不能與原來方向同向或反向
        if (direction % 2 != newDirection % 2) {
            direction = newDirection;
        }
    }

    /**
     * 蛇運(yùn)行一步
     */
    public boolean moveOn() {
    	// 獲得蛇頭的位置
        Node head = (Node) nodeArray.getFirst();
        int headX = head.x;
        int headY = head.y;

        // 根據(jù)運(yùn)行方向增減坐標(biāo)值
        switch (direction) {
            case UP:
                headY--;
                break;
            case DOWN:
                headY++;
                break;
            case LEFT:
                headX--;
                break;
            case RIGHT:
                headX++;
                break;
        }

        // 如果新坐標(biāo)落在有效范圍內(nèi),則進(jìn)行處理
        if ((0 <= headX && headX < maxX) && (0 <= headY && headY < maxY)) {
            if (matrix[headX][headY]) { 
                // 如果新坐標(biāo)的點(diǎn)上有東西(蛇體或者食物)
                if (headX == food.x && headY == food.y) { 
                	speedUp();
                    // 吃到食物,成功
                    nodeArray.addFirst(food); // 從蛇頭贈(zèng)長

                    // 分?jǐn)?shù)規(guī)則,與移動(dòng)改變方向的次數(shù)和速度兩個(gè)元素有關(guān)
                    int scoreGet = (10000 - 200 * countMove) / timeInterval;
                    score += scoreGet > 0 ? scoreGet : 10;
                    countMove = 0;

                    food = createFood(); // 創(chuàng)建新的食物
                    matrix[food.x][food.y] = true; // 設(shè)置食物所在位置
                    return true;
                } else {
                    // 吃到蛇體自身,失敗
                    return false;
                }
            } else { 
                // 如果新坐標(biāo)的點(diǎn)上沒有東西(蛇體),移動(dòng)蛇體
                nodeArray.addFirst(new Node(headX, headY));
                matrix[headX][headY] = true;
                head = (Node) nodeArray.removeLast();
                matrix[head.x][head.y] = false;
                countMove++;
                return true;
            }
        }
        // 觸到邊線,失敗
        return false; 
    }

    public void run() {
        running = true;
        while (running) {
            try {
                Thread.sleep(timeInterval);
            } catch (Exception e) {
                break;
            }

            if (!paused) {
                if (moveOn()) {
                	// Model通知View數(shù)據(jù)已經(jīng)更新,請更新試圖
                    setChanged(); 
                    notifyObservers();
                } else {
                    JOptionPane.showMessageDialog(null, "you failed", 
                    		"Game Over", JOptionPane.INFORMATION_MESSAGE);
                    break;
                }
            }
        }
        if (!running){
            JOptionPane.showMessageDialog(null, "you stoped the game", 
            		"Game Over", JOptionPane.INFORMATION_MESSAGE);
        }
    }
    // 創(chuàng)建食物
    private Node createFood() {
        int x = 0;
        int y = 0;
        // 隨機(jī)獲取一個(gè)有效區(qū)域內(nèi)的與蛇體和食物不重疊的位置
        do {
            Random r = new Random();
            x = r.nextInt(maxX);
            y = r.nextInt(maxY);
        } while (matrix[x][y]);

        return new Node(x, y);
    }
    // 加速運(yùn)行
    public void speedUp() {
        timeInterval *= speedChangeRate;
    }
    // 減速運(yùn)行
    public void speedDown() {
        timeInterval /= speedChangeRate;
    }
    // 改變暫停狀態(tài)
    public void changePauseState() {
        paused = !paused;
    }
    /**
     * @return Returns the running.
     */
    public boolean isRunning() {
        return running;
    }
    /**
     * @param running The running to set.
     */
    public void setRunning(boolean running) {
        this.running = running;
    }    
    /**
     * @return Returns the nodeArray.
     */
    public LinkedList getNodeArray() {
        return nodeArray;
    } 
    /**
     * @return Returns the food.
     */
    public Node getFood() {
        return food;
    }
    /**
     * @return Returns the score.
     */
    public int getScore() {
        return score;
    }
    public String toString() {
        String result = "";
        for (int i = 0; i < nodeArray.size(); ++i) {
            Node n = (Node) nodeArray.get(i);
            result += "[" + n.x + "," + n.y + "]";
        }
        return result;
    }
}

// 位置的描述類
class Node {
	int x;
	int y;

	Node(int x, int y) {
		this.x = x;
		this.y = y;
	}
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区主播在线| 亚洲美女在线国产| 国产精品视频免费| 伊人一区二区三区| 日韩电影在线一区二区三区| 国产高清无密码一区二区三区| 国产福利一区在线观看| 99久久99久久综合| 91精品国产91热久久久做人人 | 一区二区三区不卡视频| 日一区二区三区| 成人一区在线看| 欧美视频中文字幕| 精品1区2区在线观看| 中文字幕中文字幕一区二区| 日韩av电影免费观看高清完整版 | 欧美性猛交xxxxxxxx| 日韩免费高清av| 日韩理论片在线| 裸体健美xxxx欧美裸体表演| 99精品桃花视频在线观看| 在线播放欧美女士性生活| 国产精品青草综合久久久久99| 五月开心婷婷久久| 成人爱爱电影网址| 欧美一区二区三区四区久久| 国产精品电影院| 麻豆精品视频在线| 91国模大尺度私拍在线视频| 亚洲精品一区二区在线观看| 一区二区三区在线看| 黄页视频在线91| 欧美日韩精品是欧美日韩精品| 国产日韩欧美电影| 视频一区二区三区中文字幕| 成人免费电影视频| 欧美mv日韩mv| 午夜视频一区二区| 一本久久综合亚洲鲁鲁五月天 | 韩国精品一区二区| 7777精品伊人久久久大香线蕉的 | 国产精品1区2区| 69精品人人人人| 亚洲丝袜制服诱惑| 成人妖精视频yjsp地址| 日韩久久精品一区| 五月天网站亚洲| 在线中文字幕不卡| 中文字幕永久在线不卡| 国产成人一区在线| 精品国产凹凸成av人网站| 午夜激情一区二区三区| 在线看日本不卡| 亚洲欧美经典视频| av亚洲精华国产精华| 欧美国产日韩精品免费观看| 激情伊人五月天久久综合| 欧美日韩国产成人在线91| 一个色综合网站| 一本久道中文字幕精品亚洲嫩| 国产精品午夜电影| 国产99精品在线观看| 久久网这里都是精品| 激情国产一区二区| 久久人人超碰精品| 韩国v欧美v亚洲v日本v| 精品理论电影在线观看| 老司机午夜精品| 日韩欧美综合一区| 美女性感视频久久| 日韩美女视频在线| 精品亚洲欧美一区| xfplay精品久久| 国产美女在线观看一区| 久久久国产精华| 国产福利一区二区| 国产女同性恋一区二区| 国产成人一区在线| 国产精品视频在线看| 不卡一区二区在线| 亚洲精品日韩专区silk| 欧美性大战久久久久久久蜜臀| 亚洲综合自拍偷拍| 欧美日韩国产综合久久| 奇米综合一区二区三区精品视频| 欧美一区二区黄| 韩国精品主播一区二区在线观看| www激情久久| 成人精品免费视频| 一区二区三区日韩| 欧美一级一级性生活免费录像| 精品一区二区三区在线播放| 久久精品夜色噜噜亚洲a∨| 国产成a人亚洲精品| 亚洲免费av高清| 7777精品久久久大香线蕉| 捆绑调教美女网站视频一区| 久久久91精品国产一区二区三区| 成人永久aaa| 一区av在线播放| 91精品国产麻豆国产自产在线| 韩国精品主播一区二区在线观看| 中文字幕不卡的av| 欧美亚洲动漫制服丝袜| 男人操女人的视频在线观看欧美| 26uuu精品一区二区三区四区在线| av资源站一区| 亚洲国产欧美在线| 欧美xxx久久| 99re在线视频这里只有精品| 视频在线在亚洲| 国产欧美精品一区二区三区四区 | 亚洲精品ww久久久久久p站| 欧美老肥妇做.爰bbww视频| 捆绑调教美女网站视频一区| 国产精品不卡在线观看| 在线成人午夜影院| 国产69精品久久久久毛片| 亚洲午夜av在线| 久久久精品影视| 精品视频一区二区三区免费| 国内久久婷婷综合| 亚洲一区二区三区中文字幕| 精品卡一卡二卡三卡四在线| 91香蕉视频污| 激情五月播播久久久精品| 亚洲视频小说图片| 欧美变态口味重另类| 在线亚洲一区观看| 理论片日本一区| 一区二区三区在线观看网站| 2020日本不卡一区二区视频| 在线观看成人小视频| 国产黄人亚洲片| 日本aⅴ亚洲精品中文乱码| 1024国产精品| 亚洲精品在线三区| 欧美日本一区二区三区| 99久久伊人精品| 久久爱www久久做| 亚洲一区二区三区自拍| 国产精品美女久久久久久2018| 5566中文字幕一区二区电影| www..com久久爱| 国产自产高清不卡| 全部av―极品视觉盛宴亚洲| 亚洲男女毛片无遮挡| 国产无遮挡一区二区三区毛片日本| 欧美日韩视频在线一区二区| 不卡视频一二三| 国产精品99久久久久| 男男成人高潮片免费网站| 一区二区三区精品| 中文字幕一区在线观看| 国产蜜臀97一区二区三区| 日韩精品一区二区三区视频播放| 欧美日韩欧美一区二区| 91丨九色丨蝌蚪丨老版| 国产精品一区二区男女羞羞无遮挡| 丝袜美腿高跟呻吟高潮一区| 一区二区三区四区视频精品免费| 国产欧美一区二区三区在线老狼| 日韩欧美一级片| 欧美放荡的少妇| 欧美三级在线看| 欧美午夜精品一区二区蜜桃| 色噜噜狠狠色综合中国| av电影天堂一区二区在线| 国产成人aaaa| 国产91露脸合集magnet| 国产自产2019最新不卡| 国产乱淫av一区二区三区| 久久国产三级精品| 麻豆国产91在线播放| 青青青伊人色综合久久| 全国精品久久少妇| 捆绑变态av一区二区三区| 美国一区二区三区在线播放| 午夜精品久久久久久久久久| 亚洲一区二区三区四区在线| 一区二区三区日韩欧美精品| 一区二区三区日韩| 亚洲va欧美va国产va天堂影院| 亚洲国产一区视频| 亚洲午夜国产一区99re久久| 亚洲v精品v日韩v欧美v专区| 同产精品九九九| 香蕉成人啪国产精品视频综合网| 亚洲福利一区二区三区| 日本在线观看不卡视频| 麻豆91小视频| 国产一区二区三区黄视频 | 欧美顶级少妇做爰| 91精品国产综合久久福利软件| 欧美猛男超大videosgay| 欧美精品tushy高清| 日韩欧美色电影| 国产亚洲精品久| 国产精品不卡视频| 一片黄亚洲嫩模|