.net - programacion - juego para aprender a programar para niños
Desarrollar un juego tipo Robocode con.Net, para una tarea escolar (6)
¿este proyecto es factible?
Suena grande No sé cuánto tiempo tienes. Aquí hay una regla general:
Cuando se produce la fecha de caducidad, si el 90% del sistema que entrega el 90% de la funcionalidad está 100% completo, entonces puede decirse que el proyecto tiene al menos un 90% de éxito.
OTOH si el 100% del software que entrega el 100% de la funcionalidad está terminado en un 90% (es decir, no está terminado), entonces no se ha terminado nada y el proyecto es un fracaso.
Una clave del éxito, entonces, es el "desarrollo incremental" y la "entrega continua". La especificación de tu proyecto dice:
Necesitamos desarrollar un Proyecto de Software, que básicamente incorpore un sistema completo .
Para hacer esto, sugiero:
- Crear (es decir, diseñar, desarrollar y probar) un pequeño sistema completo
- Repita {copia de seguridad o control de versión de lo que tiene; agregue un poco nuevo, entero al sistema, y pruébelo hasta que sea satisfactorio} hasta que (se quede sin tiempo).
Actualmente estoy en mi último año en la escuela, estudiando para un Diploma Nacional Superior en Estudios de Computación, y básicamente en este semestre final, necesitamos desarrollar un Proyecto de Software, que básicamente incorpore un sistema completo .
Ahora, lo que estoy pensando hacer es algo parecido a Robocode , pero en lugar de Java, lo haré con .Net Framework.
¿Qué es Robocode?
Para aquellos de ustedes que no saben lo que es Robocode, es básicamente un tipo de juego de programación en el que las personas desarrollan sus propios robots usando métodos de las interfaces de clase y las clases descargables que existen, y luego se pelean entre sí en una batalla autónoma en una arena ... como tal:
texto alternativo http://articles.techrepublic.com.com/i/tr/cms/contentPics/robocode.gif
Básicamente, como dije, quiero recrear este tipo de escenario usando .Net Framework ... y estoy publicando esta pregunta aquí en StackOverflow con la esperanza de que los desarrolladores más experimentados puedan guiarme en la dirección correcta para este proyecto. .
Lo que tengo en mente hasta ahora es básicamente crear:
- Una aplicación sin conexión que servirá como campo de batalla y la interfaz del usuario para crear nuevas batallas con robots existentes y demás.
- Una interfaz en línea que los jugadores podrán usar para registrar nuevos robots, ver los resultados de torneos anteriores, etc.
- Y, obviamente, las interfaces de clase que los jugadores deberán usar para crear sus robots.
Animación y Gráficos (para las batallas reales)
Ahora, por supuesto que habrá algún tipo de animación y movimiento cuando se produzca la batalla, y aún no he decidido qué usar como medio para esto.
Las opciones que actualmente tengo en mente son:
- Desarrollando, como dije en los primeros puntos de viñetas, una aplicación fuera de línea que servirá como campo de batalla, y todas las animaciones se realizarán usando principalmente el código C #
- O desarrolle una aplicación de Silverlight que manejará las animaciones (por lo tanto, cambiando el escenario de una aplicación sin conexión a una en línea ahora
- O, quizás el menos factible de ellos, cree las animaciones de batalla usando JavaScript, con algo así como el Canvas
¿Qué crees que podría ser más adecuado para este escenario en particular?
Desarrollo de clases e interfaces
Para que los jugadores desarrollen los robots, les proporcionaré ciertas interfaces de clase que podrán usar como en Robocode.
Los ejemplos de tales eventos y métodos pueden incluir:
public void run () {}
public void onScannedRobot(ScannedRobotEvent e) {}
walk(/* ammount in pixels or w/e to walk to */);
turnRight(/* value in degrees for an angular turn */);
//etc...
Aquí hay un fragmento del código en Robocode (Java):
public class MyFirstRobot extends Robot {
public void run() {
while (true) {
ahead(100);
turnGunRight(360);
back(100);
turnGunRight(360);
}
}
}
Para que luego realmente ocurran las batallas, estoy pensando en utilizar Reflection para leer realmente los métodos que el usuario está usando e implementarlos para ejecutarlos e invocarlos en momentos particulares de la batalla y demás.
Ahora, lo que gentil y amablemente les pido a ustedes, desarrolladores experimentados, es guiarme un poco a través de este proyecto mío y aconsejarme sobre lo que hay que hacer ... para empezar, ¿ es factible este proyecto? Y si realmente es así, ¿ desde dónde necesito comenzar realmente con mi proyecto?
En cuanto a las tecnologías y el software que pretendo utilizar son:
- .NET Framework 3.5, con C # 3.0
- LINQ (consulta integrada de lenguaje)
- SQL Server 2008
- Microsoft Visual Studio 2008
- jQuery Framework
- Posiblemente Silverlight
Les agradezco a todos, incluso por haber logrado leer hasta este punto en mi pregunta y voy a necesitar y agradecer enormemente toda la ayuda que pueda obtener para finalizar este proyecto.
Gracias por tu tiempo y esfuerzo.
Por cierto, hasta ahora, aparte de Robocode , he encontrado estos juegos que son similares a lo que intento crear:
Cuando comencé a trabajar con WPF (que es muy parecido a Silverlight), terminé pasando mucho tiempo tratando de descubrir cómo hacer las cosas. Es una forma muy diferente de hacer una GUI que lo que he probado y parece que hay mil millones de formas diferentes de hacer las cosas. Mi punto es que si no tienes experiencia con WPF / Silverlight, sospecho que tomará mucho tiempo para que te concentres. Supongo que depende de lo que ya sabes.
Además de eso, apoyo de todo corazón la sugerencia de ChrisW sobre el desarrollo incremental. Te daré una idea de cómo puedes acercarte al diseño del juego. Comience con una API muy simple para los bots, digamos dos funciones sin eventos, entrada o conocimiento del mundo. Simplemente comienza haciendo que los bots se muevan. El objetivo es conseguir un programa completamente funcional con la funcionalidad simple, que incluya todas las partes desde cargar el código del cliente hasta mostrar la ''batalla'' resultante.
Cada bot debe implementar una interfaz con un solo método run () y estar en su propio archivo dll. Cuando comienza la batalla, cada dll con la interfaz implementada se carga (usando reflexión) desde una ubicación determinada y se crea una instancia. Luego comience una batalla con un bucle hasta que haya transcurrido 1 minuto (o lo que sea, solo para ver que algo está pasando):
while (time is not up)
generate random sequence for bots
call run() on each bot
draw(world)
Cuando se acabe el tiempo, la batalla ha terminado. Ahora tiene una aplicación básica que puede comenzar a desarrollar y que le permitirá tener un programa en funcionamiento, incluso si no tiene tiempo para hacer todas las funcionalidades que desea. En el método de ejecución, los bot pueden llamar a la pareja de acciones de movimiento que ha definido en la API. Llamar a estos cambiará el estado del mundo, probablemente solo una cuadrícula de teselas y la ubicación de cada bot.
El siguiente paso podría ser agregar una vista del mundo al método de ejecución de los bots, cambiando el ciclo a este:
while (time is not up)
generate random sequence for bots
call run(WorldView) on each bot
draw(world)
Digamos que los bots solo pueden realizar un par de acciones de movimiento en su método de ejecución. Ahora tienen la opción de obtener una vista del mundo (o de su parte) que les permite moverse hacia o lejos de los enemigos y evitar las paredes.
En la siguiente iteración, puede crear una función API única para dispararle a su cañón (o lo que sea apropiado para su juego). Implemente cómo esto cambia el estado mundial, cómo se rastrean las viñetas y cómo se representa la animación, etc. El ciclo podría verse más o menos así:
while (time is not up and there are more than 1 bot alive)
advance projectiles
calculate projectile-bot collisions and damage
generate random sequence for bots
call run(WorldView) on each bot
draw(world)
Espero que esto te dé una idea de cómo puedes desarrollar el programa de forma iterativa, y al mismo tiempo tener un programa de trabajo que refleje todas las áreas del juego. No tengo mucha experiencia con la implementación de juegos, por lo que deberías mirar mi consejo con ojo crítico, pero así es como atacaría el problema.
Entonces, un poco como virii , entonces?
Es muy factible.
Sugiero comenzar con el sistema de fondo y los objetos que responden al robocódigo "compilado". Qué forma toma ese código "compilado" es todo tuyo.
Luego, crea el intérprete para el robocode. O bien, parece que podrías hacer las clases de .NET. Eso es un regalo de promoción en la parte más difícil.
Finalmente, crea cualquier UI que puedas necesitar ... todo listo.
Es posible que desee que los robots se compilen como .dlls ... sin embargo, solo tiene que crear la interfaz común para ellos y la funcionalidad.
la viabilidad depende totalmente de la capacidad de su equipo, su familiaridad con el marco, etc. He visto personas que podrían dejar algo así en una semana, y otras que no pudieron hacerlo para salvar sus vidas.
El enfoque de reflexión que mencionas suena como la pista incorrecta, a menos que te esté malinterpretando. Su clase base ''Robot'' debe permitir a los desarrolladores anular uno o más métodos, desde los cuales pueden llamar a funciones como ''Disparar'', ''Mover'', etc.
Otra aplicación similar a esta es Terrarium. Los desarrolladores podrían codificar animales y enfrentarlos con otros en un entorno distribuido. Era una aplicación demo de .NET 1.1, y está un poco anticuada, pero algunos de los principios pueden ser útiles para usted. Este tipo ha tomado la reescritura: http://weblogs.asp.net/bsimser/archive/2008/07/16/reintroducing-terrarium-now-with-2-0-goodness.aspx
Real Robocode obtendrá un complemento para ejecutar robots .NET pronto. Me llevó 2 años lograr eso. Primer año dedicado a la refacturación de Robocode original. Segundo en Java para .NET bridge . Y están los bits alfa . Este enfoque tiene el beneficio de poder luchar con los mejores robots Java. Hay un gran tesoro en los robots en realidad.