¿Cuáles son los fundamentos del desarrollo del juego? [cerrado]

12

No entiendo completamente cómo se puede codificar un videojuego.

Soy un programador principiante y solo tengo experiencia escribiendo aplicaciones de consola que hacen matemáticas y otras cosas. No entiendo cómo estos procesos lógicos pueden hacer que las imágenes se muevan en la pantalla (videojuegos). Obviamente, si saltara a un libro de desarrollo de juegos o algo así, lo entendería, pero actualmente todavía estoy entendiendo los fundamentos de la programación en general. ¿Podría alguien dar una explicación simple, codificando sabiamente, en el salto entre hacer que una computadora haga matemática simple para hacer que una computadora produzca programas gráficos sorprendentes como los videojuegos? ¿Tal vez hay algunos videos introductorios que alguien me puede señalar?

Mate
fuente

Respuestas:

14

Suponiendo que es un principiante absoluto en programación, y para basar mi ejemplo en algo que pueda saber, mientras escribe una aplicación de consola que tiene un menú donde desea que el usuario elija entre las opciones disponibles, ¿qué hará primero?

Si pensó en crear su menú, obtuvo un punto, pero ¿y si después de que el usuario presionó una tecla que no es parte de la opción disponible,

  1. saldrá su aplicación, o
  2. ¿continuará hasta que el usuario presione la tecla "Salir"?

Mi apuesta sería # 2, la aplicación continuará hasta que el usuario presione expresamente la tecla para salir de la aplicación de consola.

¡Un juego es de alguna manera similar! ¿Cuándo quieres que salga el juego? Cuando el usuario elige, ¿verdad? Por lo tanto, la acción o el menú del juego tiene que durar hasta que el usuario desee salir. Luego, deberá crear un bucle que le indique al programa que continúe hasta que se presione esta tecla para salir.

Te acaban de presentar el Game Loop. Un juego es solo otro programa que se ejecuta hasta que el usuario lo abandone expresamente.

Mientras estás en el ciclo del juego, cuando juegas, los movimientos son imágenes dibujadas en la pantalla en coordenadas específicas. Cuando el usuario / jugador presiona una tecla direccional como [Left], entonces hace que su imagen actualice sus coordenadas mientras disminuye su coordenada X para dar la impresión de un movimiento hacia la dirección izquierda. Debes obtener estas entradas para obtener la acción que el jugador quiere que su personaje / nave haga a continuación. Luego, el Game Loop continúa girando hasta que puedas obtener otra acción deseada del jugador, hasta que el juego salga.

Bueno, me temo que esta respuesta comienza a ser bastante larga, así que permítame señalarle otras dos preguntas que podrían ser de su interés, espero.

  1. ¿Dónde comenzar a escribir juegos, tutoriales o similares?
  2. Moviendo mi sprite en XNA usando clases .

Este tercer enlace no trata sobre cómo comenzar a escribir juegos, sino sobre cómo hacer que un sprite se mueva en la pantalla. Como también preguntaste sobre cómo hacer que los gráficos se muevan en la pantalla, pensé que esto podría interesarte.

¡Espero que esto ayude! =)

Will Marcouiller
fuente
4

Mientras crea aplicaciones de consola, lo más probable es que use funciones llamadas print () o read () o write (). En lugar de estos, los juegos gráficos usan otras funciones que pueden ser de tan bajo nivel como set_pixel () para establecer el color de un píxel individual en la pantalla, en marcos completos que le permiten dibujar modelos tridimensionales con muchos efectos.

Pero la idea principal es la misma que para una aplicación de consola matemática simple. Obtiene información del usuario, actúa de acuerdo con ella para modificar algunas variables y luego imprime (o dibuja) alguna salida. Los juegos y otros programas interactivos realizan 30, 60 o más de estos ciclos de entrada-cálculo-salida que ocurren cada segundo. Por supuesto, cada parte puede ser tan compleja como desee, pero generalmente todo se reduce a entrada-cálculo-salida. Así que no te preocupes, estás en el camino correcto.

En cuanto a las recomendaciones, diría que sigues programando, tanto como puedas. Si estás interesado en concentrarte en la programación de juegos y solo conoces la programación de consolas, intenta hacer una pequeña aventura basada en texto o juego de rol. De esa manera, practicará mucho sobre cómo administrar sus variables, usar números aleatorios y organizar su código.

Después de adquirir algo de experiencia con eso, pase a lo básico de una biblioteca de gráficos. Si está haciendo programación de procedimientos, recomendaría OpenGL, mientras que si está haciendo programación orientada a objetos, recomendaría XNA.

Sin embargo, no tome demasiadas cosas a la vez. Es muy fácil decepcionarse al aprender una herramienta complicada, mientras aprende a administrar un árbol fuente, mientras aprende a iterar sobre una matriz, mientras aprende cómo obtener entrada y sonido, todo mientras Estás diseñando tu juego.

Hay un largo camino por recorrer, pero recuerda que la diversión es caminar por él.

¡Sigan con el buen trabajo!


fuente
4

Un juego de computadora es un ciclo sin fin de:

  • Actualización: avanza el estado del juego una pequeña porción de tiempo (como 1/80 de segundo).
  • Pintar el estado actual del juego.

Hay variaciones de estos. Algunos juegos tienen más actualizaciones entre cada pintura, o pueden variar para que el juego fluya igualmente en diferentes máquinas. Pero eso es detalles técnicos.

La fase de actualización que ocurre entre 50 y 100 veces por segundo (sí, es tan frecuente) hace esto:

  • Actualiza la física de los juegos. Digamos que un actor tiene una velocidad. La actualización debería moverlo un poquito en la dirección correcta. Además, si usa un motor de física, debe verificar si hay colisiones con otros actos u obstáculos.
  • Actualiza las reglas del juego. Esto es lo que lo convierte en un juego y no en un experimento de física. Digamos que una bala golpeó al actor actor. Las reglas del juego le dicen al jugador que deduzca X puntos de salud y que la bala desaparezca.
  • Actualizaciones de IA. A veces los actores controlados por computadora deben decidir qué hacer. ¿Ir a la izquierda o a la derecha? Encuentre un camino a un buen lugar para estar. Dispara un arma.
  • Control de entrada. Actualice el actor jugador según los botones presionados en el teclado.
  • Actualizar gráfico de escena. Esto puede ser avanzar una animación un paso, o actualizar la GUI para mostrar que el jugador ahora tiene 10 puntos menos de salud. Su único propósito es hacer que el juego se vea y se sienta bien.

Por donde empiezas

El requisito básico para un juego gráfico es programar gráficos. Asegúrate de poder abrir una ventana y dibujar una bola en ella.

Supongo que puedes hacer algún tipo de clases. Haz una clase de pelota. Tiene los siguientes miembros: x, y, deltaX, deltaY. Todos son enteros y en escalas de píxeles. Ahora, escribe este bucle.

forever, do this {
  start measure time (in milliseconds)
  //physics part
  add deltaX to x
  add deltaY to y
  if x is bigger than the screen width, assign -deltaX to deltaX
  if y is bigger than the screen height, assign -deltaY to deltaY
  if x is less than 0, assign -deltaX to deltaX
  if y is less than 0, assign -deltaY to deltaY

  //paint
  paint the ball at x, y
  stop measuring time, assign this to workTime
  make the thread sleep for (25 - workTime) milliseconds
}

Esto hará que la pelota rebote en los límites de las ventanas. Todavía no es un juego , sino una simulación física. Si escribe la actualización de física de bolas dentro de la clase de bolas, es fácil agregar varias bolas. Guárdelos en una lista y actualice y pinte cada uno para cada cuadro.

Puedes agregar una paleta (simular la física y hacerla controlable con el mouse o el teclado) y un objetivo del juego, como evitar que la pelota llegue a la pared izquierda. Si el juego agrega más y más bolas con el tiempo, la dificultad aumentará. Tienes un juego

¿Por qué dormir durante (25 - workTime) milisegundos? Si lo hace así, la simulación se ejecutará a un ritmo constante de 40 actualizaciones y pinturas por segundo. Será bastante suave. Si omitiera la parte de suspensión, la animación sería desigual y ocuparía el 100% de la CPU. Además, la velocidad de la pelota dependería de la velocidad de la máquina que la ejecuta. Ahora, la velocidad vertical de la pelota es de 40 * deltaY píxeles por segundo.

Pistolero
fuente
2

Tome su programa de consola que hace matemáticas, y luego, cuando ponga una respuesta correcta, haga que se dispare un poco de confeti ... Se ha convertido en un juego (¿Alguien además de mí juega Math Blaster cuando era niño? :)).

En cuanto a cómo se hacen las computadoras para crear entornos de juego, a veces puede ser demasiado complicado entenderlo, pero se reduce a una aplicación de la comprensión humana del mundo que los rodea. Los juegos usan las mismas matemáticas, física y ciencias para definirse a sí mismos a medida que aplicamos al mundo que nos rodea para explicar cómo funciona.

Los juegos de Sim son un buen ejemplo de real a virtual. Hace mucho tiempo leí una entrevista con el chico detrás de los juegos de Sim y casi todos, sin excepción, nacieron de la lectura sobre un tema que trata de explicar el mundo que nos rodea, luego aproveché las fórmulas matemáticas y los introduje en un entorno virtual. para representarlo SimCity, por ejemplo, se originó al tratar de simular los conceptos básicos de las economías.

En cuanto a las características específicas de cómo crear un entorno de juego en 3D, poner la física en él, agregar algo de audio, dejar que un usuario comience a interactuar con él ... Bueno, para eso están este sitio y muchos otros, y sería imposible resumir en una respuesta más específica.

Al final del día, describo los videojuegos como bases de datos de conjuntos de datos limitados muy rápidos. Están muy centrados en los datos relacionales y el acceso a datos de alta velocidad. Quiero decir que si está renderizando un cuadro cada 60 segundos, está procesando cantidades potencialmente grandes de datos muy rápidamente en función de la relación del jugador en el juego. a todos los demás datos rastreados por el juego :)

James
fuente
Jajaja, "los videojuegos como bases de datos de conjuntos de datos limitados muy rápidos" probablemente solo están agregando a la confusión.
michael.bartnett
1

Lo que necesitas entender son las matrices. Ellos apuntalan los juegos. Una vez que comprenda el poder de las matrices, verá cómo los juegos se reducen a matemáticas simples.

Tomas una posición de vértice en el espacio del juego. Lo proyecta usando una matriz en la pantalla (encuentre sus coordenadas de pantalla). Interpola algunos píxeles entre él y sus vértices vecinos, y ya está. Obviamente, es una simplificación extremadamente grande, pero los fundamentos de la rasterización no son del todo complejos una vez que asimilas las matrices.

DeadMG
fuente