Respuestas:
Fugarse
Juego fácil ya que no tienes mucho estado de qué preocuparte (es una matriz de valores de ladrillo, si solo tienes un color de ladrillo, es una matriz de banderas), no hay ninguna IA, y puedes hacer un un poco de física para que la pelota rebote correctamente.
Solitario
Las reglas son un poco más complejas que Breakout y la interfaz es muy diferente. Te obliga a pensar en diferentes métodos para implementar un juego. es decir, lo que funciona en un juego no es necesariamente lo que usarías en otro.
Pac-Man
Este es bueno porque puedes trabajar en un poco de IA. Hacer que los fantasmas sigan al jugador (pero no demasiado bien; quiere que el jugador tenga una oportunidad) puede implementarse rápidamente, y tendrá un pequeño juego divertido que puede modificar y mostrar a amigos y familiares (la retroalimentación positiva siempre es algo bueno cuando estás empezando).
Creo que si buscas inspiración en los primeros videojuegos, puedes encontrar toneladas de ideas que son relativamente simples de implementar. Además, puede salirse con la suya con ilustraciones y sonidos súper simples porque de todos modos está copiando algo tan simple. Esto le permite centrarse primero en lo básico: poner en marcha su ciclo de juego, descubrir cómo llevar sus píxeles a la pantalla, reproducir un sonido, mantener la puntuación y obtener la entrada del jugador en el juego.
Casi no importa qué juego elijas primero, solo asegúrate de elegir algo simple con el que puedas obtener resultados rápidos, de esa manera puedes moverte al día siguiente y hacer otro. Y otro. Y otro: cuanto más ganes, más te esforzarás, y eventualmente estarás haciendo juegos complejos antes de que te des cuenta.
Recomiendo encarecidamente que los programadores novatos comiencen con el juego más simple que realmente quieran escribir . Como lo mencionó Matt Rix, una gran parte de escribir un juego versus una demostración es llevarlo a la conclusión: créditos, menús, pruebas de juego, puntajes altos, pausa, pruebas de juego, niveles de dificultad, transiciones de estado de juego limpias, juego pruebas, etc. Eso lleva al menos la mitad del tiempo que vas a poner y simplemente no es divertido. No lo es Entonces, a menos que ames el concepto y estés realmente motivado, te rendirás y seguirás adelante antes de que el juego sea un juego .
Si desea escribir un juego de rol, descubra el concepto de juego de rol más simple y manejable que se le ocurra y que quiera hacer. Lo mismo si quieres hacer un juego de disparos de ciencia ficción, o un juego de plataformas con temas de terror, o lo que sea. Elija algo que terminará, que aún querrá terminar después de que se haya hecho todo lo divertido, pero aún está viendo docenas de horas de trabajo antes de que realmente haya terminado.
¿El mejor juego para "ganar tus alas"? El que completaste. No me importa cuántas demostraciones a medias de PONG / Breakout / Galaga / Tetris hayas escrito, no serás un desarrollador de juegos hasta que hayas lanzado un juego completo.
Además, nadie quiere jugar otra versión de esos juegos de 40 años, y al menos parte del punto de escribir juegos es que la gente juegue , ¿verdad?
Publiqué esta escalera en TIGsource hace un tiempo. Comienza desde lo muy básico hasta lo muy complejo.
La regla más importante de aprender programación de juegos: aprender programación es difícil. El diseño del juego de aprendizaje es difícil. Aprender a hacer un buen arte de juego o audio es difícil. Intentar hacer todas estas cosas al mismo tiempo es una receta para el fracaso. Aprende una cosa a la vez.
Corolario: programe un juego donde el diseño, el arte y el sonido ya estén hechos. Haz clones, no juegos originales.
En mis clases, siempre recomiendo estos juegos para comenzar, en orden:
1) Tetris. El arte es rectángulos de colores, que incluso un total de klutz puede dibujar en Microsoft Paint. No necesitas sonido. La programación es relativamente simple, pero aún requiere algunas cosas clave: comprender la diferencia entre el estado interno del juego y lo que se dibuja en la pantalla; poder dibujar en la pantalla, punto (probablemente involucrando sprites y bliting); poder aceptar la entrada del usuario en tiempo real en lugar de simplemente usar getch () o scanf () donde tiene que esperarlos.
2) Breakout / Arkanoid. El arte sigue siendo rectángulos coloreados, y todavía no necesitas sonido. Utiliza todos los conceptos básicos de Tetris, además de detección básica de colisión y física 2D, ya que la pelota tiene que moverse y rebotar suavemente.
3) Gradius / R-Type. Probablemente pueda encontrar algunos conjuntos de mosaicos gratuitos para hacer esto. Aquí, el fondo se desplaza, por lo que debe aprender un poco más sobre cómo funciona la memoria de gráficos, utilizando técnicas como voltear la página y doble búfer y dibujar cosas fuera de los límites de la pantalla visible. También tiendes a tener enemigos dinámicos y engendros de balas, por lo que deberás aprender a limpiar después de ti mismo (es decir, deshacerte de los enemigos y las balas que salen de la pantalla para que tu juego no pierda memoria como un tamiz).
4) Super Mario Bros. Similar al proyecto de desplazamiento anterior, excepto que el desplazamiento ahora está bajo el control del jugador y no es automático. También tiene que lidiar con la gravedad y todas las cosas divertidas de colisión que lo acompañan (como no caerse del piso solo porque estaba unos pocos píxeles arriba en el último cuadro y quiere moverse a unos pocos píxeles más abajo en el siguiente cuadro ) También tenga en cuenta que la gravedad es condicional: afecta al jugador y a algunos enemigos, pero generalmente no a las plataformas o monedas flotantes o lo que sea, que es un poco diferente del mundo real.
Si puedes hacer los cuatro, deberías poder hacer casi cualquier juego 2D que quieras; Todas las herramientas están ahí. Si quieres hacer un juego en 3D ... aprende 2D primero porque es mucho más fácil y no necesitas entender las matemáticas en profundidad y debes entender las cosas 2D de todos modos ... y luego cuando estás cómodo con eso, comience a trabajar con algunas herramientas 3D básicas (ya sea bibliotecas como Torque o Unity, o juegos de código abierto como Doom and Quake original).
¡Buena suerte!
Ahora esta es una buena pregunta real. No sé dónde estás, así que me inclinaré hacia el cielo y asumiré que nunca has escrito una línea de código en tu vida. Corta cualquier parte de la nariz que te ofenda, para abusar de una frase.
Creo que en realidad voy a responder una pregunta un poco diferente de lo que me preguntaste, y voy a dar ejemplos para satisfacer la pregunta que hiciste in situ. La razón por la que lo hago de esa manera es un poco, pero creo que hay una diferencia significativa en el punto de vista: no son tanto los juegos específicos lo que importan, sino la mentalidad que esos juegos aportan a un diseñador.
¿Sabes cómo la gente habla de que se supone que debes aprender una variedad de lenguajes de programación, para comer su mentalidad y sus corazones y sus hígados, y así ganar su poderoso poder? Hay una verdad real en eso: después de tu primer lenguaje de programación puro o casi puro, incluso en lenguajes imperativos, terminarás escribiendo en gran medida funciones libres de efectos secundarios porque están mucho mejor definidas y todo lo que escribes incluso en idiomas que no sean de esa forma será mejor para eso. No importa en particular qué idioma es: haskell, ml / ocaml / smlnj, formulaONE, plantillas c ++, lo que sea, todavía aprenderá a hacer muchas clases de trabajo sin depender del estado de los efectos secundarios. La primera vez que aprende un lenguaje de programación robusto y cercano a la máquina, usted ' vamos a aprender sobre la abstracción de tipo de tamaño. La primera vez que aprende un lenguaje declarativo o restrictivo, aprenderá acerca de los límites como una herramienta discrecional. ¡La primera vez que aprendas un lenguaje de búsqueda de retroceso, aprenderás a rezar Ia! ¡I a! ¡C'thulhu F'tagn Nagn !, y luego volvemos a comer corazones e hígados, y se completa el círculo de la vida.
El diseño del juego no es diferente. No necesariamente necesita aprender ningún juego específico, en paralelo con un idioma específico, sino aprender un juego representativo emblemático que maneja esa mentalidad, como las familias características del lenguaje. Además, hay muchos hígados y corazones para comer. Consigue una galleta de pimienta.
La mordaza aquí (como lo veo al menos) es que desea cubrir una gran lista de temas. Es como marcar las competencias en una hoja de personaje: te estás poniendo a tu disposición más mecanismos para manejar una situación determinada. Sí, son nivelables, pero tener un punto o dos en tantas cosas como puedas en todos los ámbitos significa que cuando llega el momento de usar uno, no estás comenzando desde cero, y sabes qué tácticas están disponibles para que puedas escalar.
Entonces, mira.
Primero quieres cortarte los dientes. También son útiles cuando estás aprendiendo a apuntar a una nueva plataforma o cuando te estás recuperando de la amnesia. Estos están destinados a ser rápidos, no impresionantes.
En orden:
Una vez que los tenga, estará listo para apuntar a una plataforma, y el aprendizaje puede comenzar.
Estos no están en un orden en particular. Puede reorganizarlos como mejor le parezca. Voy a dar un puñado de ejemplos con cada uno, pero no son normativos; si un juego diferente te brinda la misma experiencia y es lo suficientemente pequeño como para ser parte de una serie de lecciones, no dudes en intercambiarlo. Por razones prácticas, es bueno ser competente en renderizar e ingresar pantallas con relativa rapidez; los vas a usar mucho. Espere algunos juegos antes de intentar escribir clases de abstracción; usted no quiere ser atrapado en una abstracción ingenua.
... eh. Me aburrí
Tetris
Juego muy común, muchos clones de código abierto para destrozar si te quedas atascado. Enseña los conceptos básicos de gráficos 2D, manejo de entrada, puntuación, etc.
Luego toma esta idea original y dale un giro. Aprendí los conceptos básicos de gráficos en 3D / opengl escribiendo una versión en 3D de Tetris para mi clase de gráficos por computadora en la universidad.
GameDev.net tiene un buen artículo que recomienda una progresión de juegos para aprender progresivamente sobre el desarrollo del juego. Mi consejo favorito de la lista es pulir estos juegos. Completamente terminado, a un estado liberable.
La lista es la siguiente (algunos de estos se han dado en otras respuestas):
Me gusta comenzar a todos mis muchachos con Monopoly. Usualmente uso el "código kata" del Monopolio de Brett Schuchert como base del ejercicio, pero agrego mucho en él. Hay varias razones por las que realmente me gusta hacer esto.
Me interesan mucho las buenas prácticas de codificación (patrones de diseño, TDD, SOLID, integración continua, etc.) y pongo muchas restricciones a mis desarrolladores cuando hacen este ejercicio.
Casi todos conocen las reglas de Monopoly, y todo el juego se puede completar en un solo día. Esto le da a los nuevos desarrolladores una victoria rápida y realmente aumenta su compromiso.
Los requisitos iniciales comienzan con los controles del teclado, pero luego agrego un requisito para los controles del mouse más tarde. Esto hace que los desarrolladores piensen en varias cosas, cómo refactorizar el código existente, programar partes cambiantes del sistema a interfaces en lugar de clases concretas, abstracciones mejores / adecuadas, qué unidad de prueba, qué no a unidad de prueba, POR QUÉ a unidad de prueba y qué hace buenas pruebas unitarias.
A veces conectamos una IA más sofisticada, a veces no. A veces trabajamos con otros juegos de mesa con una lógica un poco más compleja como Chutes y Ladders o algo así. A veces nos separamos por completo de los juegos de mesa y hacemos un juego de póker o blackjack.
La parte realmente importante, para mí, es que las personas obtienen una victoria rápida, y ven cuán flexible puede ser el software cuando sigue buenos estándares de programación. Estos ejercicios crean confianza muy rápidamente. A veces, a los desarrolladores más experimentados les gusta hacer esto por su cuenta, solo para descansar de proyectos más complicados o para practicar una nueva técnica que acaban de aprender (¿ley de demeter?).
Elige tu aventura
Recibí este consejo de un amigo que comenzó a programar creando un juego, muy parecido a elegir tu libro de aventuras . Básicamente es un juego de aventura de texto simple con una salida como esta:
You are standing in a forest clearing in the middle of the night. You hear
some wolves howl in the distance. Should you:
a) make camp for the night
b) go further north
> _
Hacer un juego así debería enseñarte a hacer un gameloop, entrada de consola básica y scripting básico. Es bastante simple de implementar y fácil para un principiante, ya que no necesita un motor gráfico para escribir el juego. Los principiantes avanzados probablemente escribirían un motor de secuencias de comandos.
En mi experiencia con programadores novatos, la progresión generalmente parece ser algo así:
Breakout, Pong o Asteroides.
Hay una gran diferencia entre un juego y un prototipo de juego . Si te tomas en serio terminar el juego de tus sueños, debes terminar tus juegos de "nivel de entrada" en el camino. Crear la parte del juego es solo la mitad de la batalla. Todas las cosas adicionales, como menús y puntajes altos, a menudo se pasan por alto o se ignoran, pero toman mucho más tiempo del que cualquiera esperaría.
Hay algunas buenas sugerencias en las otras respuestas, pero solo quiero agregar mi voto por: Comience con algo que parezca demasiado insignificante para tratar.
Pong es un buen ejemplo.
El objetivo es: hacer que el diseño del juego y el conjunto de reglas sean tan emocionantes que puedas concentrar toda tu atención en aprender lo nuevo que estás aprendiendo (un lenguaje, una plataforma, una API) y no tener que estar constantemente Tómese un descanso para descubrir cómo funciona el juego.
Una vez que comience, encontrará que el pong es en realidad un poco más complicado de lo que parece a primera vista. (Estoy enseñando a un chico a programar y está usando pong como su proyecto de aprendizaje. Agregamos algunas funciones, y ahora se está distrayendo de aprender a programar aprendiendo cómo hacer todas estas funciones geniales :)
Una vez que haya completado la aplicación # 1 hasta que esté lista para dar / vender a otros, ENTONCES tome algo un poco más complicado (Tetris, aventura o lo que quiera) pero, para comenzar a aprender una nueva tecnología, haga lo que se programa con muerte cerebral simple.
Otros ejemplos:
Pero, de nuevo, comience con algo que sea demasiado fácil, para que pueda completar algo y mirar hacia atrás y ver qué implica. La diferencia entre haber escrito UNA aplicación en un idioma / plataforma / SDK / motor y haber escrito aplicaciones CERO es ENORME . La diferencia entre 1 y 2, o 2 y 5, mucho menos, para que pueda dar pasos más grandes, pero haga que el paso 0 a 1 sea pequeño; ¡será más grande de lo que piensas!
Flappy Bird
similar. Como programador profesional, es un trabajo de la tarde (bueno, un fin de semana para que sea "agradable") pero, mientras enseñamos a otro a programar, aprendimos que en realidad tiene muchas pequeñas complicaciones. Una vez más, uno es mucho más experiencia que cero y, una vez que tenga uno, tendrá una idea mucho mejor sobre cómo avanzar.
Echa un vistazo a este sitio web: 12 ideas de proyectos de juegos de informática
Algunos de estos juegos incluyen lo que otros han dicho como:
Pero también habla sobre otros juegos que podrías intentar hacer, como:
Además, da una idea de lo que debes intentar hacer primero, ya que da una sensación de dificultades para cada juego (y, por lo tanto, un plan de cómo debes abordar los juegos):
Mucha gente comienza con Breakout porque presenta:
La parte más difícil de escribir un juego, o cualquier software, es descubrir qué hacer. ¡Necesitas absolutamente una especificación! Esa es la parte divertida de hacer un clon de un juego existente: la especificación ya existe. Su especificación es "El producto debe hacer todo lo que hace Otro producto", y si tiene una copia del otro juego a mano, entonces es bastante fácil verificar eso.
Una vez que haya descubierto lo que necesita hacer, descubrir cómo hacerlo realmente no es tan difícil si es un programador competente. No me refiero a un programador experto o experimentado; eso implicaría que ya sabes cómo hacer la mayoría de lo que estás tratando de hacer. Pero debe comprender cómo pensar en abstracciones y tener las habilidades de resolución de problemas y pensamiento lógico que son fundamentales para la programación. Si puedes hacer eso, entonces puedes hacer cualquier cosa.
Dicho esto, no estoy de acuerdo con lo que la mayoría de la gente dice acerca de tratar de aprender a escribir juegos escribiendo algo realmente simple. La recompensa es directamente proporcional al esfuerzo que le dedicas. Si aprendes a escribir juegos escribiendo un juego realmente simple, todo lo que sabrás al final es cómo escribir juegos realmente simples, y eso no te hará mucho bien.
Por otro lado, si comienzas con algo abrumador, nunca lo terminarás. Así que comience con algo moderadamente desafiante que lo haga lidiar con problemas serios. Construir un RPG de consola 2D o un juego de plataformas de desplazamiento lateral son muy buenas maneras de aprender conceptos reales de programación de juegos.
Realmente depende de cuáles sean sus competencias actuales. Si eres relativamente nuevo en la programación, entonces ve con uno de los juegos específicos que la gente ha sugerido. De lo contrario, deberías pensar en qué tipo de juegos te permitirían aprovechar tu experiencia.
Cuando comencé mi primer juego, tenía cero experiencia en el desarrollo de juegos, pero había estado haciendo desarrollo de aplicaciones empresariales / de línea de negocio durante algunos años. Mi primer proyecto de juego fue un juego de estrategia por turnos, y arquitectónicamente hablando, no se veía tan diferente de una aplicación empresarial. Utilizó un sistema cliente / servidor, y la comunicación se realizó a través de un canal de servicio dúplex WCF. La mayoría de las operaciones de los jugadores se pusieron en cola como "órdenes" y se enviaron al servidor al final del turno. Todo el procesamiento de turnos tuvo lugar en el servidor, después de lo cual se enviaron actualizaciones del universo del juego a cada cliente.
Ese primer proyecto me permitió avanzar en el desarrollo del juego mientras me iniciaba en un territorio familiar. A medida que el proyecto evolucionó, aprendí a pensar más como un desarrollador de juegos y menos como un desarrollador de aplicaciones empresariales. El resultado final funcionó bastante bien, y fue un poco más impresionante que Battleship o Tic-Tac-Toe :).
Mordiscos e invasores del espacio
AI, gráficos, jugabilidad, controles relativamente simples, y no tienen que tener efectos de sonido o música a menos que desee agregarlos. Comencé con estos dos cuando aprendí a programar en QBasic para MS-DOS y creo que Son geniales los primeros juegos. Pac-Man sería mi otra opción.
Los juegos de estilo Moonlander son geniales (donde tienes un cohete afectado por la gravedad, los jugadores controlan la dirección y el empuje, combustible limitado cuando usas el empuje). Adquiera experiencia implementando física muy simple y el sistema de colisión puede ser bastante primitivo. No hay que preocuparse por la IA y, lo más importante, es divertida y adictiva :)
¡Un tirador espacial de arriba hacia abajo como Galaga es bastante fácil y enseña bastante bien la detección de colisiones! También puede variar en dificultad, desde un nivel con enemigos estacionarios, hasta múltiples niveles que mejoran las armas y enemigos que se mueven en patrones especiales.
Algo así como Gauntlet, porque necesitas un sistema de entidad, IA enemiga, recolecciones, mapas de mosaicos, detección de colisiones, puntuación, etc. Lo tiene todo, pero no de una manera abrumadora.
Un mini clon de Zelda es bueno y ejerce algunas habilidades que no se han mencionado mucho aquí. Desplazarse por un gran mapa de mosaicos y simples controles de movimiento de 8 vías es bueno saber. Puntos de bonificación si puedes hacer enemigos, pero no me preocuparía demasiado por eso.
He hecho más de unos pocos clones de Tetris. Sin embargo, cada vez que lo hice lo hice un poco diferente. Hoy en día, usualmente hago algún tipo de clon de asteroides. También he realizado más de unas pocas derivaciones de Missile Command.
Comencé con el juego básico y luego pasé a agregarle más cosas, potenciadores, etc.
Siempre solía comenzar con un juego de Tanques / Gorilas / Gusanos. Le permite hacer ejercicio en una pantalla gráfica simple y leer la entrada del usuario, además de un bucle de juego que aplica gravedad al proyectil y prueba de detección de colisión.
Después de eso vendría un juego como un juego de plataformas o shoot-em-up muy simple donde necesitas leer la entrada del usuario en tiempo real, en lugar de las declaraciones INPUT que funcionan para Gorilas :)
El solitario (o realmente cualquier juego de cartas) es un buen juego para ensuciarse las manos con un nuevo sistema de interfaz de usuario, ya que ejercita muchos de los widgets y mecanismos de retroalimentación de interacción del controlador que necesita usar. Además, la lógica es sencilla e inequívoca, por lo que puedes concentrarte en el aprendizaje y no tanto en el diseño del juego.
Para los juegos de simulación en tiempo real, siempre recomendaría Pong como un buen punto de partida simple, nuevamente porque el diseño es sencillo, así como la interfaz del controlador, para que pueda llegar al meollo del sistema: la simulación física.
Siempre he afirmado que si eres un programador de juegos deberías poder hacer alguna forma de Space Invaders . Diablos, el juego es lo suficientemente simple como para que tú también puedas hacer los gráficos.
Tener una selección de pequeños juegos en su cartera como el beneficio adicional de ser bastante útil, por ejemplo, si estoy aprendiendo un nuevo lenguaje o marco de programación, a menudo portaré uno de mis juegos simples para ver cómo funciona la nueva forma de hacer las cosas coincide con la forma en que fueron escritas originales.
Realmente depende de qué habilidades como programador regular ya tenga. ¿Tus matemáticas necesitan trabajo? ¿Tu conocimiento gráfico? ¿Tienes ambos en secreto?
Aunque en general creo que Tetris y Breakout también serían mis dos titulares. Cualquier cosa más fácil que eso no ofrece suficiente estímulo. Tetris es una buena prueba de cómo diseñar sus datos y algo, la ruptura es un ejemplo matemático ligero. Siempre le digo a la gente que apunte alto, el objetivo es quedarse atrapado y encontrar una solución.
Después de eso, el cielo es el límite. De nuevo, apunta alto. Pruebe un juego de plataformas con terreno inclinado, parralax y obtendrá una buena bolsa de tecnología 2D práctica. Agregue un pinball (prepárese para sentirse frustrado) y sus matemáticas mejorarán.
A partir de ahí, vaya a la tercera dimensión, aprenda habilidades básicas (animación, renderizado) y debería estar relativamente bien equipado para lidiar con una buena variedad de juegos.
Mi primer juego fue algo así como Super Mario.
Moverse, evitar obstáculos, saltar. Y todas esas tareas se pueden hacer fácilmente sin ningún cálculo físico.
Es ideal para tomar una cosa 2D simple, ya que no dependerá mucho de una implementación / marco / motor específico.