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

📄 twosnake.java

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

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

import java.util.*;

public class TwoSnake implements KeyListener {
	JFrame mainFrame;
	Canvas paintCanvas;
	JLabel labelScoreOne, labelScoreTwo;
	TwoSnakeModel 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 = 12;
	final int nodeHeight = 12;
	
	ImageIcon icon=new ImageIcon("src//Image//img.jpg");
	Image img=icon.getImage();
	
	public TwoSnake() {
		mainFrame = new JFrame("GreedSnake");
		Container cp = mainFrame.getContentPane();
		Panel p = new Panel();
		p.setLayout(new GridLayout(1, 2));
		labelScoreOne = new JLabel("OneScore:");
		labelScoreTwo = new JLabel("TwoScore:");
		p.add(labelScoreOne);
		p.add(labelScoreTwo);
		cp.add(p, 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("改变速度<<黑:+- 蓝:JK>>   ");
		panelButtom.add(labelHelp);
		labelHelp = new JLabel("改变方向<<黑:↑↓←→ 蓝:WSAD>>   ");
		panelButtom.add(labelHelp);
		labelHelp = new JLabel("暂停<<空格>> 重新开始<<回车>>");
		panelButtom.add(labelHelp);
		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.changeDirectionOne(TwoSnakeModel.UP);
				break;
			case KeyEvent.VK_W:
				snakeModel.changeDirectionTwo(TwoSnakeModel.UP);
				break;
			case KeyEvent.VK_DOWN:
				snakeModel.changeDirectionOne(TwoSnakeModel.DOWN);
				break;
			case KeyEvent.VK_S:
				snakeModel.changeDirectionTwo(TwoSnakeModel.DOWN);
				break;
			case KeyEvent.VK_LEFT:
				snakeModel.changeDirectionOne(TwoSnakeModel.LEFT);
				break;
			case KeyEvent.VK_A:
				snakeModel.changeDirectionTwo(TwoSnakeModel.LEFT);
				break;
			case KeyEvent.VK_RIGHT:
				snakeModel.changeDirectionOne(TwoSnakeModel.RIGHT);
				break;
			case KeyEvent.VK_D:
				snakeModel.changeDirectionTwo(TwoSnakeModel.RIGHT);
				break;
			case KeyEvent.VK_ADD:
				snakeModel.speedUpOne();
				break;
			case KeyEvent.VK_J:
				snakeModel.speedUpTwo();
				break;
			case KeyEvent.VK_SUBTRACT:
				snakeModel.speedDownOne();
				break;
			case KeyEvent.VK_K:
				snakeModel.speedDownTwo();
				break;
			case KeyEvent.VK_SPACE:
				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();

		//draw background
		g.setColor(Color.WHITE);
		g.fillRect(0, 0, canvasWidth, canvasHeight);

		// draw the snake
		g.setColor(Color.BLACK);
		LinkedList llOne = snakeModel.nodeArrayOne;
		Iterator itOne = llOne.iterator();

		while (itOne.hasNext()) {
				Node n = (Node) itOne.next();
				drawNode(g, n);
		}
		g.setColor(Color.blue);
		LinkedList llTwo = snakeModel.nodeArrayTwo;
		Iterator itTwo = llTwo.iterator();
		while (itTwo.hasNext()) {
			Node n = (Node) itTwo.next();
			drawNode(g, n);
		}                                                                                                                                          

		// draw the food
		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 one = "Black Score: " + snakeModel.scoreOne;
		labelScoreOne.setText(one);
		String two = "Blue Score:" + snakeModel.scoreTwo;
		labelScoreTwo.setText(two);
	}
	void begin() {
		if (snakeModel == null || !snakeModel.running) {
			snakeModel = new TwoSnakeModel(this, canvasWidth / nodeWidth,
					canvasHeight / nodeHeight);
			snakeModel.threadOne.start();
			snakeModel.threadTwo.start();
		}
	}
	public static void main(String[] args) {
		TwoSnake gs = new TwoSnake();
	}
}

⌨️ 快捷键说明

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