Red de conocimiento informático - Problemas con los teléfonos móviles - Ejemplos de programación de serpientes

Ejemplos de programación de serpientes

Código fuente de J2ME Snake: aproximadamente 200 líneas, incluido el paquete de comentarios detallados Snake; import javax.microedition.midlet.*;

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

/* *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

init();

ancho = this . getwidth();

altura = this .

//Inicio. hilo

Nueva publicación (esta).

start();

}/**

*Inicializar datos de inicio

*/

Private void init(){

//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;

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:

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){}

}

}