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();//重新调用画图方法,相当于刷新 } }