Ejemplos de programación de serpientes
import javax.microedition.lcdui.*; la clase pública SnakeMIDlet extiende MIDlet {
lienzo de serpiente visualizable = nuevo lienzo de serpiente();
Público SnakeMIDlet() {
Display.getDisplay(this).
setCurrent(displayable);
} public void startapp(){ } public void pause app(){ } public void destroy app(Boolean indefinido){ }// Nombre de archivo: SnakeCanvas.javapackage serpiente importa Java. util *;
Importar javax .micro edición . La clase pública SnakeCanvas extiende Canvas para implementar Runnable{
/* *Almacena las coordenadas del nodo serpiente, donde el segundo subíndice es 0, que representa la coordenada X, y el segundo subíndice es 1, que representa las coordenadas Y. */
int[][]snake = new int[200][2];
/* *Número de nodos utilizados*/
int SnakeNum
/* *La dirección del movimiento de la serpiente, 0 representa hacia arriba, 1 representa hacia abajo, 2 representa hacia la izquierda, 3 representa hacia la derecha*/
int dirección; p>/*Dirección de movimiento*/
/* *Arriba*/
private final int DIRECCIÓN _ ARRIBA = 0;
/* *Hacia ABAJO* /
privado final int DIRECCIÓN _ ABAJO = 1
/* *IZQUIERDA*/
privado final int DIRECCIÓN _ IZQUIERDA = 2
/* *Derecha*/
private final int DIRECCION _ DERECHA = 3; /* *Ancho del área de juego*/
int ancho;
/* *Altura del área de juego*/
int height; /* *Ancho de la unidad del cuerpo de la serpiente*/
Ancho de la serpiente del byte final privado = 4 /* *Si está en pausa, verdadero significa suspendido */
booleano isPaused = false
/* *Si se está ejecutando, verdadero significa en ejecución*/
Booleano isRun = verdadero/* * Intervalo de tiempo*/
Privado final int SLEEP _ TIME = 300
/* *X coordenada de comida*/
int comidaX p>
/* *Coordenada Y de los alimentos*/
int foodY
/* *Control de parpadeo de los alimentos*/
Booleano b = true ;
/* *Objeto aleatorio*/
Aleatorio aleatorio = new Random();
Public SnakeCanvas() {
/ /Inicialización p>
init();
ancho = this . getwidth();
altura = this .
//Inicio. hilo
Nueva publicación (esta).
start();
}/**
*Inicializar datos de inicio
*/
Private void init(){ p>
//Inicializa el número de nodos
snake num = 7;
//Inicializa los datos del nodo
for(int I = 0 ; I ltsnakeNumi ){
serpiente[I][0]= ancho de 100 serpientes * I;
serpiente[I][1]= 40;
}
//Inicializar dirección de movimiento
Dirección = dirección_derecha;
//Inicializar coordenadas de comida
comidaX = 100; p >
comidaY = 100;
} pintura en blanco protegida (gráfico g) {
//borrar pantalla
g establecer color (0x ffffff). );
g.fillRect(0, 0, width, height);
g set color(0); //Dibuja el cuerpo de la serpiente
. for(int I = 0; iltsnakeNumi){
g.fillRect(snake[i][0], serpiente[i][1], SNAKEWIDTH, ancho de serpiente);
}
//Dibujar comida
If (b){
g.fillRect(foodX, foodY, SNAKEWIDTH, Snake width);
}
}Movimiento privado no válido (dirección int){
//La serpiente se moverá
for(int I = serpiente num-1; i gt0;i-){
Serpiente[i][0] = serpiente[I-1][0];
Serpiente[i][1] = serpiente[I - 1][1];
}//La primera celda se mueve
switch(direction){
case direction_up:
serpiente [0][1]= serpiente[0][1]-ancho de serpiente;
Descanso;
Dirección del caso_Abajo:
serpiente[0][1] ]= serpiente[0][1] ancho de serpiente;
Descanso;
Dirección del caso_izquierda:
serpiente [0][0]= serpiente[0] [0]-ancho de serpiente;
Descanso;
Dirección del caso_derecha:
serpiente[0] [0]= serpiente[0][0] ancho de serpiente ;
Descanso;
}
}
/**
*Come alimentos y cultiva tú mismo .
*/
Private void eatFood(){
//Determina si la cabeza de serpiente se superpone con la comida.
if(snake[0][0]= = comidaX amp; ampsnake[0][1] == comidaY){
serpiente num;
generar alimentos();
}
}
/**
*Producir alimentos
*Nota : Las coordenadas de la comida deben estar dentro de la pantalla y no pueden superponerse con el cuerpo de la serpiente.
*/
Private void generateFood(){
while(true){
foodX = math . ()(ancho-ancho de serpiente 1))
/ancho de serpiente * ancho de serpiente;
comidaY = matemáticas ABS(random. nextint()(alto-ancho de serpiente 1))
/ancho de serpiente * ancho de serpiente;
boolean b = true;
for(int I = 0; iltsnakeNumi){
if(comidaX == serpiente[I][0] amp; ampsnake[i][1] == comidaY){
b = false
romper;
}
}
Si (b){
Romper;
}
}
}
/**
* Determina si el juego ha terminado.
*Condiciones finales:
* 1. El contrabandista ha cruzado la línea.
* 2. El pez negro se toca.
*/
El valor booleano privado esGameOver(){
//Identificación de límites
if(snake[0][0] lt; 0 | | serpiente[0][0] gt; (ancho - SNAKEWIDTH) ||
serpiente[0][1] lt; Altura - ancho de la serpiente)){
return true
}
//se toca
for(int I = 4; i ltsnakeNumi ){
if(serpiente[0][0] == serpiente[i][0]
amp ampsnake[0][1]== serpiente[I] [ 1]){
Devuelve verdadero
}
}
Devuelve falso
}/**
*Manejo de eventos
*/
tecla de anulación pública presionada (código de clave int){
int acción = this getgameaction( clave. código);
//Cambiar dirección
Cambiar (acción) {
Caso arriba:
Si (dirección! = dirección _Abajo ){
dirección = DIRECCIÓN _ ARRIBA
}
Descanso;
Caso abajo:
if ( dirección != DIRECTION_UP){
dirección=dirección_abajo;
}
romper;
caso Lado izquierdo:
if (dirección!=dirección_derecha){
dirección=dirección_izquierda;
}
Pausa;
Derechos del caso: p>
if (dirección!=dirección_izquierda){
dirección=dirección_derecha;
}
Rotura;
Caso de incendio :
//Pausar y continuar
isPaused = ! está en pausa
Romper;
}
}/**
*Métodos de subprocesos
*Usar retraso exacto .
*/
Ejecución de vacío público(){
Pruebe {
mientras (isRun) {
//Hora de inicio
inicio largo = sistema. hora actual millis();
if (!isPaused){
//comer comida
comer comida();
//Mover
Mover (dirección);
//Finalizar juego
if( isGameOver()){
Break;
}
//Control de flasheo
b =! b;
}
//Repintar
repintar();
final largo = sistema milisegundos(); /p>
//Retraso
if(end-start lt;SLEEP_TIME){
hilo SLEEP(SLEEP _ TIME-(end-start));
p>
}
}
}catch(Excepción e){}
}
}