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

📄 snakegame.java

📁 新手下东西。。代码有点乱
💻 JAVA
字号:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class SnakeGame implements KeyListener
{
	private Canvas paintCanvas;
	private SnakeModel snakeModel;
	public SnakeGame()
	{
		JFrame mainFrame=new JFrame("GreedSnake");
		Container cp=mainFrame.getContentPane();
		paintCanvas=new Canvas();
		
		mainFrame.setLocation(400,300);
		paintCanvas.setSize(400,300);
		cp.add(paintCanvas,BorderLayout.CENTER);
		mainFrame.pack();
		mainFrame.setResizable(false);
		mainFrame.addKeyListener(this);
		mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		snakeModel=new SnakeModel(this);
		(new Thread(snakeModel)).start();
		mainFrame.setVisible(true);
  }	
  public void repaint()
  {
  	Graphics g=paintCanvas.getGraphics();
  	g.setColor(Color.WHITE);
  	g.fillRect(0,0,400,300);
  	Iterator it=snakeModel.nodeArray.iterator();
  	while(it.hasNext())
  	{
  		Node n=(Node)it.next();
  		g.setColor(Color.BLACK);
  		g.fillRect(n.x,n.y,9,9);
  	}
  	g.setColor(Color.RED);
  	g.fillRect(snakeModel.food.x,snakeModel.food.y,9,9);
  }
  public void keyPressed(KeyEvent e)
  {
  	int keyCode=e.getKeyCode();
  	switch(keyCode)
  	{
  		case KeyEvent.VK_P:
  		snakeModel.changeStatus(false);
  		break;
   		case KeyEvent.VK_S:
  		snakeModel.changeStatus(true);
  		case KeyEvent.VK_UP:
  		snakeModel.changeDirection(snakeModel.UP);
  		break;
  		case KeyEvent.VK_DOWN:
  		snakeModel.changeDirection(snakeModel.DOWN);
  		break;
  		case KeyEvent.VK_LEFT:
  		snakeModel.changeDirection(snakeModel.LEFT);
  		break;
  		case KeyEvent.VK_RIGHT:
  		snakeModel.changeDirection(snakeModel.RIGHT);
  		break;
  		default:
  	}
  }
  public void keyTyped(KeyEvent e){}
  public void keyReleased(KeyEvent e){}
  public static void main(String[] args)
  {
  	new SnakeGame();
  }
}


class SnakeModel implements Runnable
{
	public static final int UP=1,DOWN=3,LEFT=2,RIGHT=4;
	int direction=2;
	LinkedList nodeArray=new LinkedList();
	LinkedList tempArray=new LinkedList();
	SnakeGame  snakeGame;
	Node food;
	boolean status=true;
	public SnakeModel(SnakeGame snakeGame)
	{
		this.snakeGame=snakeGame;
		for(int i=0;i<10;i++)
		{
			
			int x=200+i*10;
			int y=150;
			Node n=new Node(x,y);
			nodeArray.addLast(n);
		}
		tempArray=nodeArray;
	}
	public void changeDirection(int newDirection)
	{
		if(newDirection%2!=direction%2)
		{
			direction=newDirection;
		}
	}
	public boolean changeStatus(boolean b)
	{
		status=b;
		return status;
	}
	public boolean moveOn()
	{
		Node node=(Node)(nodeArray.getFirst());
		int x=node.x;
		int y=node.y;
		switch(direction)
		{
			case UP:
			y=y-10;
  		        break;
  		        case DOWN:
  		        y=y+10;
  		        break;
  		        case LEFT:
  		        x=x-10;
  		        break;
  		        case RIGHT:
  		        x=x+10;
  		        break;
  		        default:
		}
		if(x<0||x>400||y<0||y>300)
		        return false;
		if(x==food.x&&y==food.y)
		{
			nodeArray.addFirst(new Node(x,y));
			createFood();
			return true;
		}        
		Iterator iterator=nodeArray.iterator();
		while(iterator.hasNext())
		{
			Node n=(Node)iterator.next();
			if(x==n.x&&y==n.y)
				return false;
		}
		nodeArray.addFirst(new Node(x,y));
		nodeArray.removeLast();
		return true;
	}
	public void createFood()
	{
		int food_x=(int)(Math.random()*40)*10;
		int food_y=(int)(Math.random()*30)*10;
		Iterator iterator=nodeArray.iterator();
		while(iterator.hasNext())
		{
			Node n=(Node)iterator.next();
			if(food_x==n.x&&food_y==n.y)
			 createFood();
			else
			 break; 
		}
		food=new Node(food_x,food_y);
	}
	public void run()
	{
		createFood();
		while(true)
		{
			try
			{
				Thread.sleep(300);
			}
			catch(InterruptedException e){}
			if(status)
			{
			        if(moveOn())
			                snakeGame.repaint();
		                else
		                {
		        	        JOptionPane.showMessageDialog(null,"You failed","张厚宝",JOptionPane.INFORMATION_MESSAGE);
		        	        break;
		        	}
		       }
		}
	}
}

class Node
{
	public int x,y;
	public Node(int x,int y)
	{
		this.x=x;
		this.y=y;
	}
}

⌨️ 快捷键说明

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