Respostas:
Saia
Jogo fácil, já que você não tem muito estado para se preocupar (é uma variedade de valores de tijolo - se você tiver apenas uma cor de tijolo, é uma variedade de sinalizadores), não há IA e você poderá fazer um um pouco de física para fazer a bola quicar corretamente.
Solitário
As regras são um pouco mais complexas que o Breakout e a interface é muito diferente. Obriga você a pensar em diferentes métodos de implementação de um jogo. ou seja, o que funciona em um jogo não é necessariamente o que você usaria em outro.
Pac-Man
Esse é legal porque você trabalha com um pouco de IA. Fazer com que os fantasmas sigam o jogador (mas não muito bem - você quer que o jogador tenha uma chance) pode ser implementado rapidamente, e você terá um joguinho divertido que você pode ajustar e mostrar aos amigos e à família (feedback positivo é sempre uma coisa boa quando você está começando).
Acho que se você procurar inspiração nos primeiros jogos de vídeo, poderá encontrar toneladas de idéias que são relativamente simples de implementar. Além disso, você pode se safar de obras de arte e sons super simples porque, de qualquer maneira, está copiando algo tão simples. Isso permite que você se concentre no básico primeiro - colocando o jogo em funcionamento, descobrindo como colocar seus pixels na tela, tocando um som, mantendo a pontuação, recebendo a entrada do jogador no jogo.
Quase realmente não importa qual jogo você escolhe primeiro - apenas escolha algo simples com o qual possa obter resultados rápidos, para que você possa se mover no dia seguinte e fazer outro. E outro. E outro - quanto mais você faz, mais se esforça e, eventualmente, estará criando jogos complexos antes que perceba.
Eu recomendo fortemente que programadores iniciantes comecem com o jogo mais simples que eles realmente desejam escrever . Como mencionado por Matt Rix, uma grande parte da escrita de um jogo vs. uma demo está levando à conclusão - créditos, menus, testes de jogo, altas pontuações, pausa, teste de jogo, níveis de dificuldade, transições limpas de estado do jogo, jogo testes, etc. Esse material leva pelo menos metade do tempo que você vai colocar e simplesmente não é divertido. Não é. Portanto, a menos que você ame o conceito e esteja realmente motivado, desistirá e seguirá em frente antes que o jogo seja um jogo .
Se você quer escrever um RPG, descobrir o conceito de RPG mais simples, mais gerenciável que você pode vir até com que você quer fazer e fazê-lo. Mesmo se você quiser fazer um jogo de ficção científica, um jogo de plataforma com tema de terror, ou o que quer. Escolha algo que você vai terminar, que você ainda vai querer terminar depois de tudo divertido, mas você ainda está olhando para dezenas de horas de trabalho antes de realmente terminar.
O melhor jogo para "ganhar suas asas" com? O que você completou. Não me importo com quantas demos PONG / Breakout / Galaga / Tetris que você já escreveu, você não é desenvolvedor de jogos até ter lançado um jogo completo.
Além disso, ninguém quer jogar mais uma versão desses jogos de 40 anos, e pelo menos parte do objetivo de escrever jogos é para as pessoas jogarem , certo?
Eu publiquei essa escada na TIGsource há um tempo atrás. Começa do muito básico ao muito complexo.
A regra mais importante de aprender programação de jogos: aprender programação é difícil. Aprender design de jogos é difícil. Aprender a criar boas artes ou áudio de jogos é difícil. Tentar fazer todas essas coisas ao mesmo tempo é uma receita para o fracasso. Aprenda uma coisa de cada vez.
Corolário: programa um jogo em que o design, a arte e o som já estão concluídos. Faça clones, não jogos originais.
Nas minhas aulas, eu sempre recomendo esses jogos para começar, em ordem:
1) Tetris. A arte é retângulos coloridos, que até um total de klutz pode desenhar no Microsoft Paint. Você não precisa de som. A programação é relativamente simples, mas ainda requer algumas coisas importantes: entender a diferença entre o estado interno do jogo e o que é desenhado na tela; ser capaz de desenhar na tela, ponto final (provavelmente envolvendo sprites e blitting); poder aceitar a entrada do usuário em tempo real, em vez de usar apenas getch () ou scanf (), onde você deve esperar por eles.
2) Breakout / Arkanoid. A arte ainda é retângulos coloridos e você ainda não precisa de som. Usa todos os conceitos básicos do Tetris, além de alguma detecção básica de colisões e física 2D, pois a bola precisa se mover e saltar suavemente.
3) Tipo Gradius / R. Você provavelmente pode encontrar alguns tilesets de freeware para fazer isso. Aqui o fundo está rolando, então você precisa aprender um pouco mais sobre como a memória gráfica funciona, usando técnicas como inversão de página e buffer duplo e coisas de desenho fora dos limites da tela visível. Você também tende a ter inimigos dinâmicos e geradores de balas, portanto precisará aprender a se limpar depois de si mesmo (por exemplo, se livrar de inimigos e balas que saem da tela para que seu jogo não perca memória como uma peneira).
4) Super Mario Bros. Semelhante ao projeto de rolagem anterior, exceto que a rolagem agora está sob controle do jogador e não é automática. Você também precisa lidar com a gravidade e todas as coisas divertidas de colisão que a acompanham (como não cair no chão só porque você estava alguns pixels acima no último quadro e deseja passar para alguns pixels abaixo no próximo quadro ) Observe também que a gravidade é condicional: afeta o jogador e alguns inimigos, mas normalmente não as plataformas, moedas flutuantes ou qualquer outra coisa, que é um pouco diferente do mundo real.
Se você pode fazer todos os quatro deles, poderá fazer praticamente qualquer jogo 2D que desejar; todas as ferramentas estão lá. Se você quer fazer um jogo em 3D ... aprenda 2D primeiro, porque é muito mais fácil e você não precisa entender profundamente a matemática e precisa entender as coisas em 2D de qualquer maneira ... e depois quando estiver À vontade, comece a trabalhar com algumas ferramentas básicas de 3D (bibliotecas como Torque ou Unity ou jogos de código aberto como o Doom e Quake original).
Boa sorte!
Agora, esta é uma boa pergunta real. Eu não sei onde você está, então eu irei para o céu e presumo que você nunca tenha escrito uma linha de código em sua vida. Corte qualquer parte do nariz que ofenda você, para abusar de uma frase.
Acho que vou responder a uma pergunta um pouco diferente da que você pediu e vou dar exemplos para satisfazer a pergunta que você fez in situ. A razão pela qual faço dessa maneira é um pouco, mas acredito que há uma diferença significativa no ponto de vista: não são tanto os jogos específicos que importam, quanto as mentalidades desses jogos para um designer.
Você sabe como as pessoas falam sobre você deveria aprender uma variedade de linguagens de programação, a fim de comer suas mentalidades, seus corações e seus fígados e, assim, ganhar seu poderoso poder? Existe uma verdade real nisso - após a sua primeira linguagem de programação pura ou quase pura, mesmo em linguagens imperativas, você acabará escrevendo funções livres de efeitos colaterais, porque elas são muito melhor definidas e tudo o que você escreve mesmo em idiomas não dessa forma, será melhor para isso. Não importa particularmente qual idioma é - modelos haskell, ml / ocaml / smlnj, formulaONE, c ++, o que for - você ainda aprenderá como fazer muitas classes de trabalho sem depender do estado de efeito colateral. Na primeira vez em que você aprende uma linguagem de programação robusta e próxima à máquina, você ' vamos aprender sobre a abstração do tipo de tamanho. Na primeira vez que você aprender uma linguagem declarativa ou de restrição, aprenderá sobre a delimitação como uma ferramenta discricionária. Na primeira vez em que você aprender um idioma de busca regressivo, aprenderá a orar Ia! I a! C'thulhu F'tagn Nagn !, e então voltamos a comer corações e fígados, e o círculo da vida é cumprido.
Design de jogos não é diferente. Você não precisa necessariamente aprender nenhum jogo específico, paralelamente a um idioma específico, mas aprender um jogo representativo emblemático que lida com essa mentalidade, como as famílias de características do idioma. Além disso, há muitos fígados e corações para comer. Pegue uma bolacha de pimenta.
A piada aqui (como eu vejo pelo menos) é que você deseja cobrir uma grande lista de tópicos. É como marcar as proficiências em uma ficha de personagem - você está disponibilizando para si mesmo mais mecanismos pelos quais lidar com uma determinada situação. Sim, eles são capazes de nível, mas ter um ou dois pontos no maior número possível de coisas significa que, quando chegar a hora de usar um, você não estará começando do zero e saberá quais táticas estão disponíveis. para você aumentar.
Então olhe.
Primeiro você quer cortar os dentes. Isso também é útil quando você está aprendendo a segmentar uma nova plataforma ou quando está se recuperando de amnésia. Estes são feitos para serem rápidos, não impressionantes.
Em ordem:
Depois de baixá-las, você estará pronto para segmentar uma plataforma e o aprendizado poderá começar.
Estes estão em nenhuma ordem particular. Você pode reorganizá-los como achar melhor. Vou dar alguns exemplos com cada um, mas eles não são normativos; se um jogo diferente oferece a mesma experiência e é pequeno o suficiente para fazer parte de uma série de lições, fique à vontade para trocá-lo. Por razões práticas, é bom ser proficiente em renderização de tela e entrada de maneira relativamente rápida; você vai usá-los bastante. Aguarde alguns jogos antes de tentar escrever classes de abstração; você não quer ser pego em uma abstração ingênua.
... eh. Eu fiquei entediado.
Tetris
Jogo muito comum, muitos clones de código aberto disponíveis para serem destruídos se você ficar preso. Ensina noções básicas de gráficos 2D, manipulação de entrada, pontuação, etc.
Em seguida, pegue essa ideia original e gire-a. Aprendi o básico de gráficos 3D / opengl escrevendo uma versão 3D do Tetris para minha aula de computação gráfica na faculdade.
O GameDev.net tem um bom artigo recomendando uma progressão de jogos para aprender gradualmente sobre o desenvolvimento de jogos. Meu conselho favorito da lista é realmente polir esses jogos. Concluir completamente, para um estado liberável.
A lista é a seguinte (algumas delas foram fornecidas em outras respostas):
Eu gosto de começar todos os meus caras com o monopólio. Normalmente, uso o "código kata" do monopólio de Brett Schuchert como base do exercício, mas acrescento muito a ele. Existem várias razões pelas quais eu realmente gosto de fazer isso.
Eu me preocupo profundamente com as boas práticas de codificação (padrões de design, TDD, SOLID, integração contínua etc.) e imponho muitas restrições aos meus desenvolvedores quando eles fazem esse exercício.
Quase todo mundo conhece as regras do Monopólio, e todo o jogo pode ser concluído em um único dia. Isso proporciona aos novos desenvolvedores uma vitória rápida e realmente aumenta o engajamento.
Os requisitos iniciais começam com os controles do teclado, mas depois adiciono um requisito para os controles do mouse. Isso faz com que os desenvolvedores pensem em várias coisas, como refatorar o código existente, programar partes do sistema em interfaces em vez de classes concretas, abstrações melhores / apropriadas, o que fazer teste unitário, o que não fazer teste de unidade, por que fazer teste de unidade e o que faz para bons testes de unidade.
Às vezes, conectamos uma IA mais sofisticada, às vezes não. Às vezes, trabalhamos com outros jogos de tabuleiro com lógica um pouco mais complexa, como Chutes e Ladders ou algo assim. Às vezes nos afastamos completamente dos jogos de tabuleiro e fazemos um jogo de pôquer ou blackjack.
A parte realmente importante, para mim, é que as pessoas obtêm uma vitória rápida e veem o quão flexível você pode criar software quando segue bons padrões de programação. Esses exercícios constroem confiança muito rapidamente. Às vezes, os desenvolvedores mais experientes gostam de fazer isso por conta própria, apenas para se afastar de projetos mais complicados ou para praticar uma nova técnica que acabaram de aprender (lei do demeter?).
Escolha sua aventura
Recebi essa dica de um amigo que começou a programar criando um jogo, muito parecido com escolher o seu livro de aventuras . É basicamente um jogo de aventura de texto simples com uma saída 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
> _
Fazer esse jogo deve ensiná-lo a criar um gameloop, entrada básica do console e scripts básicos. É muito simples de implementar e fácil para um iniciante, já que você não precisa de um mecanismo gráfico para escrever o jogo. Iniciantes avançados provavelmente escreveriam um mecanismo de script.
Na minha experiência com programadores iniciantes, a progressão geralmente parece algo como isto:
Breakout, Pong ou Asteróides.
Há uma enorme diferença entre um jogo e um protótipo de jogo . Se você está pensando seriamente em terminar o jogo dos seus sonhos, deve terminar os jogos "iniciantes" pelo caminho. Criar a parte do jogo é apenas metade da batalha. Todas as coisas extras, como menus e pontuações mais altas, muitas vezes são ignoradas ou ignoradas, mas levam muito mais tempo do que se poderia esperar.
Há outras boas sugestões nas outras respostas, mas eu só quero dar o meu voto para: Comece com algo que parece insignificante para lidar.
Pong é um bom exemplo.
O objetivo é: tornar o design do jogo e o conjunto de regras com morte cerebral, para que você possa concentrar toda a sua atenção em aprender o que está aprendendo (um idioma, uma plataforma, uma API) e não precisar constantemente faça pausas para descobrir como o jogo funciona.
Depois de começar, você descobrirá que o pong é realmente um pouco mais complicado do que parece à primeira vista. (Estou ensinando a programação de um cara e ele está usando o pong como seu projeto de aprendizado. Adicionamos alguns recursos, e agora ele se distrai do aprendizado do programa aprendendo a fazer todos esses recursos interessantes :)
Depois de concluir o aplicativo nº 1 até que esteja pronto para oferecer / vender para outros, ENTÃO assuma algo um pouco mais complicado (Tetris, aventura ou o que você quiser), mas, para começar a aprender uma nova tecnologia, faça o que você programa com morte cerebral simples.
Outros exemplos:
Mas, novamente - comece com algo fácil demais, para que você possa realmente concluir algo, olhar para trás e ver o que está envolvido. A diferença entre escrever UM aplicativo em um idioma / plataforma / SDK / mecanismo e escrever aplicativos ZERO é ENORME . A diferença entre 1 e 2, ou 2 e 5, muito menos, para que você possa dar passos maiores, mas faça com que o passo de 0 a 1 seja um pequenino; será maior do que você pensa!
Flappy Bird
semelhante. Como programador profissional, é um trabalho de uma tarde (bem, um fim de semana para ficar "legal"), mas, enquanto ensinamos outro a programar, aprendemos que ele realmente tem muitas pequenas complicações. Novamente, um é muito mais experiência do que zero e, uma vez que você tenha um, terá uma idéia muito melhor sobre como avançar.
Confira este site: 12 idéias de projetos de jogos de ciência da computação
Alguns desses jogos incluem o que outros disseram como:
Mas também fala sobre outros jogos que você pode tentar criar, como:
Além disso, fornece uma noção do que você deve tentar fazer primeiro, uma vez que fornece uma sensação de dificuldades para cada jogo (e, portanto, um plano de como você deve lidar com os jogos):
Muitas pessoas começam com o Breakout porque ele apresenta:
A parte mais difícil de escrever um jogo - ou qualquer outro software - é descobrir o que fazer. Você absolutamente precisa de uma especificação! Essa é a parte divertida de criar um clone de um jogo existente: a especificação já existe. Sua especificação é "O produto deve fazer tudo o que o Outro produto faz" e, se você tiver uma cópia do outro jogo em mãos, será muito fácil verificar isso.
Depois de descobrir o que precisa fazer, descobrir como fazê-lo não é realmente tão difícil se você é um programador competente. Não quero dizer um programador qualificado ou experiente; isso implicaria que você já sabe fazer a maior parte do que está tentando fazer. Mas você precisa entender como pensar em abstrações e ter as habilidades de pensamento lógico e de resolução de problemas que são fundamentais para a programação. Se você pode fazer isso, pode fazer qualquer coisa.
Dito isto, discordo do que a maioria das pessoas diz sobre tentar aprender a escrever jogos escrevendo algo realmente simples. A recompensa é diretamente proporcional ao esforço que você coloca nela. Se você aprender a escrever jogos escrevendo um jogo realmente simples, tudo o que você saberá no final é como escrever jogos realmente simples, e isso não será muito bom.
Por outro lado, se você começar com algo avassalador, nunca terminará. Portanto, comece com algo moderadamente desafiador que o fará lidar com problemas sérios. Construir um RPG em estilo de console 2D ou um jogo de plataformas com rolagem lateral são maneiras muito boas de aprender conceitos reais de programação de jogos.
Realmente depende de quais são suas competências atuais. Se você é relativamente novo em programação, escolha um dos jogos específicos sugeridos pelas pessoas. Caso contrário, você deve pensar em que tipo de jogo deixaria você usar sua experiência.
Quando iniciei meu primeiro jogo, eu não tinha nenhuma experiência em desenvolvimento de jogos, mas fazia alguns anos que desenvolvia aplicativos corporativos / de linha de negócios. Meu primeiro projeto de jogo foi um jogo de estratégia baseado em turnos e, arquitetonicamente, não parecia tão diferente de um aplicativo corporativo. Utilizava um sistema cliente / servidor e a comunicação acontecia por meio de um canal de serviço WCF duplex. A maioria das operações dos jogadores foram enfileiradas como "ordens" e despachadas para o servidor no final do turno. Todo o processamento de turnos ocorreu no servidor, após o qual as atualizações do universo do jogo foram enviadas para cada cliente.
Esse primeiro projeto me permitiu avançar no desenvolvimento de jogos enquanto me iniciava em território familiar. À medida que o projeto evoluiu, aprendi a pensar mais como um desenvolvedor de jogos e menos como um desenvolvedor de aplicativos corporativos. O resultado final funcionou muito bem, e foi um pouco mais impressionante que Battleship ou Tic-Tac-Toe :).
Mordidelas e Invasores do Espaço
IA, gráficos, jogabilidade, controles e relativamente simples, e eles não precisam ter efeitos sonoros ou músicas, a menos que você queira adicionar isso. Comecei com esses dois ao aprender a programar no QBasic para MS-DOS e acho que eles são ótimos primeiros jogos. Pac-Man seria minha outra escolha.
Os jogos no estilo Moonlander são ótimos (onde você tem um foguete afetado pela gravidade, os jogadores controlam a direção e o impulso, combustível limitado ao usar o impulso). Adquira experiência na implementação de física muito simples e o sistema de colisão pode ser bastante primitivo. Não há AI para se preocupar e, mais importante, é divertido e viciante :)
Algo como Gauntlet, porque você precisa de um sistema de entidades, IA inimiga, captadores, mapas de blocos, detecção de colisão, pontuação etc. Tem tudo isso, mas não de uma maneira que seja esmagadora.
Um mini clone Zelda é bom e exerce algumas habilidades que não foram mencionadas muito aqui. Rolar um grande mapa de peças e controles simples de movimento de 8 direções é bom saber. Pontos de bônus se você puder fazer inimigos, mas eu não me preocuparia muito com isso.
Eu fiz mais do que alguns clones do Tetris. Cada vez que eu fazia, fazia um pouco diferente. Hoje em dia, eu costumo fazer algum tipo de clone de asteróide. Também fiz mais do que alguns spinoffs do Missile Command.
Comecei com o jogo básico e depois passei a adicionar mais coisas, power-ups etc.
Eu sempre costumava começar com um jogo de Tanques / Gorilas / Worms. Ele permite que você se exercite em exibição gráfica simples e lendo as informações do usuário, além de um loop de jogo aplicando gravidade ao projétil e testando para detecção de colisão.
Depois disso, chegaria um jogo como um jogo de plataforma ou shoot-em-up muito simples, onde você precisa ler as informações do usuário em tempo real, em vez das instruções INPUT que funcionam para os gorilas :)
Paciência (ou realmente qualquer jogo de cartas) é um bom jogo para sujar as mãos com um novo sistema de interface do usuário, pois exercita muitos dos widgets e mecanismos de feedback de interação do controlador que você precisa usar. Além disso, a lógica é direta e inequívoca, para que você possa se concentrar no aprendizado e não tanto no design do jogo.
Para jogos de simulação em tempo real, eu sempre recomendo o Pong como um bom ponto de partida simples, novamente porque o design é direto, assim como a interface do controlador, para que você possa conhecer melhor o sistema - a simulação física.
Eu sempre afirmei que, se você é um programador de jogos, deve ser capaz de criar algum tipo de Space Invaders . Caramba, o jogo é simples o suficiente para que você também possa fazer os gráficos.
Tendo uma seleção de jogos pequenos em seu portfólio como o benefício adicional de ser bastante útil, por exemplo, se eu estiver aprendendo uma nova linguagem ou estrutura de programação, geralmente portarei um dos meus jogos simples para ver como a nova maneira de fazer as coisas combina com a forma como eles foram escritos.
Realmente depende de quais habilidades você já possui como programador regular. Sua matemática precisa funcionar? Seu conhecimento gráfico? Você tem os dois em segredo?
Embora, em geral, eu ache que Tetris e Breakout também seriam minhas duas entradas. Qualquer coisa mais fácil do que isso não oferece estímulo suficiente. Tetris é um bom teste de como organizar seus dados e algo, breakout é um exemplo matemático leve. Eu sempre digo para as pessoas mirarem alto, o objetivo é ficar preso e encontrar uma solução.
Depois disso, o céu é o limite. Mais uma vez, mire alto. Experimente um jogo de plataformas com terreno inclinado, parralax e você terá uma boa bolsa de tecnologia 2D à mão. Adicione um pinball (prepare-se para ficar frustrado) e sua matemática melhorará.
A partir daí, vá para a terceira dimensão, aprenda as habilidades básicas (animação, renderização) e você deverá estar relativamente bem equipado para lidar com uma boa variedade de jogos.
Meu primeiro jogo foi algo como Super Mario.
Mova-se, evite obstáculos, pule. E todas essas tarefas podem ser facilmente realizadas sem qualquer cálculo físico.
É ideal usar uma coisa 2D simples, pois você não dependerá muito de uma implementação / estrutura / mecanismo específico.