Asesoramiento para un primer año de especialización CS [cerrado]

17

Estoy llegando al final de mi primer año de CS, que ha sido principalmente un curso basado en Java. Me gustaría mojarme los pies con un poco de desarrollo del juego, pero no estoy seguro de por dónde empezar.

Algunas personas me han sugerido que comience con el creador de juegos que tiene un lenguaje de secuencias de comandos de estilo C (que debería ser fácil de aprender), ya que es probablemente el más simple y me permite centrarme principalmente en el diseño del juego y en cómo encaja todo el juego.

Veo que muchas personas recomendaron XNA, ya que tiene una buena abstracción de opengl y directX a través de sus API. También escucho que C # es muy similar a Java.

También he considerado la programación de juegos en Java ya que me siento bastante cómodo con él y he estado haciendo lecturas adicionales en multi-threading y las API de gráficos 2D.

Finalmente, un amigo me mostró recientemente pygame, que también suena muy bien, aunque no sé mucho al respecto.

No sé si C ++ es un buen punto de partida, muchas de las publicaciones que he visto para desarrolladores de juegos para principiantes no lo recomiendan para un primer proyecto de juego.

Agradecería cualquier aportación, especialmente de aquellos que entraron en el desarrollo de juegos desde un fondo Java

avatarX
fuente
55
C ++ es difícil, muy difícil, pero es más fácil a largo plazo si intentas concentrarte antes de que Java realmente lo configure. Definitivamente es más difícil tratar de aprender C ++ de un fondo de Java que aprender Java de un fondo de C ++. joelonsoftware.com/articles/ThePerilsofJavaSchools.html
David Young
1
Habría muerto tratando de aprender C ++ después de comenzar con Java, comencé con un estilo anterior C ++ y luego aprendí Java. Si le preocupa dar el salto a los punteros, le recomiendo que aprenda a programar directamente en C y Unix. Te pone en una mentalidad completamente nueva, por lo que es menos probable que apliques conceptos de Java inaplicables.
michael.bartnett

Respuestas:

14

Hay muchas buenas opciones. (Enseño CS1 y CS2, así como programación de juegos). Primero, por supuesto, aprender a pensar como un informático. No te atasques demasiado en el lenguaje, porque los conceptos son verdaderamente universales.

Java es un lenguaje bastante bueno, pero construir un juego en Java es un poco tedioso. Existen algunos motores interesantes que facilitan un poco el proceso. Desafortunadamente, puede ser un poco doloroso conectar un motor de juego a tu herramienta de edición.

Me gusta el motor FANG (lamentablemente aún no puedo publicar hipervínculos, así que búscalo en Google). Una parte interesante de este proyecto es el editor en línea. Esto significa que puede comenzar de inmediato sin tener que meterse con la configuración del eclipse.

Realmente no soy fanático de Game Maker. La GUI está bien para las personas que no quieren aprender a programar, y es una herramienta de prototipos decente (pero no excelente). Sin embargo, hay dos cosas al respecto que no me gustan. Primero, es comercial. Eso no es algo malo, pero si hay alternativas gratuitas de código abierto que son igual de buenas (y las hay) tal vez debería considerarlas primero. El mayor problema con Game Maker es el lenguaje de secuencias de comandos. Eventualmente, vas a superar la GUI y querrás comenzar a escribir código. El lenguaje de secuencias de comandos en GM es bastante retrospectivo. Como eres un experto en CS, estás (espero) interesado en la reutilización del código, la elegancia, la claridad, la eficiencia y la modularidad. El idioma GM te decepcionará.

Amo Python y Pygame. (De hecho, escribí un libro sobre ellos. Vea todas mis notas y videos en línea en mi sitio si lo desea. Puede acceder a esos recursos, tenga o no el libro). Python es un lenguaje elegante y agradable que no es es demasiado difícil de aprender (especialmente si ya sabe cómo programar). Pygame es un contenedor del popular motor SDL 2D. De hecho, he agregado un segundo contenedor a pygame para que sea tan fácil de trabajar como Flash.

Hablando de Flash, no creo que valga la pena. (Sé que no preguntaste) Es una buena plataforma, pero el costo y la incertidumbre sobre cómo le irá en los dispositivos móviles significa que puede no ser una herramienta de aprendizaje tan buena. (También escribí un libro sobre desarrollo de juegos en Flash, pero ya no enseño Flash).

Aquí hay otras cosas geniales para probar. Obtenga una copia de scratch del MIT: scratch.mit.edu Está hecho para niños, pero no deje que eso lo desanime. Es una herramienta de juego y animación absolutamente increíble. La programación utiliza mosaicos, por lo que es fácil comenzar. Te sorprenderá lo que puedes hacer con él.

También puede probar Alice de Carnegie Melon www.alice.org. La última (3ª) edición es en realidad una extensión de Java, que utiliza modelos Sims2.

Tanto Scratch como Alice son libres.

Una gran herramienta más para analizar es Blender www.blender.org

Es una herramienta de modelado 3D, pero muchas personas no saben que también es un motor de juego completo con una interfaz de programación de arrastrar y soltar. Una vez que haya superado los mosaicos, tiene incorporado el soporte de Python.

Ahora estoy bastante interesado en HTML5 (que apenas es HTML, es realmente HTML, CSS y JavaScript). No está tan bien como entorno de desarrollo de juegos, pero creo que será un gran jugador. Mi próximo libro será sobre desarrollo de juegos en HTML5.

Mucha suerte y avíseme si tiene más preguntas.

Dos pi
fuente
Gracias por su aporte, estoy revisando su sitio mientras hablamos. Estoy seguro de que será invaluable tener a alguien con tu experiencia contribuyendo aquí
avatarX
El manejo del puntero no es universal = (maldiga mi aparición de Java.
David Young
Me gustaría saber por qué crees que construir un juego en Java es tedioso. Además, parece que estás sugiriendo que Python es menos tedioso. Con tantos marcos y bibliotecas centrados en juegos Java, parece una declaración muy audaz.
zfedoran
1
Para un programador principiante, todo en Java puede ser más tedioso. Compare algo como printf. En python es parte de la declaración de impresión: imprime "% s, tu puntaje es% d"% (estudiante, puntaje). En php, debe convertir todas las primitivas en clases de contenedor, convertirlas en objetos y crear una matriz de objetos anónimos. Me gusta java (Lo he enseñado durante años y escribí un libro al respecto). Sin embargo, si el objetivo es lograr que alguien participe en la programación de juegos, quiero un lenguaje que se salga del camino lo más posible.
Dos pi
Gracias por tomarse el tiempo para comentar. Me ha ayudado a entender de dónde vienes. Sin embargo, todavía no estoy convencido de que Python sea un mejor idioma para los estudiantes, de forma similar a cómo la facultad de mi Universidad ha cuestionado su cambio reciente a Python para los estudiantes de primer año. Quizás, los estudiantes simplemente están atrapados en nuevos problemas. Solían ser estudiantes que hacían todo "público estático", ahora les cuesta entender la diferencia entre los tipos.
zfedoran
5

Depende de cuál sea tu objetivo y en qué parte del desarrollo del juego quieras entrar.

¿Está más interesado en los detalles prácticos sobre cómo funcionan los motores de juego y cómo construir algo desde cero o desea ingresar a las partes del desarrollo del juego lo más rápido posible?

Tuercas y tornillos: XNA es una buena manera de sumergir los dedos de los pies en esa arena. El marco hace mucho por usted, pero puede reemplazar lentamente cada pieza con su propio código a medida que se sienta más cómodo con C #. Aprender C # es bueno para las futuras posiciones de desarrollo de juegos, ya que las herramientas a menudo se crean con C #.

Programación del juego: Unity es una buena opción aquí. Gratis, y le permite codificar en varios idiomas, incluidos JavaScript y C #. Podrá poner las cosas en marcha rápidamente, lo que es un buen impulso de motivación. Además, puede hacer la transición a otro idioma e incluso mezclar idiomas para ayudarlo a practicar la ampliación de su comprensión.

Lo bueno es que ambos son libres de jugar y se pueden conectar a una variedad de hardware por un costo bastante mínimo.

Wkerslake
fuente
4

Siempre podría hacer algunos juegos basados ​​en Java, no hay nada de malo en ellos (http://zetcode.com/tutorials/javagamestutorial/)

XNA y AS3 están muy cerca y pueden crear juegos tan complicados o tan simples como se desee. (aunque lo mismo es cierto con java)

Una cosa para recordar es siempre practicar, y solo jugar con el código.

Fantasmas
fuente
3

Java Monkey Engine

Si te sientes más cómodo con Java, puedes usar Java Monkey Engine como marco para usar mientras haces juegos. También tiene una cantidad decente de documentación / tutoriales que incluyen instrucciones para integrarse con Netbeans y Eclipse.

lathomas64
fuente
Debo decir que JMonkeyEngine se ve bien. Definitivamente lo comprobaré. Gracias por tu aporte
avatarX
2

Unidad

Yo diría que intentes con Unity . Tienen una versión gratuita y puedes mojarte los pies en pocas horas para obtener la idea básica siguiendo dos tutoriales proporcionados por Unity:

La otra cosa interesante de la unidad es que puedes usar JavaScript como lenguaje de script y puedes publicar tu juego en Windows, MacOS, Web, iPhone y ahora también con la versión 3 en dispositivos Android.

También están utilizando el motor StackExchange para las respuestas de Unity y tienen una comunidad maravillosa para todas sus preguntas relacionadas con Unity.

Lipis
fuente
1

Cualquiera de esos sería un buen comienzo, hablando como un desarrollador cuya educación inicial en CS fue en Java.

C # está muy cerca de Java (a veces bromeo diciendo que es Java de plataforma limitada con mejores bibliotecas), por lo que XNA podría ser una buena opción. Minecraft está desarrollado en Java con la biblioteca de juegos lwjgl, así que si quieres seguir con Java, ese es un buen método. Por supuesto, el desarrollo 3D es un poco complicado; dependiendo de su conocimiento, experiencia y perseverancia, es posible que desee esperar en 3D (o incluso en 2D en un sistema basado en 3D) hasta que obtenga más educación en su haber.

Para soluciones 2D: Game Maker es muy simple y se ha utilizado para crear algunos juegos geniales. Debería poder aprender su lenguaje de programación con bastante facilidad, pero podría ser demasiado simple para alguien con un año de experiencia en Java. Desarrollo en Flash usando AS3 puro ( tutorial ), que está lo suficientemente cerca de Java para que tus habilidades se traduzcan fácilmente.

Gregory Avery-Weir
fuente
1

Recomiendo encarecidamente ir con XNA. Es una plataforma bastante capaz y bien soportada con una comunidad en crecimiento. XNA realmente está comenzando a encontrar su "lugar" en el ecosistema ahora que el marco se distribuye en más plataformas que nunca (incluido Windows Phone 7). Sin embargo, lo más importante es que usar XNA lo obligará a aprender C # y el desarrollo general de .NET. Le convendría ganar experiencia con esta plataforma, independientemente de si decide ingresar al desarrollo de juegos, ya que el desarrollo de .NET está creciendo y tiene un mercado laboral muy saludable. Java, por otro lado, ha estado muriendo lentamente por algún tiempo, y los eventos recientes solo han servido para acelerar su desaparición. Si su programa CS, como el que completé, está muy centrado en Java, entonces le sería útil aprender C # / .NET en su propio tiempo.

Incluso si Java vive y decide seguir una carrera en el desarrollo de Java, probablemente terminará teniendo que integrarse con los sistemas .NET de todos modos. Entonces, sin importar cómo resulten las cosas, la experiencia solo lo ayudará a largo plazo.

Mike Strobel
fuente
Indeed.com/jobtrends?q=java&l= y Indeed.com/jobtrends?q=.net&l= son bastante representativos de la demanda del mercado para ambos. Parece que Java es el que realmente está creciendo.
David Young
No había considerado el influjo del desarrollo de Java provocado por el éxito de la plataforma Android. Eso probablemente tenga mucho que ver con el salto en las ofertas de trabajo relacionadas a fines de 2008 y principios de 2009. Será interesante ver cómo WP7 y la disponibilidad de MonoTouch para iOS y MonoDroid para Android impactan la presencia móvil de Java.
Mike Strobel
1

Si estás interesado en el diseño de juegos , ¿por qué no comenzar haciendo un juego de cartas o algo que no requiera programación? Eso le permitirá concentrarse en el diseño y la mecánica del juego en lugar de abrirse camino a través de API, idiomas y marcos con los que no está familiarizado.

Trimbo
fuente
1

También puede disfrutar usando http://Processing.org . Es un excelente entorno para aprender programación gráfica. Si bien no es estrictamente una herramienta de desarrollo de juegos, tiene mucho que ofrecer. Su lenguaje es una extensión / simplificación de Java y será rápido de aprender.

xer0x
fuente
0

Un consejo no relacionado con mi programación:

Cree un proyecto ordenado y preséntelo a sus profesores.

Así es como conseguí trabajos de verano como programador después del primer y segundo año en la escuela.

Fabricante de clavos
fuente
Esto puede ser útil, pero en realidad no aborda la crisis de lenguaje / API a la que llega el OP.
El pato comunista
0

Si solo estás buscando desarrollo de juegos, ¿por qué aprender otro idioma al mismo tiempo? Me quedaría con Java, a menos que quieras aprender un nuevo idioma.

Las principales opciones para Java que conozco son jMonkeyEngine, que es un motor de gráficos 3D y generalmente se considera bastante bueno.

Y está jOGL, que es un contenedor Java sobre OpenGL. Esto es, naturalmente, un nivel mucho más bajo.

Si recién está comenzando y quiere trabajar con la lógica más que lidiar con los buffers y la encuadernación de sombreadores y similares, vaya con jMonkeyEngine. Si quieres profundizar para comenzar, ve con jOGL.

Si quieres aprender un nuevo lenguaje, fuera de C # y Python, probablemente diría C #. La sintaxis es muy similar a Java, y XNA y SlimDX son muy buenos para los gráficos. XNA está en un nivel superior y ha hecho algunas cosas por ti. Sin embargo, esto viene con una restricción solo para Windows, sin Mono.

Python es un lenguaje muy fácil de obtener (me tomó aproximadamente una semana como máximo con poca atención de un libro, proveniente de un año de C ++). Pygame es un contenedor alrededor de las bibliotecas SDL de C, por lo que probablemente no tenga la misma cantidad de funcionalidad que XNA.

El pato comunista
fuente
0

Otro voto por la Unidad . Tendrá mucho tiempo en sus próximos años de estudio de CS para involucrar C ++ y otros lenguajes. Si su objetivo es desarrollar un juego, enredarse en lo que es esencialmente el trabajo de desarrollar un motor llevará demasiado tiempo. Si desea ser un diseñador de motores, definitivamente regrese e intente una implementación de nivel inferior.

El motor de Unity te permitirá abstraer la mayoría de los detalles para que puedas concentrarte en la programación del juego. La comunidad en los foros y las respuestas de Unity basadas en Stack Exchange son increíblemente útiles. Puede programar en Javascript o C #. Viniendo de Java, comencé con Javascript porque muchos de los tutoriales fueron escritos para ello, pero cambié a C # (que fue un cambio bastante fácil).

Creo que XNA y Pygame también podrían ser buenos (ya que abstraen algunas de las cosas más tediosas), pero no tengo experiencia con ellos.

Finalmente, no apuntes demasiado con tu primer juego. Puede ser muy fácil subestimar cuánto tiempo lleva implementar funciones en un juego. Comience con una mecánica básica del juego que le permita poner el juego en un estado jugable rápidamente. Entonces puede comenzar a agregar otros elementos.

¡Que te diviertas!

acmshar
fuente
0

XNA es una gran solución si sales de Java. C # se verá y leerá casi IDÉNTICAMENTE en Java para usted, por lo que podrá saltar muy rápido sin aprender una nueva sintaxis. El marco XNA proporciona toneladas de buenas API para trabajar, y hay un montón de código abierto gratuito de "licencia permisiva de microsoft" para comenzar algunos proyectos.

No recomendaría que use Java, la mayoría de las API de gráficos son terribles, no hay una gran cantidad de soporte 3D y, en general, Java solo funciona lentamente; No es un gran problema para la mayoría de las aplicaciones de Java, pero los videojuegos necesitan MUCHO rendimiento.

C ++ es la forma de hacer videojuegos, más o menos punto. Sin embargo, pasar de Java a C ++ será bastante discordante. Sin mencionar que la mayoría de la programación de gráficos hardcore de bajo nivel es realmente estilo C, no C ++, por lo que va a hacer un montón de aritmética de puntero para tratar de obtener más rendimiento. Puede ser interesante, pero lleva mucho tiempo. También puede tomar mucho para comenzar.

Hay muchos buenos motores de juego como Ogre, pero luego tienes que pasar mucho tiempo aprendiendo cómo hacer las cosas primero, puede parecer demasiado complicado.

Tenga cuidado, por asombrosas que sean muchas de sus ideas de juego, recuerde que los videojuegos son caros, requieren mucho tiempo de desarrollo y tienen grandes equipos de desarrollo.

Si quieres crear un juego y ser la única persona que trabaja en él, casi TENDRÁS que hacerlo un juego 2D (aunque de todos modos deberías comenzar con 2D) y tendrás que comenzar REALMENTE, REALMENTE simple.

Casi todo lo que puedas imaginar que sería divertido es demasiado ambicioso en este momento.

Mi consejo: obtén el visual studio 2010 express gratis si no lo tienes. Descargue el estudio de juegos XNA y .NET Framework 4. Descargue una demostración de XNA. Ejecute la demostración, luego mire a través del código y vea qué hace qué. Intenta leer algo de documentación sobre cómo XNA hace juegos 2D.

ENTONCES, elige tu juego súper fácil favorito de la vieja escuela. Pac-man? ¿Apestar? Asteroides? ¿Invasores espaciales? Mario Elige algo ESTÚPIDO, ESTÚPIDO fácil. Luego simplemente rehaga el juego exactamente como estaba. Tienes suficiente de qué preocuparte con la programación y el aprendizaje de una nueva API que NO necesitas molestar con el diseño del juego; solo te distraerá.

Luego, una vez que tenga su mario clon en marcha o lo que sea que haya hecho, puede comenzar a experimentar con el juego e intentar agregar cosas nuevas.

Comience pequeños pasos de bebé, y será mucho más divertido y aprenderá mucho más.

Intenta saltar a modificar el código fuente de Quake3 en C ++ para crear un juego y te sentirás realmente frustrado, e incluso si lo haces funcionar, no aprenderás mucho de hacerlo.

Solo diviértete: D

SpacePrez
fuente
0

Destello

El AS3 de Flash es un lenguaje fantástico para comprender conceptos importantes de OOP sin tener que preocuparse por la administración de memoria y la escritura de archivos de encabezado. También es prácticamente un motor de juego 2D completo, con un árbol de visualización, un sistema de eventos y todo tipo de otras funciones útiles.

Existe una ENORME comunidad de desarrolladores de juegos Flash, y contrariamente a la creencia popular, puedes desarrollar juegos Flash usando herramientas de código abierto. Si estás en Windows, te recomendaría FlashDevelop .

Yo diría que Flash es aún más compatible con plataformas cruzadas que Java o realmente cualquier otra tecnología, excepto quizás Unity. El 99% de las personas pueden ver cosas Flash en su navegador de escritorio, por lo que es fácil compartir sus creaciones con el mundo. La mayoría de los teléfonos inteligentes están recibiendo lentamente soporte Flash, y para iOS, la única plataforma que no admite Flash en el navegador, puede crear aplicaciones con Flash CS5 (aunque eso tiene un costo).

Creo que sería una pena para ti tener que luchar con algo más complejo como C ++ o incluso C # cuando puedas comenzar a aprender los conceptos básicos de la creación de juegos ahora mismo con AS3. Una vez que comprenda AS3, será fácil cambiar a otros idiomas más adelante. En mi propio caso, era un desarrollador de Flash, pero aprendí a programar con Objective-C y logré hacer un exitoso juego para iPhone. Hazte un favor y visita http://www.flashgamedojo.com/ - ¡No creo que te decepciones!

Unidad

Unity tiene muchos de los mismos beneficios de Flash, pero en 3D.

Con Unity, puede programar en C # o en UnityScript (que es javascript-y). No es de código abierto, pero es gratis. Está muy bien respaldado y hay una gran comunidad. El problema con el desarrollo de juegos 3D es que para la mayoría de los juegos necesitarás mucho arte y recursos. Esto también puede ser un problema con los juegos en 2D, pero en general, el arte en 3D lleva mucho más tiempo y es mucho más difícil hacer "arte de programador".

Una nota sobre código abierto

No hay nada de malo en usar software de código abierto, pero te estás quedando corto si solo lo estás usando porque es de código abierto. Elija el mejor lenguaje y herramientas que lo ayudarán a aprender más rápido con la menor fricción. En la misma línea, la mentalidad de "aprender lo más difícil primero" (es decir, C ++) es una locura. Lo que realmente debería estar aprendiendo es la lógica, no la sintaxis, así que aprenda el idioma que tenga menos equipaje y barreras de entrada. En mi opinión, eso es AS3.

Matt Rix
fuente