GreedSnake
importar java.awt.*;
importar java.awt.event.*
clase pública GreedSnake // Clase principal
{
/**
* @param args
*/
vacío estático público main(String[] args) {
// TODO Código auxiliar de método generado automáticamente
new MyWindow()
}
}
clase MyPanel extiende Panel implementa KeyListener, Runnable//Clase de panel personalizado, hereda el teclado y la interfaz de subprocesos
{
Botón serpiente[] //; Definir botón de serpiente
int shu=0; //Número de secciones de serpiente
int food[]; //Matriz de alimentos
resultado booleano= true; /Determinar si el resultado es una victoria o una pérdida
Hilo de hilo; //Definir hilo
static int weix, weiy //Posición de los alimentos
boolean; t =true; //Determina si el juego ha terminado
int fangxiang=0; //Dirección del movimiento de la serpiente
int x=0, y=0;
MiPanel()
{
setLayout(null
snake=nuevo Botón[20]; p>comida= nuevo int [20];
thread=new Thread(this);
for(int j=0;jlt;20;j)
{
food[j]=(int)(Math.random()*99 //Definir 20 alimentos al azar
}
weix); =(int )(food[0]*0.1)*60; //El dígito de las decenas*60 es la abscisa
weiy=(int)(food[0]10)*40; unidades dígito*40 es coordenada vertical
for(int i=0;ilt;20;i)
{
serpiente[i]=nuevo botón(
}
add(serpiente[0]);
serpiente[0].setBackground(Color.negro
snake[0] .addKeyListener(this); //Agrega un monitor de teclado para la cabeza de serpiente
snake[0].setBounds(0, 0, 10, 10); setBackground(Color.cyan)
}
public void run() //recibiendo hilo
{
mientras(t)
{
if(fangxiang==0)//correcto
{
>try
{
x =10;
snake[0].setLocation(x, y //Establece la posición de la cabeza de la serpiente
if(x==weixamp;amp;y==weiy) //comer comida
{
shu
weix=(int; ) (food[shu]*0.1)*60;
weiy=(int)(food[shu]10)*40;
repaint(); one Food
add(snake[shu]); //Agrega el número y la posición de los segmentos de serpiente
snake[shu].setBounds(snake[shu-1].getBounds( ));
}
thread.sleep(100); //Dormir 100 ms
}
catch(Exception e){ }
catch(Exception e){}
p>
}
else if(fangxiang==1)//left
{
prueba
{
x-=10
serpiente[0].setLocation(x, y)
if(x==weixamp;amp;y==weiy )
{
shu
weix=(int; )(comida[shu]*0.1)*60;
weiy= (int)(comida[shu]10)*40
repintar(); p>add(serpiente[shu]);
serpiente[shu] .setBounds(serpiente[shu-1].getBounds()
}
thread.sleep(100);
}
catch(Exception e){}
}
else if(fangxiang= =2)//hacia arriba
{
prueba
{
y-=10; [0].setLocation(x, y);
if(x ==weixamp;amp;y==weiy)
{
shu
weix=(int)(comida[shu]*0.1)*60
weiy=(int)(comida[shu]10)*40; >repintar();
add(serpiente[shu]);
serpiente[shu].setBounds(serpiente[shu-1].getBounds()
);}
thread.sleep(100);
}
catch(Exception e){}
} p>
else if(fangxiang==3)//abajo
{
intenta
{
y =10
serpiente[0].setLocation(x, y
if(x==weixamp;amp;y==weiy)
>
{
shu;
weix=(int)(comida[shu]*0.1)*60; comida[shu]10)*40;
repintar();
add(serpiente[shu]);
serpiente[shu].setBounds(serpiente). [shu-1].getBounds());
}
thread.sleep(100);
}
catch( Excepción e){}
}
int num1=shu;
while(num1gt; 1)//Determina si te muerdes la cola
{
if(serpiente[num1].getBounds().x==serpiente[0].getBounds().xamp;amp;serpiente[num1].getBounds().y= = serpiente[0].getBounds().y)
{
t=false
result=false
repintar; ( );
}
num1--;
}
if(xlt;0||xgt;=this.getWidth ( )||ylt;0||ygt;=this.getHeight())//Determina si golpea la pared
{
t=false; p>resultado= falso;
repintar();
}
int num=shu
mientras(numgt; 0) //Establecer la posición de la sección de la serpiente
{
snake[num].setBounds(snake[num-1].getBounds()); ;
}
if(shu==15) //Si el número de segmentos de serpiente es igual a 15, se logra la victoria
{
t=falso;
p>resultado=verdadero;
repintar(); p>
}
public void keyPressed(KeyEvent e) //Presiona la tecla de dirección del teclado
{
if(e.getKeyCode()= =KeyEvent.VK_RIGHT)//Tecla derecha
{
if(fangxiang!=1)//Si la dirección anterior no es hacia la izquierda
fangxiang=0
}
else if(e.getKeyCode()==KeyEvent.VK_LEFT)
{ if(fangxiang!=0)
fangxiang=1;
}
else if(e.getKeyCode()==KeyEvent.VK_UP)
{ if(fangxiang!=3)
fangxiang=2;
}
else if(e.getKeyCode()==KeyEvent.VK_DOWN)
{ if(fangxiang!=2)
fangxiang=3
}
}
público; void keyTyped(KeyEvent e)
{
}
public void keyReleased(KeyEvent e)
{
}
public void paint(Gráficos g) //Dibujar en el panel
{
int x1=this.getWidth()-1
int x1=this.getWidth()-1; p>
p>
int y1=this.getHeight()-1;
g.setColor(Color.red);
g.fillOval(weix, weiy, 10, 10 ); //Comida
g.drawRect(0, 0, x1, y1); //Pared
if(t==falseamp;amp;resultado ==false)
g.drawString("¡JUEGO TERMINADO!", 250, 200); //Error al generar el juego
else if(t==false&resultado ==true)
p>g.drawString("¡GANA!", 250, 200); //Salida del juego exitosamente
}
}
clase MyWindow extiende Frame implementa ActionListener//Clase de ventana personalizada
{
MyPanel my
Botón btn; p>Panel panel;
p>
MiVentana()
{
super("GreedSnake"); =nuevo MiPanel();
btn=nuevo Botón("comenzar");
panel=nuevo Panel()
btn.addActionListener(este) ;
panel.add( new Label("Presione la tecla Tab después de comenzar a seleccionar la serpiente")); >panel.add(new Label("Presione las teclas arriba, abajo, izquierda y derecha Controle la acción de la serpiente"));
add(panel, BorderLayout.NORTH); (mi, BorderLayout.CENTER);
setBounds(100, 100, 610, 500);
setVisible(true);
validate(); /p>
addWindowListener(new WindowAdapter()
{
cierre de ventana pública vacía(WindowEvent e)
{
Sistema .exit(0);
}
});
}
acción nula pública realizada (
ActionEvent e)//Presiona el botón de inicio
{
if(e.getSource()==btn)
{
prueba
{
my.thread.start(); //Iniciar el hilo
my.validate();
catch(Excepción ee){}
}
}
}