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

📄 onesnake.java

📁 是一个贪吃蛇的游戏
💻 JAVA
字号:
package OnePlayer;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import java.util.*;

public class OneSnake implements KeyListener {
	JFrame mainFrame;
	Canvas paintCanvas;
	JLabel labelScore;
	OneSnakeModel snakeModel = null;

	final int width = Toolkit.getDefaultToolkit().getScreenSize().width;
	final int height = Toolkit.getDefaultToolkit().getScreenSize().height;
	final int canvasWidth = width - (width / 4);
	final int canvasHeight = height - (height / 4);
	final int nodeWidth = 10;
	final int nodeHeight = 10;

	ImageIcon icon=new ImageIcon("src//Image//img.jpg");
	Image img=icon.getImage();
	
	
	public OneSnake() {
		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(this);
		cp.add(paintCanvas, BorderLayout.CENTER);

		JPanel panelButtom = new JPanel();
		panelButtom.setLayout(new FlowLayout());
		JLabel labelHelp;
		labelHelp = new JLabel("改变速度<< + - >>   ");
		panelButtom.add(labelHelp);
		labelHelp = new JLabel("改变方向<< ↑ ↓ ← → >>   ");
		panelButtom.add(labelHelp);
		labelHelp = new JLabel("暂停<<空格>> 重新开始<<回车>>");
		panelButtom.add(labelHelp, BorderLayout.SOUTH);
		cp.add(panelButtom, BorderLayout.SOUTH);

		mainFrame.addKeyListener(this);
		mainFrame.pack();
		mainFrame.setResizable(false);
		mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		mainFrame.setLocation(width / 2 - canvasWidth / 2, height / 2
				- canvasHeight / 2);
		mainFrame.setVisible(true);
		begin();
	}

	/*
	 * 相应键盘按键事件
	 */
	public void keyPressed(KeyEvent e) {
		int keyCode = e.getKeyCode();
		if (snakeModel.running)
			switch (keyCode) {
			case KeyEvent.VK_UP:
				snakeModel.changeDirection(OneSnakeModel.UP);
				break;
			case KeyEvent.VK_DOWN:
				snakeModel.changeDirection(OneSnakeModel.DOWN);
				break;
			case KeyEvent.VK_LEFT:
				snakeModel.changeDirection(OneSnakeModel.LEFT);
				break;
			case KeyEvent.VK_RIGHT:
				snakeModel.changeDirection(OneSnakeModel.RIGHT);
				break;
			case KeyEvent.VK_ADD:
				snakeModel.speedUp();
				break;
			case KeyEvent.VK_SUBTRACT:
				snakeModel.speedDown();
				break;
			case KeyEvent.VK_SPACE:
			case KeyEvent.VK_P:
				snakeModel.changePauseState();
				break;
			default:
			}

		if (keyCode == KeyEvent.VK_R || keyCode == KeyEvent.VK_ENTER) {
			snakeModel.running = false;
			begin();
		}
	}

	public void keyReleased(KeyEvent e) {
	}

	public void keyTyped(KeyEvent e) {
	}

	void repaint() {
		Graphics g = paintCanvas.getGraphics();

		/*
		 * 背景颜色
		 */
		g.setColor(Color.WHITE);
		g.fillRect(0, 0, canvasWidth, canvasHeight);

		/*
		 * 画出蛇身
		 */
		
		g.setColor(Color.black);
		LinkedList na = snakeModel.nodeArray;
		for (Iterator iterator = na.iterator(); iterator.hasNext();) {
			Node n = (Node) iterator.next();
//			if((Node)(na.get(na.size()-2))==n)
//				g.setColor(Color.CYAN);
//			else
//				g.setColor(Color.black);
			drawNode(g, n);
		}
		/*
		 * 画出食物
		 */
		g.setColor(Color.RED);
		Node n = snakeModel.food;
		drawNode(g, n);

		updateScore();
	}

	public void drawNode(Graphics g, Node n) {
		/*
		 * 转化为g2是为了画出的形状不会有粗糙的边
		 */
		Graphics2D g2 = (Graphics2D) g;
		RenderingHints rh = g2.getRenderingHints();
		rh.put(RenderingHints.KEY_ANTIALIASING,
				RenderingHints.VALUE_ANTIALIAS_ON);
		g2.setRenderingHints(rh);
		g2.fillOval(n.x * nodeWidth, n.y * nodeHeight, nodeWidth - 1,
				nodeHeight - 1);
		
//		g.drawImage(img,n.x * nodeWidth, n.y * nodeHeight, nodeWidth - 1,nodeHeight - 1,mainFrame);
		
	}

	public void updateScore() {
		String s = "Score: " + snakeModel.score;
		labelScore.setText(s);
	}

	void begin() {
		if (snakeModel == null || !snakeModel.running) {
			snakeModel = new OneSnakeModel(this, canvasWidth / nodeWidth,
					canvasHeight / nodeHeight);
			(new Thread(snakeModel)).start();
		}
	}

	public static void main(String[] args) {
		OneSnake gs = new OneSnake();
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -