📄 snakepanel.java
字号:
package snakegame;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.*;
public class SnakePanel extends JPanel implements Data
{
public SnakePanel(SnakeFrame frame)
{
this.frame = frame;
init();
addKeyListener(new KeyHandler());
setFocusable(true);
timer = new Timer(1000, new TimerAction());
timer.start();
this.setBackground(Color.CYAN);
}
public void init()
{
snake = new Snake();
food = new Food();
endFlag = false;
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
drawFrame(g2);
if(snake.isLife())
{
snake.draw(g2);
food.draw(g2);
}
}
public void drawFrame(Graphics2D g2)
{
Rectangle2D.Double frame = new Rectangle2D.Double(15, 10, 300, 300);
g2.setColor(Color.ORANGE);
g2.draw(frame);
}
public void eatFood()
{
Point point = (Point)snake.array.get(0);
if(point.x == food.x && point.y == food.y)
{
food = new Food();
snake.addNode();
}
}
private class KeyHandler implements KeyListener
{
public void keyPressed(KeyEvent event)
{
if(!frame.runFlag)
{
return;
}
int keyCode = event.getKeyCode();
switch(keyCode)
{
case KeyEvent.VK_LEFT:
snake.moveHeadLeft();
break;
case KeyEvent.VK_RIGHT:
snake.moveHeadRight();
break;
case KeyEvent.VK_UP:
snake.moveHeadUp();
break;
case KeyEvent.VK_DOWN:
snake.moveHeadDown();
break;
default:
break;
}
eatFood();
repaint();
}
public void keyReleased(KeyEvent event)
{
}
public void keyTyped(KeyEvent event)
{
}
}
private class TimerAction implements ActionListener
{
public void actionPerformed(ActionEvent event)
{
if(!frame.runFlag)
{
return;
}
if(!endFlag && !snake.isLife())
{
endFlag = true;
int result =JOptionPane.showConfirmDialog(null,
"Game over! Continue?", "贪吃蛇游戏", JOptionPane.YES_NO_OPTION);
if(result == JOptionPane.YES_OPTION)
{
init();
}
else
{
System.exit(0);
}
}
timer.setDelay(1000 - 200 * (frame.speedFlag - 1));
switch(snake.currentFlag)
{
case RIGHTFLAG:
snake.moveRight();
break;
case LEFTFLAG:
snake.moveLeft();
break;
case UPFLAG:
snake.moveUp();
break;
case DOWNFLAG:
snake.moveDown();
break;
default:
break;
}
eatFood();
repaint();
}
}
private Snake snake;
private Timer timer;
private Food food;
private SnakeFrame frame;
private boolean endFlag = false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -