• <tfoot id='22foaab0'></tfoot>

    • <bdo id='7u20to08'></bdo><ul id='wydhvv9i'></ul>
    <legend id='kc20dv5o'><style id='56sxqgvm'><dir id='4379467r'><q id='fwebi1gn'></q></dir></style></legend>
      <i id='jvgb1f64'><tr id='urzq2w7z'><dt id='sqx0zds2'><q id='31mcasv1'><span id='covg6z1q'><b id='7m3x7hvb'><form id='xs8ftbpo'><ins id='lg0cn68u'></ins><ul id='fsg9xyza'></ul><sub id='olfj2j9q'></sub></form><legend id='4mvtyev6'></legend><bdo id='k0qt7nqc'><pre id='0q7q05jm'><center id='yqkgg9ru'></center></pre></bdo></b><th id='fnnewf0u'></th></span></q></dt></tr></i><div id='c7kuez3t'><tfoot id='4s5hkgfr'></tfoot><dl id='z2xp5hpi'><fieldset id='kttzd45s'></fieldset></dl></div>

      1. <small id='jcnx90qa'></small><noframes id='rgna4cf1'>

      2. 欢迎来到入门教程网!

        Java编程

        当前位置:主页 > 软件编程 > Java编程 >

        贪吃蛇原代码java 贪吃蛇游戏代码java

        来源:本站原创|时间:2023-04-07|栏目:Java编程|点击:

        求一段JAVA编写的贪吃蛇小程序源代码

        用MVC方式实现的贪吃蛇游戏,共有4个类。运行GreedSnake运行即可。主要是观察者模式的使用,我已经添加了很多注释了。

        1、

        /*

        * 程序名称:贪食蛇

        * 原作者:BigF

        * 修改者:algo

        * 说明:我以前也用C写过这个程序,现在看到BigF用Java写的这个,发现虽然作者自称是Java的初学者,

        * 但是明显编写程序的素养不错,程序结构写得很清晰,有些细微得地方也写得很简洁,一时兴起之

        * 下,我认真解读了这个程序,发现数据和表现分开得很好,而我近日正在学习MVC设计模式,

        * 因此尝试把程序得结构改了一下,用MVC模式来实现,对源程序得改动不多。

        * 我同时也为程序增加了一些自己理解得注释,希望对大家阅读有帮助。

        */

        package mvcTest;

        /**

        * @author WangYu

        * @version 1.0

        * Description:

        * /pre

        * Create on :Date :2005-6-13 Time:15:57:16

        * LastModified:

        * History:

        */

        public class GreedSnake {

        public static void main(String[] args) {

        SnakeModel model = new SnakeModel(20,30);

        SnakeControl control = new SnakeControl(model);

        SnakeView view = new SnakeView(model,control);

        //添加一个观察者,让view成为model的观察者

        model.addObserver(view);

        (new Thread(model)).start();

        }

        }

        -------------------------------------------------------------

        2、

        package mvcTest;

        //SnakeControl.java

        import java.awt.event.KeyEvent;

        import java.awt.event.KeyListener;

        /**

        * MVC中的Controler,负责接收用户的操作,并把用户操作通知Model

        */

        public class SnakeControl implements KeyListener{

        SnakeModel model;

        public SnakeControl(SnakeModel model){

        this.model = model;

        }

        public void keyPressed(KeyEvent e) {

        int keyCode = e.getKeyCode();

        if (model.running){ // 运行状态下,处理的按键

        switch (keyCode) {

        case KeyEvent.VK_UP:

        model.changeDirection(SnakeModel.UP);

        break;

        case KeyEvent.VK_DOWN:

        model.changeDirection(SnakeModel.DOWN);

        break;

        case KeyEvent.VK_LEFT:

        model.changeDirection(SnakeModel.LEFT);

        break;

        case KeyEvent.VK_RIGHT:

        model.changeDirection(SnakeModel.RIGHT);

        break;

        case KeyEvent.VK_ADD:

        case KeyEvent.VK_PAGE_UP:

        model.speedUp();

        break;

        case KeyEvent.VK_SUBTRACT:

        case KeyEvent.VK_PAGE_DOWN:

        model.speedDown();

        break;

        case KeyEvent.VK_SPACE:

        case KeyEvent.VK_P:

        model.changePauseState();

        break;

        default:

        }

        }

        // 任何情况下处理的按键,按键导致重新启动游戏

        if (keyCode == KeyEvent.VK_R ||

        keyCode == KeyEvent.VK_S ||

        keyCode == KeyEvent.VK_ENTER) {

        model.reset();

        }

        }

        public void keyReleased(KeyEvent e) {

        }

        public void keyTyped(KeyEvent e) {

        }

        }

        -------------------------------------------------------------

        3、

        /*

        *

        */

        package mvcTest;

        /**

        * 游戏的Model类,负责所有游戏相关数据及运行

        * @author WangYu

        * @version 1.0

        * Description:

        * /pre

        * Create on :Date :2005-6-13 Time:15:58:33

        * LastModified:

        * History:

        */

        //SnakeModel.java

        import javax.swing.*;

        import java.util.Arrays;

        import java.util.LinkedList;

        import java.util.Observable;

        import java.util.Random;

        /**

        * 游戏的Model类,负责所有游戏相关数据及运行

        */

        class SnakeModel extends Observable implements Runnable {

        boolean[][] matrix; // 指示位置上有没蛇体或食物

        LinkedList nodeArray = new LinkedList(); // 蛇体

        Node food;

        int maxX;

        int maxY;

        int direction = 2; // 蛇运行的方向

        boolean running = false; // 运行状态

        int timeInterval = 200; // 时间间隔,毫秒

        double speedChangeRate = 0.75; // 每次得速度变化率

        boolean paused = false; // 暂停标志

        int score = 0; // 得分

        int countMove = 0; // 吃到食物前移动的次数

        // UP and DOWN should be even

        // RIGHT and LEFT should be odd

        public static final int UP = 2;

        public static final int DOWN = 4;

        public static final int LEFT = 1;

        public static final int RIGHT = 3;

        public SnakeModel( int maxX, int maxY) {

        this.maxX = maxX;

        this.maxY = maxY;

        reset();

        }

        public void reset(){

        direction = SnakeModel.UP; // 蛇运行的方向

        timeInterval = 200; // 时间间隔,毫秒

        paused = false; // 暂停标志

        score = 0; // 得分

        countMove = 0; // 吃到食物前移动的次数

        // initial matirx, 全部清0

        matrix = new boolean[maxX][];

        for (int i = 0; i maxX; ++i) {

        matrix[i] = new boolean[maxY];

        Arrays.fill(matrix[i], false);

        }

        // initial the snake

        // 初始化蛇体,如果横向位置超过20个,长度为10,否则为横向位置的一半

        int initArrayLength = maxX 20 ? 10 : maxX / 2;

        nodeArray.clear();

        for (int i = 0; i initArrayLength; ++i) {

        int x = maxX / 2 + i;//maxX被初始化为20

        int y = maxY / 2; //maxY被初始化为30

        //nodeArray[x,y]: [10,15]-[11,15]-[12,15]~~[20,15]

        //默认的运行方向向上,所以游戏一开始nodeArray就变为:

        // [10,14]-[10,15]-[11,15]-[12,15]~~[19,15]

        nodeArray.addLast(new Node(x, y));

        matrix[x][y] = true;

        }

        // 创建食物

        food = createFood();

        matrix[food.x][food.y] = true;

        }

        public void changeDirection(int newDirection) {

        // 改变的方向不能与原来方向同向或反向

        if (direction % 2 != newDirection % 2) {

        direction = newDirection;

        }

        }

        /**

        * 运行一次

        * @return

        */

        public boolean moveOn() {

        Node n = (Node) nodeArray.getFirst();

        int x = n.x;

        int y = n.y;

        // 根据方向增减坐标值

        switch (direction) {

        case UP:

        y--;

        break;

        case DOWN:

        y++;

        break;

        case LEFT:

        x--;

        break;

        case RIGHT:

        x++;

        break;

        }

        // 如果新坐标落在有效范围内,则进行处理

        if ((0 = x x maxX) (0 = y y maxY)) {

        if (matrix[x][y]) { // 如果新坐标的点上有东西(蛇体或者食物)

        if (x == food.x y == food.y) { // 吃到食物,成功

        nodeArray.addFirst(food); // 从蛇头赠长

        // 分数规则,与移动改变方向的次数和速度两个元素有关

        int scoreGet = (10000 - 200 * countMove) / timeInterval;

        score += scoreGet 0 ? scoreGet : 10;

        countMove = 0;

        food = createFood(); // 创建新的食物

        matrix[food.x][food.y] = true; // 设置食物所在位置

        return true;

        } else // 吃到蛇体自身,失败

        return false;

        } else { // 如果新坐标的点上没有东西(蛇体),移动蛇体

        nodeArray.addFirst(new Node(x, y));

        matrix[x][y] = true;

        n = (Node) nodeArray.removeLast();

        matrix[n.x][n.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()) {

        setChanged(); // Model通知View数据已经更新

        notifyObservers();

        } else {

        JOptionPane.showMessageDialog(null,

        "you failed",

        "Game Over",

        JOptionPane.INFORMATION_MESSAGE);

        break;

        }

        }

        }

        running = false;

        }

        private Node createFood() {

        int x = 0;

        int y = 0;

        // 随机获取一个有效区域内的与蛇体和食物不重叠的位置

        do {

        Random r = new Random();

        x = r.nextInt(maxX);

        y = r.nextInt(maxY);

        } while (matrix[x][y]);

        return new Node(x, y);

        }

        public void speedUp() {

        timeInterval *= speedChangeRate;

        }

        public void speedDown() {

        timeInterval /= speedChangeRate;

        }

        public void changePauseState() {

        paused = !paused;

        }

        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;

        }

        }

        ------------------------------------------------------------

        4、

        package mvcTest;

        //SnakeView.java

        import javax.swing.*;

        import java.awt.*;

        import java.util.Iterator;

        import java.util.LinkedList;

        import java.util.Observable;

        import java.util.Observer;

        /**

        * MVC模式中得Viewer,只负责对数据的显示,而不用理会游戏的控制逻辑

        */

        public class SnakeView implements Observer {

        SnakeControl control = null;

        SnakeModel model = null;

        JFrame mainFrame;

        Canvas paintCanvas;

        JLabel labelScore;

        public static final int canvasWidth = 200;

        public static final int canvasHeight = 300;

        public static final int nodeWidth = 10;

        public static final int nodeHeight = 10;

        public SnakeView(SnakeModel model, SnakeControl control) {

        this.model = model;

        this.control = control;

        mainFrame = new JFrame("GreedSnake");

        Container cp = mainFrame.getContentPane();

        // 创建顶部的分数显示

        labelScore = new JLabel("Score:");

        cp.add(labelScore, BorderLayout.NORTH);

        // 创建中间的游戏显示区域

        paintCanvas = new Canvas();

        paintCanvas.setSize(canvasWidth + 1, canvasHeight + 1);

        paintCanvas.addKeyListener(control);

        cp.add(paintCanvas, BorderLayout.CENTER);

        // 创建底下的帮助栏

        JPanel panelButtom = new JPanel();

        panelButtom.setLayout(new BorderLayout());

        JLabel labelHelp;

        labelHelp = new JLabel("PageUp, PageDown for speed;", JLabel.CENTER);

        panelButtom.add(labelHelp, BorderLayout.NORTH);

        labelHelp = new JLabel("ENTER or R or S for start;", JLabel.CENTER);

        panelButtom.add(labelHelp, BorderLayout.CENTER);

        labelHelp = new JLabel("SPACE or P for pause", JLabel.CENTER);

        panelButtom.add(labelHelp, BorderLayout.SOUTH);

        cp.add(panelButtom, BorderLayout.SOUTH);

        mainFrame.addKeyListener(control);

        mainFrame.pack();

        mainFrame.setResizable(false);

        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        mainFrame.setVisible(true);

        }

        void repaint() {

        Graphics g = paintCanvas.getGraphics();

        //draw background

        g.setColor(Color.WHITE);

        g.fillRect(0, 0, canvasWidth, canvasHeight);

        // draw the snake

        g.setColor(Color.BLACK);

        LinkedList na = model.nodeArray;

        Iterator it = na.iterator();

        while (it.hasNext()) {

        Node n = (Node) it.next();

        drawNode(g, n);

        }

        // draw the food

        g.setColor(Color.RED);

        Node n = model.food;

        drawNode(g, n);

        updateScore();

        }

        private void drawNode(Graphics g, Node n) {

        g.fillRect(n.x * nodeWidth,

        n.y * nodeHeight,

        nodeWidth - 1,

        nodeHeight - 1);

        }

        public void updateScore() {

        String s = "Score: " + model.score;

        labelScore.setText(s);

        }

        public void update(Observable o, Object arg) {

        repaint();

        }

        }

        希望采纳

        java贪吃蛇代码注释求解

        import java.awt.Color;

        import java.awt.Graphics;

        import java.awt.Graphics2D;

        import java.awt.Rectangle;

        import java.awt.event.KeyAdapter;

        import java.awt.event.KeyEvent;

        import java.awt.image.BufferedImage;

        import java.util.ArrayList;

        import java.util.List;

        import javax.swing.JFrame;

        public class InterFace extends JFrame {

        /**

        * WIDTH:宽

        * HEIGHT:高

        * SLEEPTIME:可以看作蛇运动的速度

        * L = 1,R = 2, U = 3, D = 4 左右上下代码

        */

        public static final int WIDTH = 800, HEIGHT = 600, SLEEPTIME = 200, L = 1,R = 2, U = 3, D = 4;

        BufferedImage offersetImage= new BufferedImage(WIDTH, HEIGHT,BufferedImage.TYPE_3BYTE_BGR)

        Rectangle rect = new Rectangle(20, 40, 15 * 50, 15 * 35);

        Snake snake;

        Node node;

        public InterFace() {

        //创建"蛇"对象

        snake = new Snake(this);

        //创建"食物"对象

        createNode();

        this.setBounds(100, 100, WIDTH, HEIGHT);

        //添加键盘监听器

        this.addKeyListener(new KeyAdapter() {

        public void keyPressed(KeyEvent arg0) {

        System.out.println(arg0.getKeyCode());

        switch (arg0.getKeyCode()) {

        //映射上下左右4个键位

        case KeyEvent.VK_LEFT:

        snake.dir = L;

        break;

        case KeyEvent.VK_RIGHT:

        snake.dir = R;

        break;

        case KeyEvent.VK_UP:

        snake.dir = U;

        break;

        case KeyEvent.VK_DOWN:

        snake.dir = D;

        }

        }

        });

        this.setTitle("贪吃蛇 0.1 By : Easy");

        this.setDefaultCloseOperation(EXIT_ON_CLOSE);

        this.setVisible(true);

        //启动线程,开始执行

        new Thread(new ThreadUpadte()).start();

        }

        public void paint(Graphics g) {

        Graphics2D g2d = (Graphics2D) offersetImage.getGraphics();

        g2d.setColor(Color.white);

        g2d.fillRect(0, 0, WIDTH, HEIGHT);

        g2d.setColor(Color.black);

        g2d.drawRect(rect.x, rect.y, rect.width, rect.height);

        //如果蛇碰撞(吃)到食物,则创建新食物

        if (snake.hit(node)) {

        createNode();

        }

        snake.draw(g2d);

        node.draw(g2d);

        g.drawImage(offersetImage, 0, 0, null);

        }

        class ThreadUpadte implements Runnable {

        public void run() {

        //无限重绘画面

        while (true) {

        try {

        Thread.sleep(SLEEPTIME);

        repaint(); //

        } catch (InterruptedException e) {

        e.printStackTrace();

        }

        }

        }

        }

        /**

        * 创建食物

        */

        public void createNode() {

        //随机食物的出现位置

        int x = (int) (Math.random() * 650) + 50,y = (int) (Math.random() * 500) + 50;

        Color color = Color.blue;

        node = new Node(x, y, color);

        }

        public static void main(String args[]) {

        new InterFace();

        }

        }

        /**

        * 节点类(包括食物和蛇的身躯组成节点)

        */

        class Node {

        int x, y, width = 15, height = 15;

        Color color;

        public Node(int x, int y, Color color) {

        this(x, y);

        this.color = color;

        }

        public Node(int x, int y) {

        this.x = x;

        this.y = y;

        this.color = color.black;

        }

        public void draw(Graphics2D g2d) {

        g2d.setColor(color);

        g2d.drawRect(x, y, width, height);

        }

        public Rectangle getRect() {

        return new Rectangle(x, y, width, height);

        }

        }

        /**

        * 蛇

        */

        class Snake {

        public ListNode nodes = new ArrayListNode();

        InterFace interFace;

        int dir=InterFace.R;

        public Snake(InterFace interFace) {

        this.interFace = interFace;

        nodes.add(new Node(20 + 150, 40 + 150));

        addNode();

        }

        /**

        * 是否碰撞到食物

        * @return true 是 false 否

        */

        public boolean hit(Node node) {

        //遍历整个蛇体是否与食物碰撞

        for (int i = 0; i nodes.size(); i++) {

        if (nodes.get(i).getRect().intersects(node.getRect())) {

        addNode();

        return true;

        }

        }

        return false;

        }

        public void draw(Graphics2D g2d) {

        for (int i = 0; i nodes.size(); i++) {

        nodes.get(i).draw(g2d);

        }

        move();

        }

        public void move() {

        nodes.remove((nodes.size() - 1));

        addNode();

        }

        public synchronized void addNode() {

        Node nodeTempNode = nodes.get(0);

        //如果方向

        switch (dir) {

        case InterFace.L:

        //判断是否会撞墙

        if (nodeTempNode.x = 20) {

        nodeTempNode = new Node(20 + 15 * 50, nodeTempNode.y);

        }

        nodes.add(0, new Node(nodeTempNode.x - nodeTempNode.width,

        nodeTempNode.y));

        break;

        case InterFace.R:

        //判断是否会撞墙

        if (nodeTempNode.x = 20 + 15 * 50 - nodeTempNode.width) {

        nodeTempNode = new Node(20 - nodeTempNode.width, nodeTempNode.y);

        }

        nodes.add(0, new Node(nodeTempNode.x + nodeTempNode.width,

        nodeTempNode.y));

        break;

        case InterFace.U:

        //判断是否会撞墙

        if (nodeTempNode.y = 40) {

        nodeTempNode = new Node(nodeTempNode.x, 40 + 15 * 35);

        }

        nodes.add(0, new Node(nodeTempNode.x, nodeTempNode.y - nodeTempNode.height));

        break;

        case InterFace.D:

        //判断是否会撞墙

        if (nodeTempNode.y = 40 + 15 * 35 - nodeTempNode.height) {

        nodeTempNode = new Node(nodeTempNode.x,40 - nodeTempNode.height);

        }

        nodes.add(0, new Node(nodeTempNode.x, nodeTempNode.y + nodeTempNode.height));

        break;

        }

        }

        }

        求java贪吃蛇的编程,并有注释

        J2ME贪吃蛇源代码——200行左右,包含详细注释 package snake;import javax.microedition.midlet.*;

        import javax.microedition.lcdui.*;public class SnakeMIDlet extends MIDlet {

        SnakeCanvas displayable = new SnakeCanvas();

        public SnakeMIDlet() {

        Display.getDisplay(this).setCurrent(displayable);

        }public void startApp() {}public void pauseApp() {}public void destroyApp(boolean unconditional) {}}//文件名:SnakeCanvas.javapackage snake;import java.util.*;

        import javax.microedition.lcdui.*;/**

        * 贪吃蛇游戏

        */

        public class SnakeCanvas extends Canvas implements Runnable{

        /**存储贪吃蛇节点坐标,其中第二维下标为0的代表x坐标,第二维下标是1的代表y坐标*/

        int[][] snake = new int[200][2];

        /**已经使用的节点数量*/

        int snakeNum;

        /**贪吃蛇运动方向,0代表向上,1代表向下,2代表向左,3代表向右*/

        int direction;

        /*移动方向*/

        /**向上*/

        private final int DIRECTION_UP = 0;

        /**向下*/

        private final int DIRECTION_DOWN = 1;

        /**向左*/

        private final int DIRECTION_LEFT = 2;

        /**向右*/

        private final int DIRECTION_RIGHT = 3;/**游戏区域宽度*/

        int width;

        /**游戏区域高度*/

        int height;/**蛇身单元宽度*/

        private final byte SNAKEWIDTH = 4;/**是否处于暂停状态,true代表暂停*/

        boolean isPaused = false;

        /**是否处于运行状态,true代表运行*/

        boolean isRun = true;/**时间间隔*/

        private final int SLEEP_TIME = 300;

        /**食物的X坐标*/

        int foodX;

        /**食物的Y坐标*/

        int foodY;

        /**食物的闪烁控制*/

        boolean b = true;

        /**Random对象*/

        Random random = new Random();

        public SnakeCanvas() {

        //初始化

        init();

        width = this.getWidth();

        height = this.getHeight();

        //启动线程

        new Thread(this).start();

        }/**

        * 初始化开始数据

        */

        private void init(){

        //初始化节点数量

        snakeNum = 7;

        //初始化节点数据

        for(int i = 0;i snakeNum;i++){

        snake[i][0] = 100 - SNAKEWIDTH * i;

        snake[i][1] = 40;

        }

        //初始化移动方向

        direction = DIRECTION_RIGHT;

        //初始化食物坐标

        foodX = 100;

        foodY = 100;

        }protected void paint(Graphics g) {

        //清屏

        g.setColor(0xffffff);

        g.fillRect(0,0,width,height);

        g.setColor(0);//绘制蛇身

        for(int i = 0;i snakeNum;i++){

        g.fillRect(snake[i][0],snake[i][1],SNAKEWIDTH,SNAKEWIDTH);

        }

        //绘制食物

        if(b){

        g.fillRect(foodX,foodY,SNAKEWIDTH,SNAKEWIDTH);

        }

        }private void move(int direction){

        //蛇身移动

        for(int i = snakeNum - 1;i 0;i--){

        snake[i][0] = snake[i - 1][0];

        snake[i][1] = snake[i - 1][1];

        }//第一个单元格移动

        switch(direction){

        case DIRECTION_UP:

        snake[0][1] = snake[0][1] - SNAKEWIDTH;

        break;

        case DIRECTION_DOWN:

        snake[0][1] = snake[0][1] + SNAKEWIDTH;

        break;

        case DIRECTION_LEFT:

        snake[0][0] = snake[0][0] - SNAKEWIDTH;

        break;

        case DIRECTION_RIGHT:

        snake[0][0] = snake[0][0] + SNAKEWIDTH;

        break;

        }

        }

        /**

        * 吃掉食物,自身增长

        */

        private void eatFood(){

        //判别蛇头是否和食物重叠

        if(snake[0][0] == foodX snake[0][1] == foodY){

        snakeNum++;

        generateFood();

        }

        }

        /**

        * 产生食物

        * 说明:食物的坐标必须位于屏幕内,且不能和蛇身重合

        */

        private void generateFood(){

        while(true){

        foodX = Math.abs(random.nextInt() % (width - SNAKEWIDTH + 1))

        / SNAKEWIDTH * SNAKEWIDTH;

        foodY = Math.abs(random.nextInt() % (height - SNAKEWIDTH + 1))

        / SNAKEWIDTH * SNAKEWIDTH;

        boolean b = true;

        for(int i = 0;i snakeNum;i++){

        if(foodX == snake[i][0] snake[i][1] == foodY){

        b = false;

        break;

        }

        }

        if(b){

        break;

        }

        }

        }

        /**

        * 判断游戏是否结束

        * 结束条件:

        * 1、蛇头超出边界

        * 2、蛇头碰到自身

        */

        private boolean isGameOver(){

        //边界判别

        if(snake[0][0] 0 || snake[0][0] (width - SNAKEWIDTH) ||

        snake[0][1] 0 || snake[0][1] (height - SNAKEWIDTH)){

        return true;

        }

        //碰到自身

        for(int i = 4;i snakeNum;i++){

        if(snake[0][0] == snake[i][0]

        snake[0][1] == snake[i][1]){

        return true;

        }

        }

        return false;

        }/**

        * 事件处理

        */

        public void keyPressed(int keyCode){

        int action = this.getGameAction(keyCode);

        //改变方向

        switch(action){

        case UP:

        if(direction != DIRECTION_DOWN){

        direction = DIRECTION_UP;

        }

        break;

        case DOWN:

        if(direction != DIRECTION_UP){

        direction = DIRECTION_DOWN;

        }

        break;

        case LEFT:

        if(direction != DIRECTION_RIGHT){

        direction = DIRECTION_LEFT;

        }

        break;

        case RIGHT:

        if(direction != DIRECTION_LEFT){

        direction = DIRECTION_RIGHT;

        }

        break;

        case FIRE:

        //暂停和继续

        isPaused = !isPaused;

        break;

        }

        }/**

        * 线程方法

        * 使用精确延时

        */

        public void run(){

        try{

        while (isRun) {

        //开始时间

        long start = System.currentTimeMillis();

        if(!isPaused){

        //吃食物

        eatFood();

        //移动

        move(direction);

        //结束游戏

        if(isGameOver()){

        break;

        }

        //控制闪烁

        b = !b;

        }

        //重新绘制

        repaint();

        long end = System.currentTimeMillis();

        //延时

        if(end - start SLEEP_TIME){

        Thread.sleep(SLEEP_TIME - (end - start));

        }

        }

        }catch(Exception e){}

        }

        }

        • <bdo id='rxo8dq7u'></bdo><ul id='txwex8tk'></ul>

          <legend id='qyuo3svf'><style id='qikcruvu'><dir id='pvymbu62'><q id='8o4xph5s'></q></dir></style></legend>

              • <small id='am7s2avy'></small><noframes id='vs6s8blx'>

                  <tbody id='jc7q63vm'></tbody>
                  <i id='um93cdir'><tr id='temgfb5j'><dt id='hss2awf7'><q id='izldxzi1'><span id='43acniff'><b id='ppsc6pgl'><form id='n7pix7w5'><ins id='i1tbmr9a'></ins><ul id='qw70p0ad'></ul><sub id='gs20byhf'></sub></form><legend id='tajfcyt1'></legend><bdo id='2raluigk'><pre id='wukdfavx'><center id='z5x9qef3'></center></pre></bdo></b><th id='br0mayy9'></th></span></q></dt></tr></i><div id='24nn6p97'><tfoot id='7jn265rx'></tfoot><dl id='vjxr8amt'><fieldset id='wjoc720h'></fieldset></dl></div>

                  <tfoot id='s06i2i3q'></tfoot>

                  上一篇:java连连看脚本源代码 java 连连看

                  栏    目:Java编程

                  下一篇:没有了

                  本文标题:贪吃蛇原代码java 贪吃蛇游戏代码java

                  本文地址:https://www.xiuzhanwang.com/a1/Javabiancheng/17300.html

                  网页制作CMS教程网络编程软件编程脚本语言数据库服务器

                  如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

                  联系QQ:835971066 | 邮箱:835971066#qq.com(#换成@)

                  Copyright © 2002-2020 脚本教程网 版权所有

                  <i id='si4m96r5'><tr id='22wfjasx'><dt id='wsg2306u'><q id='bd49e4to'><span id='pprl38uv'><b id='16tl50a2'><form id='i6czgz5o'><ins id='zo2nroch'></ins><ul id='1sb8q3id'></ul><sub id='szk1qk15'></sub></form><legend id='vb3ixrjq'></legend><bdo id='6vqefesw'><pre id='z8jyz1zn'><center id='go2sqoz8'></center></pre></bdo></b><th id='ltg16q4s'></th></span></q></dt></tr></i><div id='045c98ig'><tfoot id='y5upia5c'></tfoot><dl id='73zwq9ys'><fieldset id='us495pxi'></fieldset></dl></div>

                    <tfoot id='cnqxvcdf'></tfoot>
                        <bdo id='0zx6xrlc'></bdo><ul id='dl9yes7l'></ul>
                    1. <small id='0l790ejq'></small><noframes id='nec4geoy'>

                    2. <legend id='0bnhxxf1'><style id='2itbn1y8'><dir id='fx9b8kio'><q id='isp9hmd4'></q></dir></style></legend>