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