我想做一个贪食蛇的游戏,还没完成,现在做到2/3了,想在屏幕上方加两个面板,其中包含2个按钮:重新开始和作者信息、。而这两个按钮时放在一个JPanel里面的;但是等我加到框架上的时候,贪食蛇画板用键盘控制不了了。。我反复查看
贪食蛇画板的实例的确是加了p.setFocusable(true);但他就是没反应。。点击按钮重玩游戏之后,调用public void reFocusable() {
p.requestFocus(true);
}
这个函数以后,它就有反应了。我晕。。到底哪里出了问题了呀,难道我每次开始游戏都要点一下按钮?
(贪食蛇的部分功能还没写完,但是点击开始游戏的按钮以后能动了)各位不吝赐教,帮帮我看下吧,也许就只是一句话放错位置的问题,可我就是看不出来。。啊啊我快崩溃了import javax.swing.*;
import javax.swing.border.LineBorder;import java.awt.*;
import java.awt.event.*;public class Snake extends JFrame { boolean down = false;
boolean up = false;
boolean left = false;
boolean right = true; int delay = 300;
int panenumber = 1;
int panewidth = 10;
int SnakeHeadX;// 贪食蛇头X坐标
int SnakeHeadY;// 贪食蛇头Y坐标 int snake[][] = new int[1000][5];/*
 * 表示一共可以画1000个填充长方形,5个参数x,y,宽,方向,高
 * 此长方形方向1上2下3左4右,
 */
int firstpaneX = 210;
int firstpaneY = 240;
int firstpanelong = 60;// 不管填充长方形成何形状增长,其坐标均是左上角 control c = new control();-----------------按钮面板JPanel
snakepane p = new snakepane();------------贪食蛇JPanel画板实例 public Snake() {

setLayout(new BorderLayout());
p.setFocusable(true);-----------------------------------想不明白为什么这句话为啥无效!!!
p.setBorder(new LineBorder(Color.black,1));
add(p, BorderLayout.CENTER);
add(c, BorderLayout.NORTH);

} public static void main(String[] args) {
Snake frame = new Snake();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(608, 581);
frame.setVisible(true);
// frame.setResizable(false);
frame.setTitle("贪食蛇游戏1.0版");
frame.setLocationRelativeTo(null);
} public void reFocusable() {
p.requestFocus(true);
}

解决方案 »

  1.   

    Control
    Snakepane
    这两个类的代码也贴上来,方便调试
      

  2.   

    public void judge() { if (snake[0][2] != 0 && snake[0][4] != 0) { if (snake[0][3] == 1) {
    snake[0][4] -= panewidth;
    } else if (snake[0][3] == 2) {
    snake[0][1] += panewidth;
    snake[0][4] -= panewidth;
    } else if (snake[0][3] == 3) {
    snake[0][2] -= panewidth;
    } else if (snake[0][3] == 4) { snake[0][0] += panewidth;
    snake[0][2] -= panewidth;
    }
    if (snake[0][2] == 0 || snake[0][4] == 0)
    ReformSnakes();
    } else {
    ReformSnakes();
    }
    } public void ReformSnakes() {
    for (int j1 = 0; j1 < panenumber - 1; j1++)
    for (int j2 = 0; j2 < 5; j2++)
    snake[j1][j2] = snake[j1 + 1][j2];
    panenumber--;
    } class snakepane extends JPanel { Timer timer = new Timer(delay, new SnakeTimerListener()); public snakepane() { // 初始化第一个长方形的值
    snake[0][0] = firstpaneX;
    snake[0][1] = firstpaneY;
    snake[0][2] = firstpanelong;
    snake[0][4] = panewidth; if (up)
    snake[0][3] = 1;
    else if (down)
    snake[0][3] = 2;
    else if (left)
    snake[0][3] = 3;
    else
    snake[0][3] = 4; timer.start();
    addKeyListener(new KeyAdapter() { @Override
    public void keyPressed(KeyEvent e) {
    switch (e.getKeyCode()) { case KeyEvent.VK_UP:

    if (!down) {
    if (up) {
    snake[panenumber - 1][1] -= panewidth;
    if (panenumber != 1) {
    snake[panenumber - 1][4] += panewidth;
    judge();
    } } else {
    panenumber++;
    if (snake[panenumber - 2][3] == 4) { snake[panenumber - 1][0] = snake[panenumber - 2][0]
    + snake[panenumber - 2][2]
    - panewidth;
    snake[panenumber - 1][1] = snake[panenumber - 2][1]
    - panewidth;
    snake[panenumber - 1][2] = panewidth;
    snake[panenumber - 1][3] = 1;
    snake[panenumber - 1][4] = panewidth; } else {
    snake[panenumber - 1][0] = snake[panenumber - 2][0];
    snake[panenumber - 1][1] = snake[panenumber - 2][1]
    - panewidth;
    snake[panenumber - 1][2] = panewidth;
    snake[panenumber - 1][3] = 1;
    snake[panenumber - 1][4] = panewidth;
    } judge(); up = true;
    left = false;
    right = false;
    }
    }
    break; case KeyEvent.VK_DOWN:
    if (!up) {
    if (down) {
    if (panenumber == 1)
    snake[panenumber - 1][1] += panewidth;
    else {
    snake[panenumber - 1][4] += panewidth;
    judge();
    } } else {
    panenumber++;
    if (snake[panenumber - 2][3] == 4) { snake[panenumber - 1][0] = snake[panenumber - 2][0]
    + snake[panenumber - 2][2]
    - panewidth;
    snake[panenumber - 1][1] = snake[panenumber - 2][1]
    + panewidth;
    snake[panenumber - 1][2] = panewidth;
    snake[panenumber - 1][3] = 2;
    snake[panenumber - 1][4] = panewidth;
    } else {
    snake[panenumber - 1][0] = snake[panenumber - 2][0];
    snake[panenumber - 1][1] = snake[panenumber - 2][1]
    + panewidth;
    snake[panenumber - 1][2] = panewidth;
    snake[panenumber - 1][3] = 2;
    snake[panenumber - 1][4] = panewidth;
    } judge(); down = true;
    left = false;
    right = false;
    }
    }
    break;
    case KeyEvent.VK_LEFT:
    if (!right) {
    if (left) {
    snake[panenumber - 1][0] -= panewidth;
    if (panenumber != 1) {
    snake[panenumber - 1][2] += panewidth;
    judge();
    } } else {
    panenumber++;
    if (snake[panenumber - 2][3] == 1) { snake[panenumber - 1][0] = snake[panenumber - 2][0]
    - panewidth;
    snake[panenumber - 1][1] = snake[panenumber - 2][1];
    snake[panenumber - 1][2] = panewidth;
    snake[panenumber - 1][3] = 3;
    snake[panenumber - 1][4] = panewidth;
    } else {
    snake[panenumber - 1][0] = snake[panenumber - 2][0]
    - panewidth;
    snake[panenumber - 1][1] = snake[panenumber - 2][1]
    + snake[panenumber - 2][4]
    - panewidth;
    snake[panenumber - 1][2] = panewidth;
    snake[panenumber - 1][3] = 3;
    snake[panenumber - 1][4] = panewidth;
    }
    judge(); left = true;
    up = false;
    down = false;
    }
    }
    break;
    case KeyEvent.VK_RIGHT:
    if (!left) {
    if (right) {
    if (panenumber == 1)
    snake[panenumber - 1][0] += panewidth;
    else {
    snake[panenumber - 1][2] += panewidth;
    judge();
    } } else {
    panenumber++;
    if (snake[panenumber - 2][3] == 1) { snake[panenumber - 1][0] = snake[panenumber - 2][0]
    + panewidth;
    snake[panenumber - 1][1] = snake[panenumber - 2][1];
    snake[panenumber - 1][2] = panewidth;
    snake[panenumber - 1][3] = 4;
    snake[panenumber - 1][4] = panewidth;
    } else {
    snake[panenumber - 1][0] = snake[panenumber - 2][0]
    + panewidth;
    snake[panenumber - 1][1] = snake[panenumber - 2][1]
    + snake[panenumber - 2][4]
    - panewidth;
    snake[panenumber - 1][2] = panewidth;
    snake[panenumber - 1][3] = 4;
    snake[panenumber - 1][4] = panewidth;
    }
    judge(); right = true;
    up = false;
    down = false;
    }
    }
    break;
    }
    repaint();
    }
    });
    } class SnakeTimerListener implements ActionListener { @Override
    public void actionPerformed(ActionEvent arg0) { if (panenumber == 1) {
    if (up)
    snake[panenumber - 1][1] -= panewidth;
    else if (down)
    snake[panenumber - 1][1] += panewidth;
    else if (left)
    snake[panenumber - 1][0] -= panewidth;
    else if (right)
    snake[panenumber - 1][0] += panewidth;
    // System.out.println("3");
    } else {
    if (snake[panenumber - 1][3] == 1) {
    snake[panenumber - 1][1] -= panewidth;
    snake[panenumber - 1][4] += panewidth;
    } else if (snake[panenumber - 1][3] == 2) { snake[panenumber - 1][4] += panewidth;
    } else if (snake[panenumber - 1][3] == 3) {
    snake[panenumber - 1][0] -= panewidth;
    snake[panenumber - 1][2] += panewidth;
    } else if (snake[panenumber - 1][3] == 4) {
    snake[panenumber - 1][2] += panewidth;
    }
    // System.out.println("4");
    judge(); } repaint();
    }
    } protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    // System.out.println("5");
    g.setColor(Color.orange);
     System.out.println(getWidth() + " " + getHeight());
    for (int i = 0; i < panenumber; i++) {
    /*
     * if (i == 0) g.setColor(Color.orange); else if (i == 1)
     * g.setColor(Color.BLUE); else if (i == 2)
     * g.setColor(Color.GREEN); else if (i == 3)
     * g.setColor(Color.red); else g.setColor(Color.black); if
     * (snake[i][3] == 1) System.out.print("上"); else if
     * (snake[i][3] == 2) System.out.print("下"); else if
     * (snake[i][3] == 3) System.out.print("左"); else if
     * (snake[i][3] == 4) System.out.print("右");
     * System.out.println(snake[i][0] + " " + snake[i][1] + " " +
     * snake[i][2] + " " + snake[i][4]);
     */
    g.fillRect(snake[i][0], snake[i][1], snake[i][2], snake[i][4]);
    }
    }
    } // 控制面板 class control extends JPanel { JButton star = new JButton("重玩游戏");
    JButton author = new JButton("关于作者");
    JPanel ppp = new JPanel(); public control() {
    setLayout(new BorderLayout());
    ppp.setLayout(new FlowLayout()); setBorder(new LineBorder(Color.white, 5));
    star.setBackground(Color.GREEN);
    star.setForeground(Color.white);
    author.setForeground(Color.white);
    author.setBackground(Color.GREEN); ppp.add(star);
    ppp.add(author);
    add(ppp, BorderLayout.WEST); star.addActionListener(new ActionListener() { @Override
    public void actionPerformed(ActionEvent arg0) {
    reFocusable(); }
    });

    }
    }
    }
      

  3.   

    你面板无法获得焦点的原因不是 JPanel 无法获得焦点
    和 setFocusable(true) 无关
    其实 JPanel 的 focusable 默认就是 true 的它真正无法获得焦点的原因是:
    它没有默认添加通过鼠标点击获得焦点的监听器
    就是说,默认的情况下,JPanel 是不会通过鼠标点击获得焦点的
    你如果希望通过鼠标点击获得焦点
    需要自己添加鼠标监听器
    p.addMouseListener(new MouseAdapter() {
    @Override
    public void mousePressed(MouseEvent e) {
    p.requestFocus();
    }
    });
      

  4.   

    我测试过了,在JPanel中分别调用下面几个方法后,键盘事件还是无法被JPanel监听到
    setFocusable(true)
    setFocusableWindowState(true)
    requestFocus();
    requestFocus(true);
    requestFocusInWindow();
    requestFocusInWindow(true)
    但可以通过JFrame监听到键盘事件后,传引用给JPanel,这样能达到相同的效果你耐心等等,我正在修正你的代码
      

  5.   


    package snake;import java.awt.*;
    import java.awt.event.*;
    import java.util.ArrayList;
    import javax.swing.*;
    import javax.swing.border.*;public class SnakeFrame extends JFrame {
        ControlPanel controlPane = null;// -----------------按钮面板JPanel
        SnakePanel snakePanel = null;// ------------贪食蛇JPanel画板实例    public SnakeFrame() {
    super("NineGridGame");
    init();
        }    private void init() {
    this.addKeyListener(new FrameMonitor());
    setTitle("贪食蛇游戏1.0版");
    setLayout(new BorderLayout());
    setFocusable(true);// 
    controlPane = new ControlPanel(this);// -----------------按钮面板JPanel
    snakePanel = new SnakePanel(this);// ------------贪食蛇JPanel画板实例
    add(controlPane, BorderLayout.NORTH);
    add(snakePanel, BorderLayout.CENTER);
    setPreferredSize(new Dimension(610, 675));
    pack();
    setVisible(true);
    setResizable(false);
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);    }    public static void main(String[] args) {
    SnakeFrame frame = new SnakeFrame();
        }    private class FrameMonitor extends KeyAdapter {// 好像键盘只能被frame监听,这里只能串引用给panel
    public void keyReleased(KeyEvent e) {
        snakePanel.keyReleased(e);
    }
        }
    }// /////////////////////////////////////////////////////////////////////////////////////////////////////////////
    class SnakePanel extends JPanel {
        private JFrame snakeFrame;
        private Image offScreenImage = null;// 解决缓冲问题;
        public static final int ROWS = 30, COLS = 30, GRID_SIZE = 20;// 总行数,总列数,正方形小格的尺寸大小
        private Snake snake;
        private Blood blood;    public void keyReleased(KeyEvent e) {// 一步一步传引用给snake
    snake.keyReleased(e);
        }    public SnakePanel(JFrame snakeFrame) {
    super();
    this.snakeFrame = snakeFrame;
    init();
        }    private void init() {
    setBorder(new LineBorder(Color.black, 1));// 初始化第一个长方形的值
    setBackground(Color.GREEN);
    snake = new Snake(this);
    blood = new Blood(this);// 蛇头在中间位置,蛇身颜色为黑色 // requestFocus();//不起作用,不知道为什么
    new Thread(new SnakePanelRunnable()).start();
        }    protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Color color = g.getColor();
    g.setColor(Color.gray);
    g.fillRect(0, 0, getWidth(), getHeight());
    g.setColor(Color.RED);
    /*
     * for (int i = 0; i < ROWS + 1; i++)//如果要显示表格就显示表格 // +1把最下面的边界也画出来
     * g.drawLine(0, i * GRID_SIZE, COLS * GRID_SIZE, i * GRID_SIZE); for
     * (int j = 0; j < COLS + 1; j++) // +1把最右边的边界也画出来 g.drawLine(j *
     * GRID_SIZE, 0, j * GRID_SIZE, ROWS * GRID_SIZE);
     */
    snake.drawSnake(g);
    blood.drawBlood(g);
    g.setColor(color);
        }    public void update(Graphics g) {// 更新时防止画面不连贯
    if (offScreenImage == null) {
        offScreenImage = this.createImage(getWidth(), getHeight());
    }
    Graphics gOffScreen = offScreenImage.getGraphics();
    Color c = gOffScreen.getColor();
    gOffScreen.setColor(Color.GREEN);
    gOffScreen.fillRect(0, 0, getWidth(), getHeight());
    gOffScreen.setColor(c);
    paint(gOffScreen);
    g.drawImage(offScreenImage, 0, 0, null);
        }    private class SnakePanelRunnable implements Runnable {// 重画面板的线程
    public void run() {
        while (true) {
    repaint();
    try {
        Thread.sleep(100);// 0.1s重画一次
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
        }
    }
        }    public Blood getBlood() {
    return blood;
        }    public void setBlood(Blood blood) {
    this.blood = blood;
        }
    }// ///////////////////////////////////////////////////////////////////////////////////////////
    enum Dir {
        UP, DOWN, LEFT, RIGHT
    }// ////////////////////////////////////////////////////////////////////////////////////////
      

  6.   


    class Snake {
        private SnakePanel snakePanel;
        private SnakeNode snakeHead;// 蛇头
        private SnakeNode snakeTail;// 蛇尾
        private int x;// 蛇的初始位置,其实是蛇头的初始位置
        private int y;
        private Color color;// 蛇的颜色
        private Dir dir;// 蛇的前进方向,其实是蛇头的方向    public void keyReleased(KeyEvent e) {// 监听键盘事件
    int keyCode = e.getKeyCode();
    switch (keyCode) {
    case KeyEvent.VK_UP:
        if (snakeHead.getDir() != Dir.DOWN)
    snakeHead.setDir(Dir.UP);
        break;
    case KeyEvent.VK_DOWN:
        if (snakeHead.getDir() != Dir.UP)
    snakeHead.setDir(Dir.DOWN);
        break;
    case KeyEvent.VK_LEFT:
        if (snakeHead.getDir() != Dir.RIGHT)
    snakeHead.setDir(Dir.LEFT);
        break;
    case KeyEvent.VK_RIGHT:
        if (snakeHead.getDir() != Dir.LEFT)
    snakeHead.setDir(Dir.RIGHT);
        break;
    }
        }    public Snake(SnakePanel snakePanel) {
    super();
    this.snakePanel = (SnakePanel) snakePanel;
    init();
        }    private void init() {
    // 蛇头在中间位置,蛇身颜色为黑色
    this.x = SnakePanel.COLS * SnakePanel.GRID_SIZE / 2;
    this.y = SnakePanel.ROWS * SnakePanel.GRID_SIZE / 2;
    this.color = Color.BLACK;
    this.dir = Dir.RIGHT;
    this.snakeHead = new SnakeNode(this, x, y, SnakePanel.GRID_SIZE,
    SnakePanel.GRID_SIZE, color, dir, snakeHead, snakeHead);
    this.snakeTail = snakeHead;
        }    public void drawSnake(Graphics g) {
    SnakeNode tempSnakeNode = snakeTail;
    tempSnakeNode.drawNode(g);
    if (isSnakeCollideBlood()) {
        addSnakeNode();
    }
    while ((tempSnakeNode = tempSnakeNode.getPriorNode()) != null
    && tempSnakeNode != snakeTail) {
        tempSnakeNode.drawNode(g);
    }
    /*
     * if(isSnakeHeadCollideSnakeBody()){//如果需要检测撞蛇身 if
     * (prompt("restartGame") == 0) { snakePanel.snakeFrame.removeAll();
     * snakePanel.snakeFrame.setVisible(false); snakePanel.snakeFrame = new
     * SnakeFrame(); } }
     */
        }    private boolean isSnakeCollideBlood() {// 蛇碰血,冲突检测
    Blood blood = this.snakePanel.getBlood();
    ArrayList<BloodNode> bloodNodes = blood.getBloods();
    for (int i = 0; i < bloodNodes.size(); i++) {
        BloodNode bloodNode = bloodNodes.get(i);
        if (snakeHead.getX() == bloodNode.getX()
        && snakeHead.getY() == bloodNode.getY()) {
    blood.removeBloodNode(i);// 血块消失
    return true;
        }
    }
    return false;
        }    private boolean isSnakeHeadCollideSnakeBody() {// 蛇头碰蛇身,冲突检测
    SnakeNode tempSnakeNode = snakeHead;
    while ((tempSnakeNode = tempSnakeNode.getNextNode()) != snakeHead)
        if (snakeHead.getX() == tempSnakeNode.getX()
        && snakeHead.getY() == tempSnakeNode.getY()) {
    prompt("蛇头碰蛇身");
    return true;
        }
    return false;
        }    private void addSnakeNode() {// 新结点总更在snakeTail的屁股后
    int x = snakeTail.getX();
    int y = snakeTail.getY();
    Dir dir = snakeTail.getDir();
    if (dir == Dir.UP)
        y += this.snakePanel.HEIGHT;
    else if (dir == Dir.DOWN)
        y -= this.snakePanel.HEIGHT;
    else if (dir == Dir.LEFT)
        x += this.snakePanel.WIDTH;
    else
        x -= this.snakePanel.WIDTH;
    Color color = Color.GREEN;
    SnakeNode tempSnakeNode = new SnakeNode(this, x, y,
    SnakePanel.GRID_SIZE, SnakePanel.GRID_SIZE, color, dir,
    snakeTail, snakeTail.getNextNode());
    tempSnakeNode.setPriorNode(snakeTail);
    tempSnakeNode.setNextNode(snakeTail.getNextNode());
    snakeHead.setPriorNode(tempSnakeNode);
    snakeTail.setNextNode(tempSnakeNode);
    this.snakeTail = tempSnakeNode;    }    private int prompt(String promptMessage) {
    return JOptionPane.showConfirmDialog(null, promptMessage, "友情提示",
    JOptionPane.WARNING_MESSAGE);
        }    public SnakeNode getSnakeHead() {
    return snakeHead;
        }    public void setSnakeHead(SnakeNode snakeHead) {
    this.snakeHead = snakeHead;
        }
    }// //////////////////////////////////////蛇结点////////////////////////////////////////////////////////////////////
    class SnakeNode {// 蛇的组成部分是由一个个小结点组成,此时结点的大小跟面板上的小格尺寸一致
        private Snake snake;
        private int x;// 结点位置
        private int y;
        private int width;// 结点尺寸
        private int height;
        private Color color;// 结点颜色
        private Dir dir;// 结点方向
        private SnakeNode priorNode;// 采用类似双向链表的形式,跟在结点脑袋前面的结点,结点的前一个结点
        private SnakeNode nextNode;// 采用类似双向链表的形式,跟在结点屁股后的结点,结点的后一个结点    public SnakeNode(Snake snake, int x, int y, int width, int height,
        Color color, Dir dir, SnakeNode priorNode, SnakeNode nextNode) {
    super();
    this.snake = snake;
    this.x = x;
    this.y = y;
    this.width = width;
    this.height = height;
    this.color = color;
    this.dir = dir;
    this.priorNode = this;
    this.nextNode = this;
    init();
        }    private void init() {// 初始化,让双向链表串通
    if (priorNode != null)
        priorNode.nextNode = this;
    if (nextNode != null)
        nextNode.priorNode = this;
        }    public void drawNode(Graphics g) {// 画结点本身
    Color tempColor = g.getColor();
    g.setColor(color);
    g.fillRect(x, y, width, height);
    g.setColor(tempColor);
    moveSnakeNode();// 画完结点之后,紧接着更新结点的位置,
        }    private void moveSnakeNode() {// 根据不同方向移动结点
    if (this == snake.getSnakeHead()) {
        if (dir == Dir.UP)
    upShift();
        if (dir == Dir.DOWN)
    downShift();
        if (dir == Dir.LEFT)
    leftShift();
        if (dir == Dir.RIGHT)
    rightShift();
    } else {
        dir = priorNode.dir;
        x = priorNode.x;
        y = priorNode.y;
    }
        }    // 如果移动结点时不符合规则(超出边界),强制遵循逆时针准则移动//有了这一个功能,蛇碰墙在此不做检测    private void upShift() {// 向上移动
    if (x < 0)
        x += width;
    if (x >= SnakePanel.COLS * width)
        x -= width;
    int newY = getY() - width;
    if (newY < 0)
        setDir(Dir.LEFT);// 此时强制向左移动
    else
        setY(newY);
        }    private void downShift() {// 向下移动,y坐标值应该增大
    if (x < 0)
        x += width;
    if (x >= SnakePanel.COLS * width)
        x -= width;
    int newY = getY() + width;
    if (newY >= SnakePanel.ROWS * height)
        setDir(Dir.RIGHT);// 此时向右移动
    else
        setY(newY);
        }    private void leftShift() {// 向左移动
    if (y < 0)
        y += height;
    if (y >= SnakePanel.ROWS * height)
        x -= height;
    int newX = getX() - width;
    if (newX < 0)
        setDir(Dir.DOWN);// 此时强制向下移动
    else
        setX(newX);
        }    private void rightShift() {// 向右移动
    if (y < 0)
        y += height;
    if (y >= SnakePanel.ROWS * height)
        x -= height;
    int newX = getX() + width;
    if (newX >= SnakePanel.COLS * width)
        setDir(Dir.UP);// 此时强制向上移动
    else
        setX(newX);
        }    public Dir getDir() {
    return dir;
        }    public void setDir(Dir dir) {
    this.dir = dir;
        }    public int getX() {
    return x;
        }    public void setX(int x) {
    this.x = x;
        }    public int getY() {
    return y;
        }    public void setY(int y) {
    this.y = y;
        }    public SnakeNode getPriorNode() {
    return priorNode;
        }    public void setPriorNode(SnakeNode priorNode) {
    this.priorNode = priorNode;
        }    public SnakeNode getNextNode() {
    return nextNode;
        }    public void setNextNode(SnakeNode nextNode) {
    this.nextNode = nextNode;
        }
    }// //////////////////////////////////////血/////////////////////////////////////////////////////////