我想做一个贪食蛇的游戏,还没完成,现在做到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);
}
贪食蛇画板的实例的确是加了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);
}
Snakepane
这两个类的代码也贴上来,方便调试
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(); }
});
}
}
}
和 setFocusable(true) 无关
其实 JPanel 的 focusable 默认就是 true 的它真正无法获得焦点的原因是:
它没有默认添加通过鼠标点击获得焦点的监听器
就是说,默认的情况下,JPanel 是不会通过鼠标点击获得焦点的
你如果希望通过鼠标点击获得焦点
需要自己添加鼠标监听器
p.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
p.requestFocus();
}
});
setFocusable(true)
setFocusableWindowState(true)
requestFocus();
requestFocus(true);
requestFocusInWindow();
requestFocusInWindow(true)
但可以通过JFrame监听到键盘事件后,传引用给JPanel,这样能达到相同的效果你耐心等等,我正在修正你的代码
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
}// ////////////////////////////////////////////////////////////////////////////////////////
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;
}
}// //////////////////////////////////////血/////////////////////////////////////////////////////////