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

📄 tanchishe.java

📁 贪吃蛇 贪吃蛇 贪吃蛇 贪吃蛇 贪吃蛇
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*; 
import java.util.ArrayList;

import javax.swing.*;

public class TanChiShe extends KeyAdapter  implements Runnable, MouseListener,MouseMotionListener
{   
	//定义变量(在下面)-----------------------------------------------------
	int[] xs=new int[20*20];				//面板600*600  单个块30*30  行列最多40快
	int[] ys=new int[20*20];
	int fang=2;
	int chang=5;
	
	int douX;
	int douY;

	//定义变量(结束)--------------------------------------------------------	

    JFrame frame;
    Thread timerThread;
    boolean start=false;
    
    TanChiShe()
    {  
		//构造初始(在下面)-----------------------------------------------------
		zaoShe();
		zaoDou();


		//构造初始(结束)--------------------------------------------------------	
		
		frame = new JFrame();
        frame.getContentPane().add(new Screen());
        frame.addKeyListener(this);   
        Container contentPane=frame.getContentPane();
        contentPane.addMouseListener(this);
        contentPane.addMouseMotionListener(this);

        //窗口大小  frame.setSize(宽, 高);
        frame.setSize(600+2*5, 600+2*3+22);

        frame.setVisible(true);
        frame.repaint();
    }
	public void mousePressed(MouseEvent e){}
	public void mouseReleased(MouseEvent e){}
	public void mouseEntered(MouseEvent e){}     
	public void mouseExited(MouseEvent e){}
	public void mouseDragged(MouseEvent e){}  

	//鼠标单击   
	public void mouseClicked(MouseEvent e)
	{
		//鼠标位置
		int mx=e.getX();
		int my=e.getY();
		//鼠标左键
		if (e.getButton()==MouseEvent.BUTTON1)
		{
			//鼠标左键处理(在下面)-----------------------------------------------------
			

			//鼠标左键处理(结束)--------------------------------------------------------				
		}
		//鼠标右键
		else if (e.getButton() == MouseEvent.BUTTON3) 
		{
			//鼠标右键处理(在下面)-----------------------------------------------------



			//鼠标右键处理(结束)--------------------------------------------------------	
		}  
		frame.repaint();		  	
	}

	//鼠标移动
	public void mouseMoved(MouseEvent e)
	{
		//鼠标位置
		int mx=e.getX();
		int my=e.getY();
		//鼠标左键处理(在下面)-----------------------------------------------------


		//鼠标左键处理(结束)--------------------------------------------------------		
		frame.repaint();
	}

    public void keyPressed(KeyEvent evt)
    {
		//键盘处理
        switch(evt.getKeyCode()) 
        {	
			case KeyEvent.VK_ENTER:
				timerThread = new Thread(this);
				timerThread.start();
				start = true;
				break;
			case KeyEvent.VK_ESCAPE:
                start = false;
				System.exit(1);
				break;
			case KeyEvent.VK_LEFT:
				//键盘左箭头处理(在下面)-----------------------------------------------------
				zhuanXiang(3);

				//键盘左箭头处理(结束)--------------------------------------------------------		
				break;
			case KeyEvent.VK_RIGHT:
				//键盘右箭头处理(在下面)-----------------------------------------------------
				zhuanXiang(1);

				//键盘右箭头处理(结束)--------------------------------------------------------		
				break;
			case KeyEvent.VK_DOWN:
				//键盘下箭头处理(在下面)-----------------------------------------------------
				zhuanXiang(4);

				//键盘下箭头处理(结束)--------------------------------------------------------		
				break;
			case KeyEvent.VK_UP:
				//键盘上箭头处理(在下面)-----------------------------------------------------
				zhuanXiang(2);

				//键盘上箭头处理(结束)--------------------------------------------------------		
				break;				
        }

        frame.repaint();
    }

    public void run()
    {
        while(true)
        {
            try
            { 
				//定时时间间隔  timerThread.sleep(毫秒);
				timerThread.sleep(500-chang*10);
            }
            catch (InterruptedException e)
            {  
				e.printStackTrace();
            }
            
            if(start==false)
                return;
			//定时处理(在下面)-----------------------------------------------------
			if (nengChiDou()==true)
			{
				zhangChang();
				zaoDou();
			}
			if(nengZiSha()==true || nengChuJie()==true)
			{
				jieShu();
			}
			
			
			pa();

			//定时处理(结束)--------------------------------------------------------							
            frame.repaint();
        }
    }

	class Screen extends JComponent
	{   
		public void paint(Graphics g)
		{
			Graphics2D g2d = (Graphics2D)g;
			//画图处理(在下面)-----------------------------------------------------
			xianShe(g2d);
			xianDou(g2d);
		
			//画图处理(结束)--------------------------------------------------------				
		}
	}

    public static void main(String[] args)
    {
         new TanChiShe();
    }

	void zaoShe()
	{
		 for(int j=0;j<5;j++)
		{
			xs[j]=30*10;
			ys[j]=30*(10+j);
		}
	}

	void xianShe(Graphics2D g2d)
	{
		for(int j=0;j<chang;j++)
		{
			g2d.setColor(Color.BLACK);
			g2d.fillRect(xs[j],ys[j],30,30);
		}

	}

	void pa()
	{		
			//身先爬
		    for(int i=chang-1;i>0;i--)
		    {
				xs[i]=xs[i-1];
				ys[i]=ys[i-1];
			}
			
			//头
			switch (fang)
			{
			case 1:
				xs[0]+=30;
				break;
			case 2:
				ys[0]-=30;
				break;
			case 3:
				xs[0]-=30;
				break;
			case 4:
				ys[0]+=30;
				break;
			}
			
		
	}

	void zhuanXiang(int fang)
	{
		this.fang=fang;
	}

	boolean nengChuJie()
	{
		if (xs[0]<0 || xs[0]>=600 || ys[0]<0 || ys[0]>=600)
		{
			return true;
		}
		else
		{
			return false;
		}
	
	}

	boolean nengZiSha()
	{
		for (int j=1;j<chang ;j++ )
		{
			if (xs[0]==xs[j]  && ys[0]==ys[j])
			{
				return true;
			}
		}
		return false;
	}

	void jieShu()
	{
		System.out.println("***GAME OVER***");
		System.out.println("游戏作者:PGC");
		System.exit(0);
	}

	void zaoDou()
	{
		douX=30*(int)(20*Math.random());
		douY=30*(int)(20*Math.random());
	}

	void xianDou(Graphics2D g2d)
	{
		g2d.setColor(Color.GREEN);
		g2d.fillOval(douX,douY,30,30);
	}

	boolean nengChiDou()
	{
		if (xs[0]==douX&&ys[0]==douY)
		{
			return true;

		}
		else
		{
			return false;
		}
		
	}

	void chiDou()
	{
		
	}

	void zhangChang()
	{
		chang++;
	}

	void shengJi()
	{
		
	}

	void jiaSu()
	{
		
	}

}; 


⌨️ 快捷键说明

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