JAVA贪吃蛇(简易版)

无贴图,用圈代替头身子食物,极简享受,代码少,内容简单,实战学java首选

//按上下左右控制行动,吃到食物加长一节,同时食物刷新位置。初始长为5,设置maxlength为10,到10不加。
package proj1;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class test1 extends JPanel implements KeyListener{
          
   
	int maxsize=10;//身子最长为
	int temsize=5;//初始身子长度
	Random r=new Random();
	int hx=350;//头坐标
	int hy=50;
	int fx = r.nextInt(12)*50+50; //食物坐标
	int fy=r.nextInt(12)*50+50;
	int[] bx={
          
   300,250,200,150,100,0,0,0,0,0};//身子坐标
	int[] by={
          
   50,50,50,50,50,0,0,0,0,0};
	boolean isStarted=false;
	public static void main(String[] args){
          
   
		JFrame j=new JFrame();
		j.setVisible(true);
		j.setSize(800,800);
		test1 t=new test1();
		j.add(t);
		j.addKeyListener(t);//添加键盘监听
	}
	public test1(){
          
   
//		this.setFocusable(true);
	}
	public void paintComponent(Graphics g){
          
   //每次repaint调用,该画图方法
		super.paintComponent(g);//调用父类方法,不然不能画图
		g.setColor(Color.pink);
		g.setFont(new Font("宋体",Font.BOLD,80));
		g.drawString("length="+temsize, 200,200);
		if(temsize==10){
          
   g.drawString("length=10,win", 200,200);}
		g.setColor(Color.red);
		g.drawOval(fx, fy, 50, 50);//画食物
		System.out.print("[repaint,fx,fy="+fx+","+fy+"/");
		System.out.println("hx,hy="+hx+","+hy+"]");
		System.out.println("[temsize="+temsize+"]");
		this.setBackground(Color.black);
		g.setColor(Color.white);
		g.drawOval(hx, hy, 50, 50);//画头
		for(int i=0;i<temsize;i++){
          
   //画身体
			g.drawOval(bx[i], by[i], 50, 50);
		}
		if(hx==fx&&hy==fy){
          
   //如果吃到食物身子加长
			g.setColor(Color.pink);
			g.setFont(new Font("宋体",Font.BOLD,40));
			g.drawString("got it", fx, fy);
			fx=r.nextInt(14)*50+50;//食物刷新位置
			fy=r.nextInt(14)*50+50;
			if(temsize<maxsize)
			{
          
   
			temsize+=1;
			bx[temsize-1]=bx[temsize-2];
			by[temsize-1]=by[temsize-2];
			}	
		}	
	}
	@Override
	public void keyTyped(KeyEvent e) {
          
   }
	public void keyReleased(KeyEvent e) {
          
   }
	@Override
	public void keyPressed(KeyEvent e) {
          
   //如果按下键盘
	//控制头,b[0]跟着头动,身子以此跟着前一节
	     int Keycode=e.getKeyCode();
			if (Keycode==KeyEvent.VK_SPACE){
          
   
				isStarted=!isStarted;
				System.out.println(isStarted);
				repaint();
			}	
			if(Keycode==KeyEvent.VK_UP && hy!=by[0]+50){
          
   
				System.out.println("up");
				hy-=50;
				for(int i=0;i<temsize-1;i++){
          
   
					bx[temsize-i-1]=bx[temsize-i-2];
					by[temsize-i-1]=by[temsize-i-2];
				}
				bx[0]=hx;
				by[0]=hy+50;
			}	
			if(Keycode==KeyEvent.VK_DOWN && hy!=by[0]-50){
          
   
				System.out.println("down");
				hy+=50;
				for(int i=0;i<temsize-1;i++){
          
   
					bx[temsize-i-1]=bx[temsize-i-2];
					by[temsize-i-1]=by[temsize-i-2];
				}
				bx[0]=hx;
				by[0]=hy-50;	
			}
			if(Keycode==KeyEvent.VK_LEFT && hx!=bx[0]+50){
          
   
				System.out.println("left");
				hx-=50;
				for(int i=0;i<temsize-1;i++){
          
   
					bx[temsize-i-1]=bx[temsize-i-2];
					by[temsize-i-1]=by[temsize-i-2];
				}
				bx[0]=hx+50;
				by[0]=hy;
			}
			if(Keycode==KeyEvent.VK_RIGHT && hx!=bx[0]-50){
          
   
				System.out.println("right");	
				hx+=50;
				for(int i=0;i<temsize-1;i++){
          
   
					bx[temsize-i-1]=bx[temsize-i-2];
					by[temsize-i-1]=by[temsize-i-2];
				}
				bx[0]=hx-50;
				by[0]=hy;
			}
			repaint();//重新调用画图方法,相当于刷新
	}
}
经验分享 程序员 微信小程序 职场和发展