Risposte:
Scoppiare
Gioco facile dato che non hai molto stato di cui preoccuparti (è una matrice di valori di mattoni - se hai solo un colore di mattoni, è una matrice di bandiere), non c'è nessun AI e puoi fare un un po 'di fisica per far rimbalzare correttamente la palla.
Solitario
Le regole sono un po 'più complesse di Breakout e l'interfaccia è molto diversa. Ti costringe a pensare a diversi metodi di implementazione di un gioco. cioè, ciò che funziona in un gioco non è necessariamente quello che useresti in un altro.
Pac-Man
Questo è carino perché devi lavorare su un po 'di IA. Avere i fantasmi che seguono il giocatore (ma non troppo bene - vuoi che il giocatore abbia una possibilità) può essere implementato rapidamente e avrai un piccolo gioco divertente che puoi modificare e mostrare ad amici e familiari (il feedback positivo è sempre una buona cosa quando stai iniziando).
Trovo che se cerchi ispirazione nei primi videogiochi, puoi trovare tonnellate di idee che sono relativamente semplici da implementare. Inoltre, puoi cavartela con immagini e suoni super semplici perché stai comunque copiando qualcosa di così semplice. Ciò ti consente di concentrarti prima sulle nozioni di base: mettere in moto il tuo gioco e renderlo operativo, capire come ottenere i pixel sullo schermo, riprodurre un suono, mantenere il punteggio, ottenere l'input del giocatore nel gioco.
Non importa quasi quale gioco scegli per primo: assicurati di scegliere qualcosa di semplice con cui ottenere risultati rapidi, in questo modo puoi spostarti il giorno successivo e crearne un altro. E un altro. E un altro: più fai, più ti spingi e alla fine creerai giochi complessi prima di saperlo.
Consiglio vivamente ai programmatori principianti di iniziare con il gioco più semplice che vogliono scrivere . Come menzionato da Matt Rix, gran parte della scrittura di un gioco contro una demo sta spingendo la dannata cosa fino al completamento: crediti, menu, test di gioco, punteggi alti, pausa, test di gioco, livelli di difficoltà, passaggi di stato del gioco puliti, gioco test, ecc. Quella roba richiede almeno la metà del tempo che stai per inserire e non è divertente. Non lo è. Quindi, a meno che non ami il concetto e non sei veramente motivato, ti arrenderai e passerai prima che il gioco sia un gioco .
Se vuoi scrivere un gioco di ruolo, scopri il concetto di gioco di ruolo più semplice e gestibile che puoi inventare per quello che vuoi fare e farlo. Lo stesso se vuoi fare uno sparatutto fantascientifico, un platform a tema horror o altro. Scegli qualcosa che finirai, che vorresti ancora finire dopo che tutto è stato fatto, ma stai ancora guardando dozzine di ore di lavoro prima di aver finito.
Il miglior gioco con cui "guadagnare le tue ali"? Quello che hai completato. Non mi importa quante demo PONG / Breakout / Galaga / Tetris sono state scritte a metà, non sei uno sviluppatore di giochi fino a quando non hai rilasciato un gioco completo.
Inoltre, nessuno vuole giocare a un'altra versione di quei giochi di 40 anni, e almeno un po 'del punto di scrivere giochi è che le persone possano giocare , giusto?
Ho pubblicato questa scala su TIGsource qualche tempo fa. Si parte dal molto semplice al molto complesso.
La regola più importante dell'apprendimento della programmazione di gioco: l'apprendimento della programmazione è difficile. L'apprendimento del design del gioco è difficile. Imparare a creare una buona grafica o audio di gioco è difficile. Cercare di fare tutte queste cose contemporaneamente è una ricetta per il fallimento. Impara una cosa alla volta.
Corollario: programma un gioco in cui il design, l'arte e il suono sono già stati realizzati. Crea cloni, non giochi originali.
Nelle mie lezioni, consiglio sempre di iniziare questi giochi, in ordine:
1) Tetris. L'arte è rettangoli colorati, che persino un klutz totale può disegnare in Microsoft Paint. Non hai bisogno del suono. La programmazione è relativamente semplice, ma richiede ancora alcune cose chiave: capire la differenza tra lo stato del gioco interno e ciò che è disegnato sullo schermo; essere in grado di disegnare sullo schermo, punto (probabilmente con sprites e blitting); essere in grado di accettare l'input dell'utente in tempo reale piuttosto che usare semplicemente getch () o scanf () dove devi aspettarli.
2) Breakout / Arkanoid. L'arte è ancora rettangoli colorati e non hai ancora bisogno del suono. Utilizza tutti i concetti di base di Tetris, oltre a un rilevamento di base delle collisioni e alla fisica 2D poiché la palla deve muoversi e rimbalzare senza problemi.
3) Gradius / R-Type. Probabilmente puoi trovare alcuni set di tessere freeware per farlo. Qui lo sfondo scorre, quindi devi imparare un po 'di più su come funziona la memoria grafica, usando tecniche come sfogliare la pagina e fare doppio buffering e disegnare cose al di fuori dei confini dello schermo visibile. Tendi anche ad avere nemici dinamici e spawn di proiettili, quindi dovrai imparare a ripulire dopo te stesso (cioè sbarazzarsi di nemici e proiettili che lasciano lo schermo in modo che il gioco non perda la memoria come un setaccio).
4) Super Mario Bros. Simile al precedente progetto di scorrimento, tranne per il fatto che lo scorrimento è ora sotto il controllo del giocatore e non è automatico. Devi anche fare i conti con la gravità e tutte le divertenti cose di collisione che ne derivano (come non cadere sul pavimento solo perché eri qualche pixel sopra nell'ultimo fotogramma e vuoi passare a pochi pixel sotto nel fotogramma successivo ). Nota anche che la gravità è condizionata: influenza il giocatore e alcuni nemici, ma in genere non le piattaforme o le monete galleggianti o altro, che è un po 'diverso dal mondo reale.
Se riesci a fare tutti e quattro questi, dovresti essere in grado di fare praticamente qualsiasi gioco 2D che desideri; tutti gli strumenti ci sono. Se vuoi creare un gioco 3D ... impara prima il 2D perché è molto più semplice e non hai bisogno di capire la matematica in modo approfondito e devi comunque capire le cose 2D ... e poi quando sei a tuo agio, inizia a lavorare con alcuni strumenti 3D di base (librerie come Torque o Unity o giochi open source come Doom e Quake originali).
In bocca al lupo!
Questa è davvero una buona domanda. Non so dove sei, quindi oscillerò per il cielo, e presumo che non hai mai scritto una riga di codice in vita tua. Taglia qualsiasi parte del naso ti offende, abusando di una frase.
Penso che in realtà risponderò a una domanda leggermente diversa da quella che hai fatto e fornirò esempi per soddisfare la domanda che hai posto in loco. Il motivo per cui lo sto facendo in questo modo è lieve, ma credo che la differenza di punto di vista sia significativa: non sono tanto i giochi specifici che contano, quanto le mentalità che quei giochi portano a un designer.
Sai come le persone parlano del fatto che dovresti imparare una varietà di linguaggi di programmazione, al fine di mangiare le loro mentalità, i loro cuori e i loro fegati, e quindi ottenere il loro potente potere? C'è una vera verità in questo - dopo il tuo primo linguaggio di programmazione puro o quasi puro, anche in linguaggi imperativi, finirai per scrivere funzioni prive di effetti collaterali perché sono molto meglio definite e tutto ciò che scrivi anche in lingue non di quella forma sarà meglio per questo. Non importa in che lingua sia - haskell, ml / ocaml / smlnj, formulaONE, modelli c ++, qualunque cosa - imparerai ancora a fare molte classi di lavoro senza fare affidamento sullo stato degli effetti interni. La prima volta che impari un linguaggio di programmazione robusto e vicino alla macchina, imparerai a conoscere l'astrazione per tipo di dimensione. La prima volta che impari un linguaggio dichiarativo o di vincolo, imparerai a delimitare come strumento discrezionale. La prima volta che impari una lingua di ricerca indietro, imparerai a pregare Ia! Ia! C'thulhu F'tagn Nagn !, e poi torniamo a mangiare cuori e fegati, e il cerchio della vita si adempie.
Il design del gioco non è diverso. Non devi necessariamente imparare un gioco specifico, parallelamente a una lingua specifica, ma piuttosto imparare un gioco rappresentativo emblematico che gestisca quella mentalità, come le famiglie caratteristiche della lingua. Inoltre, c'è molto da mangiare fegati e cuori. Prendi un cracker al pepe.
Il bavaglio qui (almeno per come lo vedo io) è che vuoi coprire un ampio elenco di argomenti. È come spuntare le competenze su una scheda del personaggio: stai mettendo a tua disposizione più meccanismi con cui gestire una determinata situazione. Sì, sono in grado di livellare, ma avere un punto o due in più cose che puoi su tutta la linea significa che quando arriva il momento di usarne uno, non stai iniziando da zero e sai quali tattiche sono disponibili per farvi crescere.
Quindi guarda.
Per prima cosa vuoi tagliarti i denti. Questi sono utili anche quando stai imparando a scegliere una nuova piattaforma o quando ti stai riprendendo dall'amnesia. Questi sono pensati per essere veloci, non fantastici.
In ordine:
Una volta che li hai abbattuti, sei pronto per indirizzare una piattaforma e l'apprendimento può iniziare.
Questi non sono in un ordine particolare. Puoi riorganizzarli come meglio credi. Darò una manciata di esempi con ciascuno, ma non sono normativi; se un gioco diverso ti dà la stessa esperienza ed è abbastanza piccolo per far parte di una serie di lezioni, sentiti libero di cambiarlo. Per motivi pratici, è bene essere abili nel rendering dello schermo e nell'input relativamente rapidamente; li userai molto. Attendi qualche gioco prima di provare a scrivere classi di astrazione; si non si desidera essere catturati in un'astrazione ingenuo.
... eh. Mi sono annoiato.
Tetris
Gioco molto comune, un sacco di cloni open source là fuori a squarciarsi se rimani bloccato. Insegna le basi della grafica 2D, la gestione dell'input, il punteggio, ecc.
Quindi prendi questa idea originale e mettila in gioco. Ho imparato le basi della grafica 3D / opengl scrivendo una versione 3D di Tetris per il mio corso di grafica al computer al college.
GameDev.net ha un buon articolo che raccomanda una progressione di giochi per conoscere progressivamente lo sviluppo del gioco. Il mio consiglio preferito dalla lista è davvero lucidare questi giochi. Completamente finito, a uno stato rilasciabile.
L'elenco è il seguente (alcuni di questi sono stati forniti in altre risposte):
Mi piace iniziare tutti i miei ragazzi con Monopoli. Di solito uso il "code kata" di Monopoly di Brett Schuchert come base dell'esercizio, ma aggiungo molto su di esso. Ci sono diverse ragioni per cui mi piace davvero farlo.
Mi preoccupo profondamente delle buone pratiche di codifica (modelli di progettazione, TDD, SOLID, integrazione continua, ecc.) E metto molti vincoli sui miei sviluppatori quando fanno questo esercizio.
Praticamente tutti conoscono le regole di Monopoli e l'intero gioco può essere completato in un solo giorno. Ciò offre ai nuovi sviluppatori una rapida vittoria e aumenta davvero il loro coinvolgimento.
I requisiti iniziali iniziano con i controlli da tastiera, ma successivamente aggiungo un requisito per i controlli del mouse. Ciò induce gli sviluppatori a pensare a diverse cose, come riformattare il codice esistente, programmare parti di sistema modificabili in interfacce anziché in classi concrete, astrazioni migliori / appropriate, cosa testare l'unità, cosa non testare l'unità, PERCHÉ testare l'unità e cosa effettua BUONI test unitari.
A volte inseriamo un'IA più sofisticata, a volte no. A volte lavoriamo con altri giochi da tavolo con una logica leggermente più complessa come scivoli e scale o qualcosa del genere. A volte ci separiamo completamente dai giochi da tavolo e facciamo un gioco di poker o blackjack.
La parte veramente importante, per me, è che le persone ottengono una rapida vittoria e vedono quanto è flessibile realizzare software quando si seguono buoni standard di programmazione. Questi esercizi creano confidenza molto rapidamente. A volte, agli sviluppatori più esperti piace fare questi da soli, solo per prendersi una pausa da progetti più complicati o per praticare una nuova tecnica che hanno appena appreso (legge di Demeter?).
Scegli-Your-avventura
Ho ricevuto questo consiglio da un amico che ha iniziato a programmare creando un gioco, molto simile a scegliere il tuo libro di avventura . È fondamentalmente un semplice gioco di avventura testuale con un risultato come questo:
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
> _
Realizzare un gioco del genere dovrebbe insegnarti a creare un gameloop, input di console di base e script di base. È abbastanza semplice da implementare e facile per un principiante nel quale non è necessario un motore grafico per scrivere il gioco. I principianti esperti probabilmente scriverebbero un motore di scripting.
Nella mia esperienza con i programmatori alle prime armi, la progressione di solito sembra andare in questo modo:
Breakout, Pong o Asteroids.
C'è un'enorme differenza tra un gioco e un prototipo di gioco . Se sei seriamente intenzionato a finire il gioco dei tuoi sogni, allora dovresti finire i tuoi giochi "entry level" lungo la strada. Creare la parte di gioco del gioco è solo metà della battaglia. Tutte le cose extra come menu e punteggi alti vengono spesso trascurate o ignorate, ma richiedono molto più tempo di quanto ci si aspetterebbe.
Ci sono alcuni buoni suggerimenti nelle altre risposte, ma voglio solo dare un voto nel mio voto: inizia con qualcosa che sembra troppo scortese da affrontare.
Pong è un buon esempio.
L'obiettivo è: rendere la progettazione del gioco e le regole impostate in modo tale che tu possa concentrare tutta la tua attenzione sull'apprendimento della nuova cosa che stai imparando (una lingua, una piattaforma, un'API) e non devi costantemente fare delle pause per capire come funziona il gioco.
Una volta che inizi, scoprirai che il pong è in realtà leggermente più complicato di quanto sembri a prima vista. (Sto insegnando a un ragazzo a programmare e sta usando il pong come suo progetto di apprendimento. Abbiamo aggiunto alcune funzionalità e ora si sta distraendo dall'imparare a programmare imparando a fare tutte queste fantastiche funzioni :)
Una volta completata l'app n. 1 fino a quando non è pronta per essere venduta / venduta ad altri, ALLORA affronta qualcosa di un po 'più complicato (Tetris, avventura o qualunque cosa ti piaccia) ma, per iniziare a imparare una nuova tecnologia, fai la cosa che programmate brain-dead semplice.
Altri esempi:
Ma, ancora una volta, inizia con qualcosa di troppo semplice, in modo da poter effettivamente completare qualcosa e guardare indietro e vedere cosa è coinvolto. La differenza tra aver scritto UNA app in una lingua / piattaforma / SDK / motore e aver scritto app ZERO è ENORME . La differenza tra 1 e 2, o 2 e 5, molto meno, quindi puoi fare passi più grandi, ma fai che il passo da 0 a 1 sia un piccolissimo; sarà più grande di quanto pensi!
Flappy Bird
simile. Come programmatore professionista, è un lavoro pomeridiano (beh, un fine settimana per renderlo "bello") ma, mentre insegniamo a un altro a programmare, abbiamo imparato che in realtà ha molte piccole complicazioni. Ancora una volta, si tratta di un'esperienza molto più grande di zero e, una volta ottenuta, si avrà un'idea molto migliore su come andare avanti.
Dai un'occhiata a questo sito Web: 12 idee per progetti di giochi di informatica
Alcuni di questi giochi includono ciò che altri hanno detto come:
Parla anche di altri giochi che potresti provare a fare come:
Inoltre, dà un'idea di cosa dovresti provare a fare prima poiché dà un senso di difficoltà per ogni gioco (e quindi un piano su come dovresti affrontare i giochi):
Molte persone iniziano con Breakout perché presenta:
La parte più difficile della scrittura di un gioco - o di qualsiasi software - è capire cosa fare. Hai assolutamente bisogno di una specifica! Questa è la parte divertente della creazione di un clone di un gioco esistente: le specifiche esistono già. La tua specifica è "Il prodotto deve fare tutto quello che fa un altro prodotto" e se hai una copia dell'altro gioco a portata di mano, è abbastanza facile verificarlo.
Una volta che hai capito cosa devi fare, capire come farlo non è poi così difficile se sei un programmatore competente. Non intendo un programmatore esperto o esperto; ciò implicherebbe che sai già come fare la maggior parte di ciò che stai cercando di fare. Ma devi capire come pensare nelle astrazioni e avere le capacità di problem solving e di pensiero logico che sono fondamentali per la programmazione. Se riesci a farlo, allora puoi fare qualsiasi cosa.
Detto questo, non sono d'accordo con quello che la maggior parte della gente dice riguardo al tentativo di imparare a scrivere giochi scrivendo qualcosa di veramente semplice. La ricompensa è direttamente proporzionale allo sforzo che ci metti. Se impari a scrivere giochi scrivendo un gioco davvero semplice, alla fine saprai solo come scrivere giochi davvero semplici, e questo non ti farà molto bene.
D'altra parte, se inizi con qualcosa di travolgente, non finirai mai. Quindi inizia con qualcosa di moderatamente impegnativo che ti farà affrontare problemi seri. Costruire un gioco di ruolo in stile console 2D o un platform a scorrimento laterale è un ottimo modo per imparare concetti di programmazione di gioco reali.
Dipende davvero dalle tue attuali competenze. Se sei relativamente nuovo nella programmazione, scegli uno dei giochi specifici suggeriti dalle persone. Altrimenti, dovresti pensare a quale tipo di gioco ti permetterebbe di mettere a frutto la tua esperienza.
Quando ho iniziato il mio primo gioco, non avevo esperienza di sviluppo del gioco, ma avevo fatto lo sviluppo di app enterprise / line-of-business per alcuni anni. Il mio primo progetto di gioco era un gioco di strategia a turni e, dal punto di vista architettonico, non sembrava molto diverso da un'applicazione aziendale. Ha utilizzato un sistema client / server e la comunicazione è avvenuta attraverso un canale di servizio WCF duplex. La maggior parte delle operazioni del giocatore venivano messe in coda come "ordini" e spedite al server alla fine del turno. L'elaborazione di tutti i turni ha avuto luogo sul server, dopo di che sono stati inviati gli aggiornamenti dell'universo di gioco a ciascun client.
Quel primo progetto mi ha permesso di farmi strada nello sviluppo del gioco mentre mi avviavo in un territorio familiare. Con l'evoluzione del progetto, ho imparato a pensare più come uno sviluppatore di giochi e meno come uno sviluppatore di app aziendali. Il risultato finale ha funzionato abbastanza bene ed è stato un po 'più impressionante di Battleship o Tic-Tac-Toe :).
Stuzzichini e invasori spaziali
AI, grafica, gameplay, controlli relativamente semplici e non devono avere effetti sonori o musica a meno che tu non voglia aggiungerlo. Ho iniziato con questi due quando ho imparato a programmare in QBasic per MS-DOS e penso che loro sono fantastici primi giochi. Pac-Man sarebbe la mia altra scelta.
I giochi in stile Moonlander sono fantastici (dove hai una nave spaziale influenzata dalla gravità, i giocatori controllano la direzione e la spinta, il carburante limitato quando usano la spinta). Acquisire esperienza nell'implementazione di una fisica molto semplice e il sistema di collisione può essere piuttosto primitivo. Nessuna intelligenza artificiale di cui preoccuparsi e, soprattutto, è divertente e avvincente :)
Uno sparatutto spaziale top-down come Galaga è abbastanza semplice e insegna abbastanza bene il rilevamento delle collisioni! Può anche variare in difficoltà, da un livello con nemici stazionari a livelli multipli quali potenziamenti per armi e nemici che si muovono in schemi speciali.
Qualcosa come Gauntlet, perché hai bisogno di un sistema di entità, IA nemica, pickup, mappe delle tessere, rilevamento delle collisioni, punteggio ecc. Ha tutto, ma non in un modo travolgente.
Un mini clone di Zelda è buono ed esercita alcune abilità che non sono state menzionate molto qui. Lo scorrimento di una grande mappa di tessere e semplici controlli di movimento a 8 direzioni sono utili. Punti bonus se riesci a fare nemici, ma non me ne preoccuperei troppo.
Ho realizzato più di alcuni cloni di Tetris. Ogni volta che l'ho fatto l'ho fatto leggermente diverso però. Oggi di solito faccio clonare un certo tipo di asteroidi. Ho anche fatto più di alcuni spinoff del Missile Command.
Ho iniziato con il gioco base e poi sono passato ad aggiungere più cose, potenziamenti ecc. Ad esso.
Ho sempre iniziato con un gioco Tanks / Gorillas / Worms. Ti consente di esercitarti in una semplice visualizzazione grafica e leggere l'input dell'utente, oltre a un loop di gioco che applica gravità al proiettile e test per il rilevamento delle collisioni.
Dopodiché verrebbe un gioco come un platform o sparatutto molto semplice in cui è necessario leggere l'input dell'utente in tempo reale, anziché le istruzioni INPUT che funzionano per Gorilla :)
Il solitario (o qualsiasi altro gioco di carte) è un buon gioco per sporcarti le mani con un nuovo sistema di interfaccia utente, in quanto esercita molti dei widget e dei meccanismi di feedback dell'interazione del controller che devi usare. Inoltre la logica è semplice e inequivocabile, quindi puoi concentrarti sull'apprendimento e non sul design del gioco.
Per i giochi di simulazione in tempo reale, consiglierei sempre Pong come un buon semplice punto di partenza, sempre perché il design è semplice, così come l'interfaccia del controller, in modo da poter arrivare alla carne del sistema: la simulazione fisica.
Ho sempre affermato che se sei un programmatore di giochi dovresti essere in grado di creare una forma di Space Invaders . Diamine, il gioco è abbastanza semplice che dovresti essere in grado di fare anche tu la grafica.
Avere una selezione di piccoli giochi nel tuo portafoglio come ulteriore vantaggio di essere abbastanza utile, ad esempio, se sto imparando un nuovo linguaggio o framework di programmazione, spesso porto uno dei miei semplici giochi attraverso per vedere come il nuovo modo di fare le cose coincide con il modo in cui è stato scritto l'originale.
Dipende davvero da quali abilità di programmatore regolare hai già. La tua matematica ha bisogno di lavoro? La tua conoscenza grafica? Hai entrambi sotto copertura?
Anche se in generale penso che anche Tetris e Breakout sarebbero i miei due primi. Nulla di più facile di così non offre abbastanza stimoli. Tetris è un buon test su come disporre i tuoi dati in un algo, il breakout è un esempio matematico leggero. Dico sempre alle persone di puntare in alto, l'obiettivo è quello di rimanere bloccati e trovare una soluzione.
Dopodiché, il cielo è il limite. Ancora una volta, punta in alto. Prova un platform con terreno in pendenza, parralax e avrai una buona borsa di tecnologia 2D a portata di mano. Aggiungi un flipper (preparati ad essere frustrato) e la tua matematica migliorerà.
Da lì vai alla terza dimensione, impara le abilità di base (animazione, rendering) e dovresti essere relativamente ben attrezzato per affrontare una buona varietà di giochi.
Direi che un tipo di gioco di Tower Defense è il posto migliore da cui iniziare. Puoi anche iniziare modificando i giochi / i motori già esistenti (WarCraft III / HalfLife2 SDK / ecc.) Per comprendere la logica complessiva necessaria, quindi passare all'utilizzo della tua base di codice.
Il mio primo gioco è stato qualcosa come Super Mario.
Muoviti, evita gli ostacoli, salta. E tutte quelle attività possono essere facilmente eseguite senza alcun calcolo fisico.
È l'ideale per prendere una semplice cosa 2D, poiché non farai molto affidamento su una specifica implementazione / framework / engine.