//Busca si la posicion de la cabeza coincide con un nodo de la misma, del tablero o comida y acaba el juego o crea una nueva comida y crece private void colision() { System.Collections.IEnumerator ent = nivelActual.nivel.Tablero.GetEnumerator(); System.Collections.IEnumerator ens = serpiente.Cuerpo.GetEnumerator(); int[] coordenadas = new int[2]; Boolean estaChocado = false; int numNodos = serpiente.Cuerpo.Count; while (ens.MoveNext() && !estaChocado && numNodos > 1) { numNodos--; n = (Nodo)ens.Current; if (n.X == serpiente.X && n.Y == serpiente.Y) { estaChocado = true; } else { estaChocado = false; } } while (ent.MoveNext() && !estaChocado) { coordenadas = (int[])ent.Current; if (coordenadas[0] == serpiente.X && coordenadas[1] == serpiente.Y) { estaChocado = true; } else { estaChocado = false; } } if (serpiente.X == comida.X && serpiente.Y == comida.Y) { serpiente.crecer(comida.Cantidad); generarComida(); } if (estaChocado) { _hayFin = true; } }
//Metodo llamado en cada tick del timer, mueve la serpiente y comprueba si hay colisiones public void actualizar() { serpiente.Mover(); if (comida.buscarenComida(serpiente.X, serpiente.Y)) { serpiente.crecer(comida.Cantidad); generarPuntuacion(comida.Cantidad); generarComida(); } _hayFin = nivelActual.nivel.buscarenTablero(serpiente.X, serpiente.Y); if (_hayFin == false) { _hayFin = serpiente.buscarenSerpiente(serpiente.X, serpiente.Y, false); } }