Um jogo de computador é um loop infinito de:
- Atualização: Avance o estado do jogo em uma pequena fatia de tempo (como 1/80 segundo).
- Pinte o estado atual do jogo.
Existem variações disso. Alguns jogos têm mais atualizações entre cada pintura ou podem variar para tornar o jogo igualmente suave em máquinas diferentes. Mas isso são detalhes técnicos.
A fase de atualização que ocorre entre 50 e 100 vezes por segundo (sim, é frequente) faz o seguinte:
- Atualize a física dos jogos. Digamos que um ator tenha velocidade. A atualização deve movê-lo um pouquinho na direção certa. Além disso, se você usa um mecanismo de física, ele deve verificar colisões com outros atos ou obstáculos.
- Atualize as regras dos jogos. É isso que o torna um jogo e não um experimento de física. Diga que uma bala atingiu o ator. As regras do jogo dizem ao jogador para deduzir X pontos de vida e a bala para desaparecer.
- Atualizações de IA. Às vezes, os atores controlados por computador devem decidir o que fazer. Vá para a esquerda ou direita? Encontre um caminho para um bom lugar para se estar. Dispare uma arma.
- Controle de entrada. Atualize o ator do jogador de acordo com os botões pressionados no teclado.
- Atualizar gráfico de cena. Isso pode avançar uma animação em uma etapa ou atualizar a GUI para mostrar que o jogador agora tem 10 pontos a menos de vida. O único objetivo é fazer com que o jogo pareça e se sinta agradável.
Por onde você começa?
O requisito básico para um jogo gráfico é programar gráficos. Certifique-se de abrir uma janela e desenhar uma bola nela.
Presumo que você possa fazer algum tipo de aula. Faça uma aula de bola. Possui os seguintes membros: x, y, deltaX, deltaY. Todos são números inteiros e em escala de pixels. Agora, escreva este loop.
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
}
Isso fará com que a bola salte dos limites das janelas. Ainda não é um jogo , é uma simulação física. Se você escrever a atualização física das bolas dentro da classe de bolas, é fácil adicionar várias bolas. Armazene-os em uma lista, atualize e pinte cada um deles para cada quadro.
Você pode adicionar uma raquete (simular a física e torná-la controlável com o mouse ou o teclado) e um objetivo do jogo, como impedir que a bola atinja a parede esquerda. Se o jogo adicionar mais e mais bolas ao longo do tempo, a dificuldade aumentará. Você tem um jogo.
Por que dormir por (25 horas) - milissegundos? Se você fizer assim, a simulação será executada em um ritmo constante de 40 atualizações e pinturas por segundo. Será bastante suave. Se você pular a parte de suspensão, a animação será instável e ocupará 100% da CPU. Além disso, a velocidade da bola dependeria da velocidade da máquina que a executava. Agora, a velocidade vertical da bola é de 40 * deltaY pixels por segundo.
O que você precisa entender é matrizes. Eles sustentam os jogos. Depois de entender o poder das matrizes, você verá como os jogos se reduzem à matemática simples.
Você assume uma posição de vértice no espaço do jogo. Você o projeta usando uma matriz na tela (encontre as coordenadas da tela). Você interpola alguns pixels entre ele e os vértices vizinhos e pronto. Obviamente, isso é uma simplificação extremamente grande, mas os fundamentos da rasterização não são de todo complexos quando você cria matrizes.
fonte