2012-01-26 24 views
6

Trabajando en un entorno empresarial, ya no consigo codificar ni usar la consola vieja. Mi trabajo es repetitivo y, por lo tanto, no es realmente desafiante.Asignación de matrices Serpiente

decidí desafiarme a mí mismo escribiendo un juego de la serpiente en una consola de C#; y chico, eso hizo que mi cerebro funcionara. Nunca tengo que pensar así de duro en el día a día, pero sentía que mi capacidad de programación no mejoraba.

Tengo un problema. El enfoque básico que tomé fue crear una clase de serpiente y una clase de comida. La clase de serpiente usa una matriz para almacenar todas las coordenadas y luego una clase de dibujo decide qué coordenadas dibujar en la pantalla.

El problema es que a medida que mueve la serpiente, la matriz se llena (maxsize es 250 para el rendimiento), así que cuando llegue al final de la matriz quiero copiar los últimos coords a una matriz temporal, lavar el matriz original y copie los coords de temperatura de vuelta a la matriz principal.

El problema que tengo es copiar x coordenadas de nuevo a la matriz original. Decidí hacerlo manualmente para probar, pero esta solución siempre hace que mi pobre serpiente deje atrás uno de sus segmentos en la pantalla cuando no debería estar allí.

¿Cómo voy a ir haciendo esto mediante programación?

spoints[4, 0] = stemp[249, 0]; 
spoints[4, 1] = stemp[249, 1]; 
spoints[4, 2] = stemp[249, 2]; 

spoints[3, 0] = stemp[248, 0]; 
spoints[3, 1] = stemp[248, 1]; 
spoints[3, 2] = stemp[248, 2]; 

spoints[2, 0] = stemp[247, 0]; 
spoints[2, 1] = stemp[247, 1]; 
spoints[2, 2] = stemp[247, 2]; 

spoints[1, 0] = stemp[246, 0]; 
spoints[1, 1] = stemp[246, 1]; 
spoints[1, 2] = stemp[246, 2]; 

spoints[0, 0] = stemp[245, 0]; 
spoints[0, 1] = stemp[245, 1]; 
spoints[0, 2] = stemp[245, 2]; 

Realmente no me importa la publicación de todo el juego aquí, si alguien realmente quiere profundizar en el código.

+3

Estás haciendo tu vida más difícil mediante el uso de matrices en lugar de colecciones/diccionarios escritos. –

Respuesta

1

considerar el uso de una serie de 'puntos generales' no dibujar puntos, crear otra clase llamada algo así como SnakePart por lo que su clase Snake tiene partes manejables.

También podría crear una clase de matriz personalizada para que en cada parte de la cuadrícula solo tenga un valor hasSnakePart y manipular eso.

+0

Hyp: me estás lastimando el cerebro, la última vez que programé esto fue hace 7 años en el instituto, así que quería que fuera MUY básico lol – Batista

+0

¡Ah, pero esa es la parte divertida, no es así! Haz que tu cerebro funcione, ¡hazlo interesante! – hyp

+0

Cierto, pero pasos de bebe :) Lo siguiente es hacer una serpiente de IA para que el juego sea interesante y luego hacer que las serpientes disparen veneno para desacelerar a la otra serpiente, etc. – Batista

3

Parece que una matriz es un tipo de datos incorrecto para sus propósitos. Considere el uso de un List en su lugar, ya que permite una mayor flexibilidad al mover las entradas.

+0

Gracias! Voy a utilizar una lista, pero por el momento, sólo quiero saber cómo hacer que la programación :) – Batista

+3

Aún mejor: utilizar una cola –

1

¿Ha pensado a medida que agrega una nueva coordenada a la 'frente' de la matriz, la eliminación de la de la 'vuelta' a medida que avanza. Entonces, básicamente, ¿una especie de colección tipo FIFO? Podría usar una cola en C#. Eche un vistazo a este artículo y vea si ayuda a alguno? http://www.dotnetperls.com/queue.

Saludos,
Chris.

+0

Chris, im trazado de todos los puntos pero mi clase de dibujo es un dibujo en todos excepto el último punto en cada iteración. No seguí esta ruta porque entonces la serpiente no tendrá cola y solo tendrá 1 carácter moviéndose en la pantalla jajaja - edite - lo siento, veo su lógica ahora, solo tendría que tener una var que haga un seguimiento de la cantidad de segmentos que tiene la serpiente. – Batista

Cuestiones relacionadas