简单java贪吃蛇

package plp;


import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;


import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;


public class Op {
public static void main(String args[]) {
Snake snake=new Snake();
snake.runsnake();
}


}


class Points{
public int x;
public int y;
public Points(int a,int b) {
x=a;
y=b;
}
public void set(int a,int b) {
x=a;
y=b;
}
}
class Snake extends JFrame {
private String dic=new String("right");
ArrayList<Points> point=new ArrayList<Points>();
ArrayList<JLabel> label=new ArrayList<JLabel>();
JFrame frame;
Points food=new Points(5,6);
public Snake() {
Points fir=new Points(1,3);
Points sec=new Points(2,3);
Points thir=new Points(3,3);
point.add(fir);
point.add(sec);
point.add(thir);
frame=new JFrame();
frame.setSize(700, 700);
frame.setLayout(new GridLayout(20,20));
for (int i=0;i<400;i++) {
JLabel p=new JLabel();
p.setOpaque(true);
p.setBorder(BorderFactory.createLineBorder(Color.BLACK));
p.setBackground(Color.WHITE);
label.add(p);
frame.add(p);
}
frame.setVisible(true);
frame.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
switch(e.getKeyCode()) {
case KeyEvent.VK_UP:
dic=new String("up");
break;
case KeyEvent.VK_DOWN:
dic=new String("down");
break;
case KeyEvent.VK_RIGHT:
dic=new String("right");
break;
case KeyEvent.VK_LEFT:
dic=new String("left");

}
}});
draw(2);
}
public void newfood() {
java.util.Random r=new java.util.Random();
int x=r.nextInt(30)%20;
for (int i=0;i<point.size();i++)
{
if(x==point.get(i).x||x<0)
{
i=0;
x=r.nextInt(30)%20;
}
}
int y=r.nextInt()%20;
for (int i=0;i<point.size();i++)
{
if(x==point.get(i).y||y<0)
{
i=0;
y=r.nextInt()%20;
}
}
food.set(x,y);

}
public void draw(int a) {
for(int i=0;i<point.size();i++) {
int t=point.get(i).y*20+point.get(i).x;
label.get(t).setBackground(Color.BLACK);
}
int head=point.get(a).y*20+point.get(a).x;
label.get(head).setBackground(Color.RED);
int foo=food.y*20+food.x;
label.get(foo).setBackground(Color.BLUE);
}
public void runsnake() {
boolean goon=true; 
while(goon) {
int tx=point.get((point.size()-1)).x;
int ty=point.get((point.size()-1)).y;
System.out.println(dic);
switch(dic) {
case "right":
if((tx+1)==20)
{goon=false;return;
}
else if((tx+1)==food.x&&ty==food.y) {
System.out.println("ppap");
Points temfood=new Points(food.x,food.y);
point.add(temfood);
newfood();
draw(point.size()-1);
break;

}
else {
label.get(point.get(0).y*20+point.get(0).x).setBackground(Color.WHITE);
int temsum=point.size();

for (int pi=0;pi<temsum-1;pi++)
{
point.get(pi).set(point.get(pi+1).x, point.get(pi+1).y);
}
Points tempoint=point.get(temsum-1);
tempoint.set(tempoint.x+1, tempoint.y);
draw(temsum-1);
}
break;
case "left":
if((tx-1)==-1)
{goon=false;return;
}
else if((tx-1)==food.x&&ty==food.y) {
System.out.println("ppap");
Points temfood=new Points(food.x,food.y);
point.add(temfood);
newfood();
draw(point.size()-1);
break;

}
else {
label.get(point.get(0).y*20+point.get(0).x).setBackground(Color.WHITE);
int temsum=point.size();

for (int pi=0;pi<temsum-1;pi++)
{
point.get(pi).set(point.get(pi+1).x, point.get(pi+1).y);
}
Points tempoint=point.get(temsum-1);
tempoint.set(tempoint.x-1, tempoint.y);
draw(temsum-1);
}
break;
case "up":
if((ty-1)==-1)
{goon=false;return;
}
else if(tx==food.x&&(ty-1)==food.y) {
System.out.println("ppap");
Points temfood=new Points(food.x,food.y);
point.add(temfood);
newfood();
draw(point.size()-1);
break;

}
else {
label.get(point.get(0).y*20+point.get(0).x).setBackground(Color.WHITE);
int temsum=point.size();

for (int pi=0;pi<temsum-1;pi++)
{
point.get(pi).set(point.get(pi+1).x, point.get(pi+1).y);
}
Points tempoint=point.get(temsum-1);
tempoint.set(tempoint.x, tempoint.y-1);
draw(temsum-1);
}
break;
case "down":
if((ty+1)==20)
{goon=false;return;
}
else if(tx==food.x&&(ty+1)==food.y) {
System.out.println("ppap");
Points temfood=new Points(food.x,food.y);
point.add(temfood);
newfood();
draw(point.size()-1);
break;

}
else {
label.get(point.get(0).y*20+point.get(0).x).setBackground(Color.WHITE);
int temsum=point.size();

for (int pi=0;pi<temsum-1;pi++)
{
point.get(pi).set(point.get(pi+1).x, point.get(pi+1).y);
}
Points tempoint=point.get(temsum-1);
tempoint.set(tempoint.x, tempoint.y+1);
draw(temsum-1);
}
break;
}

try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} 
}
}




}







猜你喜欢

转载自blog.csdn.net/Ms_huang_/article/details/81020383