⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snakepanel.java

📁 Java贪吃蛇游戏 原代码和.jar文件 Java贪吃蛇游戏
💻 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 + -