CodeGym /Java Blog /Random-IT /All'inizio c'era...
John Squirrels
Livello 41
San Francisco

All'inizio c'era...

Pubblicato nel gruppo Random-IT
All'inizio c'era... - 1 Il periodo di prova del mio primo lavoro è terminato 3 anni fa, ma solo ora ho trovato il tempo per scrivere un articolo. Ho trascorso un anno in diversi dipartimenti della mia università: nel primo semestre ho studiato management e nel secondo semestre sono passato a ingegneria del software. Speravo che mi insegnassero a programmare, ma mi sbagliavo. Quindi, ho raccolto materiali e ho deciso di imparare tutto da solo. L'unico motivo per cui sono grato al mio insegnante è che mi ha consigliato di iniziare con l'ebook di Stephen Pratt "The C Programming Language". È davvero un buon libro con molti esercizi pratici. Ho trascorso circa 2 mesi sul libro, dopodiché mi sono imbattuto in questo corso Java online nei gruppi di un amico e così è iniziato. All'inizio avevo intenzione di diventare uno sviluppatore Android, ma il backend mi è sembrato più interessante man mano che progredivo nel mio apprendimento. A proposito, mi ci sono voluti 3 mesi di studio per raggiungere il livello 20, dopodiché ho deciso di provare a trovare un lavoro. Il primo ordine del giorno era trasferirsi in un'altra cittàdal momento che il mio non aveva aperture per uno sviluppatore Java junior. Ho trovato un'azienda, ho fatto domanda e ho ricevuto un'attività di prova, che mi è stata concessa una settimana per completare. Ho dovuto scrivere una semplice applicazione web utilizzando Hibernate, Servlet/JSP e MySQL. Vedendo tutti questi termini, sapevo solo che MySQL era un database. All'inizio sono rimasto molto deluso. Ho anche deciso di cercare offerte di lavoro in qualche KFC, ma poi ho deciso di fare un tentativo nell'attività di prova. Dopotutto, potrei sempre trovare lavoro alla KFC. Ho lavorato senza sosta tutta la settimana e sono riuscito a finire il test. Ho presentato la mia soluzione, ma "non era carina", quindi l'ho rivista altre 4 volte. La mia ultima soluzione si è rivelata corretta, ma le posizioni erano già state occupate e ulteriori domande non sarebbero state accettate per 3 mesi. Cosa farai, vero? Per i prossimi 3 mesi, Ho imparato HTML, CSS, JS, SQL e PHP. Perché PHP? Avevo bisogno di una lingua del server che rispondesse alle richieste e così via. A quel tempo, servlet e jsp sembravano troppo complicati. Alla fine, ho prodotto un'applicazione web completa con un'interfaccia terribile. Ho pubblicato il codice su GitHub per il mio portfolio. A questo punto erano passati 3 mesi e la stessa azienda mi ha ricontattato e mi ha invitato a un colloquio, assegnando un altro semplice compito per testare la mia conoscenza di SQL, che sono riuscito a completare in poche ore. La persona con cui stavo parlando dell'occupazione ha lasciato intendere che avrebbe chiesto informazioni su algoritmi e strutture dati, argomenti che non avevo ancora avuto il tempo di padroneggiare. Detto questo, mancavano 15 giorni al colloquio. Ho capito! Il libro di Robert Lafore "Data Structures & Algorithms in Java" mi ha aiutato. non l'ho fatto Non ho tempo di leggere e capire tutto in due settimane, ma ho comunque imparato molto. E poi è arrivato il giorno del colloquio. Sono arrivato all'ora stabilita. Due uomini mi hanno salutato e l'intervista è iniziata. Dire che ero preoccupato sarebbe un eufemismo selvaggio. La mia voce tremò. Hanno chiesto di tutto tranne algoritmi e strutture dati. Mi hanno chiesto informazioni su Spring, DI, IoC, Hibernate, come funziona la JVM, come funziona il garbage collector: non sono stato in grado di rispondere a una sola di queste domande. Ho risposto con successo solo a domande su Java Core (raccolte, eccezioni, OOP, ecc.). Mentre ero ancora al colloquio, sapevo di aver fallito, ma ero comunque deluso di non ricevere alcun feedback. Invece, ho identificato le lacune nelle mie conoscenze e ho iniziato a lavorare diligentemente per colmarle. E poi è arrivato il giorno del colloquio. Sono arrivato all'ora stabilita. Due uomini mi hanno salutato e l'intervista è iniziata. Dire che ero preoccupato sarebbe un eufemismo selvaggio. La mia voce tremò. Hanno chiesto di tutto tranne algoritmi e strutture dati. Mi hanno chiesto informazioni su Spring, DI, IoC, Hibernate, come funziona la JVM, come funziona il garbage collector: non sono stato in grado di rispondere a una sola di queste domande. Ho risposto con successo solo a domande su Java Core (raccolte, eccezioni, OOP, ecc.). Mentre ero ancora al colloquio, sapevo di aver fallito, ma ero comunque deluso di non ricevere alcun feedback. Invece, ho identificato le lacune nelle mie conoscenze e ho iniziato a lavorare diligentemente per colmarle. E poi è arrivato il giorno del colloquio. Sono arrivato all'ora stabilita. Due uomini mi hanno salutato e l'intervista è iniziata. Dire che ero preoccupato sarebbe un eufemismo selvaggio. La mia voce tremò. Hanno chiesto di tutto tranne algoritmi e strutture dati. Mi hanno chiesto informazioni su Spring, DI, IoC, Hibernate, come funziona la JVM, come funziona il garbage collector: non sono stato in grado di rispondere a una sola di queste domande. Ho risposto con successo solo a domande su Java Core (raccolte, eccezioni, OOP, ecc.). Mentre ero ancora al colloquio, sapevo di aver fallito, ma ero comunque deluso di non ricevere alcun feedback. Invece, ho identificato le lacune nelle mie conoscenze e ho iniziato a lavorare diligentemente per colmarle. Dire che ero preoccupato sarebbe un eufemismo selvaggio. La mia voce tremò. Hanno chiesto di tutto tranne algoritmi e strutture dati. Mi hanno chiesto informazioni su Spring, DI, IoC, Hibernate, come funziona la JVM, come funziona il garbage collector: non sono stato in grado di rispondere a una sola di queste domande. Ho risposto con successo solo a domande su Java Core (raccolte, eccezioni, OOP, ecc.). Mentre ero ancora al colloquio, sapevo di aver fallito, ma ero comunque deluso di non ricevere alcun feedback. Invece, ho identificato le lacune nelle mie conoscenze e ho iniziato a lavorare diligentemente per colmarle. Dire che ero preoccupato sarebbe un eufemismo selvaggio. La mia voce tremò. Hanno chiesto di tutto tranne algoritmi e strutture dati. Mi hanno chiesto informazioni su Spring, DI, IoC, Hibernate, come funziona la JVM, come funziona il garbage collector: non sono stato in grado di rispondere a una sola di queste domande. Ho risposto con successo solo a domande su Java Core (raccolte, eccezioni, OOP, ecc.). Mentre ero ancora al colloquio, sapevo di aver fallito, ma ero comunque deluso di non ricevere alcun feedback. Invece, ho identificato le lacune nelle mie conoscenze e ho iniziato a lavorare diligentemente per colmarle. Ho risposto con successo solo a domande su Java Core (raccolte, eccezioni, OOP, ecc.). Mentre ero ancora al colloquio, sapevo di aver fallito, ma ero comunque deluso di non ricevere alcun feedback. Invece, ho identificato le lacune nelle mie conoscenze e ho iniziato a lavorare diligentemente per colmarle. Ho risposto con successo solo a domande su Java Core (raccolte, eccezioni, OOP, ecc.). Mentre ero ancora al colloquio, sapevo di aver fallito, ma ero comunque deluso di non ricevere alcun feedback. Invece, ho identificato le lacune nelle mie conoscenze e ho iniziato a lavorare diligentemente per colmarle.Ho trovato un lavoro un mese dopo il mio colloquio fallito. A proposito, ho trovato l'apertura di lavoro nelle discussioni su CodeGym ( CodeGym è la versione in lingua russa di CodeGym — ndr). Innanzitutto, c'è stato un colloquio su Skype con un reclutatore (è durato circa 2 ore). Hanno chiesto informazioni su Java Core, garbage collection (ora sapevo come funziona), database e strutture dati. L'intervistatore mi ha chiesto di condividere il mio schermo e scrivere una calcolatrice. Ho quasi pianto di gioia, dato che avevo scritto una calcolatrice solo una settimana prima. Fiducioso in me stesso, ho iniziato il compito. Ma a causa della mia eccitazione o per qualche altro motivo, ho dimenticato parte dell'algoritmo. Il mio schermo è stato condiviso. Avevo paura di consultare Google. Per fortuna avevo il cellulare, che mi ha salvato il culo. Il giorno successivo, hanno chiamato per un colloquio di persona e un paio di giorni dopo ho ricevuto un'offerta. Non era una posizione ufficiale. Il mio ruolo era di apprendista presso un unico titolare. Abbiamo scritto un servizio per la pianificazione di eventi, la vendita di biglietti, ecc. Ricordo il mio primo giorno di lavoro. Il mio capo ha impiegato 15 minuti per spiegare cosa doveva essere fatto. "È tutto chiaro?" chiese. "Hmm, non proprio. Puoi ripassarci ancora una volta?" chiesi con grande preoccupazione. Il capo ha spiegato tutto di nuovo. "Adesso è chiaro?" "Sì, adesso lo è." In realtà non ho capito NULLA. Ma avevo paura di chiedere un'altra spiegazione. Penso che chiunque sia impiegato può capirlo. Il compito si è ridotto al porting da Thymeleaf ad AngularJS. Fortunatamente, ho trovato un pezzo di codice finito e l'ho usato come esempio di cosa fare. Non ho capito come ha funzionato, ma ho finito il compito. Successivamente mi sono state assegnate attività direttamente correlate al backend. Solo dopo un'esperienza pratica con Spring ho cominciato a capire quanto letto in "Primavera per Professionisti". Ho lavorato lì per 8 mesi e poi mi sono trasferito in un'altra città, dove ho trovato rapidamente un lavoro ufficiale, ho lavorato per 2 anni e lungo la strada ho cambiato il mio titolo da "junior" a "medio livello". Poi ho affrontato il fatto che il mio lavoro era diventato routine e non mi dava un briciolo di piacere. Così ho preso una pausa. Per evitare che le mie dita si atrofizzassero durante la pausa, ho deciso di cimentarmi in un'altra area: lo sviluppo del gioco. Più specificamente, sviluppo di giochi per dispositivi mobili, raccogliendo Android, poiché conoscevo già Java. Ed è di questo che parlerò in dettaglio ora. Solo dopo un'esperienza pratica con Spring ho cominciato a capire quanto letto in "Primavera per Professionisti". Ho lavorato lì per 8 mesi e poi mi sono trasferito in un'altra città, dove ho trovato rapidamente un lavoro ufficiale, ho lavorato per 2 anni e lungo la strada ho cambiato il mio titolo da "junior" a "medio livello". Poi ho affrontato il fatto che il mio lavoro era diventato routine e non mi dava un briciolo di piacere. Così ho preso una pausa. Per evitare che le mie dita si atrofizzassero durante la pausa, ho deciso di cimentarmi in un'altra area: lo sviluppo del gioco. Più specificamente, sviluppo di giochi per dispositivi mobili, raccogliendo Android, poiché conoscevo già Java. Ed è di questo che parlerò in dettaglio ora. Solo dopo un'esperienza pratica con Spring ho cominciato a capire quanto letto in "Primavera per Professionisti". Ho lavorato lì per 8 mesi e poi mi sono trasferito in un'altra città, dove ho trovato rapidamente un lavoro ufficiale, ho lavorato per 2 anni e lungo la strada ho cambiato il mio titolo da "junior" a "medio livello". Poi ho affrontato il fatto che il mio lavoro era diventato routine e non mi dava un briciolo di piacere. Così ho preso una pausa. Per evitare che le mie dita si atrofizzassero durante la pausa, ho deciso di cimentarmi in un'altra area: lo sviluppo del gioco. Più specificamente, sviluppo di giochi per dispositivi mobili, raccogliendo Android, poiché conoscevo già Java. Ed è di questo che parlerò in dettaglio ora. dove ho trovato rapidamente un lavoro ufficiale, ho lavorato per 2 anni e lungo la strada ho cambiato il mio titolo da "junior" a "medio livello". Poi ho affrontato il fatto che il mio lavoro era diventato routine e non mi dava un briciolo di piacere. Così ho preso una pausa. Per evitare che le mie dita si atrofizzassero durante la pausa, ho deciso di cimentarmi in un'altra area: lo sviluppo del gioco. Più specificamente, sviluppo di giochi per dispositivi mobili, raccogliendo Android, poiché conoscevo già Java. Ed è di questo che parlerò in dettaglio ora. dove ho trovato rapidamente un lavoro ufficiale, ho lavorato per 2 anni e lungo la strada ho cambiato il mio titolo da "junior" a "medio livello". Poi ho affrontato il fatto che il mio lavoro era diventato routine e non mi dava un briciolo di piacere. Così ho preso una pausa. Per evitare che le mie dita si atrofizzassero durante la pausa, ho deciso di cimentarmi in un'altra area: lo sviluppo del gioco. Più specificamente, sviluppo di giochi per dispositivi mobili, raccogliendo Android, poiché conoscevo già Java. Ed è di questo che parlerò in dettaglio ora. Ho deciso di provare la mia mano in un'altra area: lo sviluppo del gioco. Più specificamente, sviluppo di giochi per dispositivi mobili, raccogliendo Android, poiché conoscevo già Java. Ed è di questo che parlerò in dettaglio ora. Ho deciso di provare la mia mano in un'altra area: lo sviluppo del gioco. Più specificamente, sviluppo di giochi per dispositivi mobili, raccogliendo Android, poiché conoscevo già Java. Ed è di questo che parlerò in dettaglio ora.La mia squadra. In breve tempo, avevo riunito un piccolo team di 4 persone (incluso me): 2 sviluppatori, 1 game designer e 1 tecnico del suono. Poiché nessuno nel team aveva alcuna esperienza nello sviluppo di giochi e poiché il mio tempo di ferie era limitato, abbiamo deciso di implementare un progetto semplice che saremmo sicuramente riusciti a portare a termine. E così abbiamo fatto! Inizialmente, la scadenza era il 15 novembre, ma come sai, finire un progetto nei tempi previsti è semplicemente sbagliato. Quindi, l'abbiamo finito con due settimane di ritardo. Il nostro stack tecnologico consisteva in Java 8 e libGDX.

Sviluppo

Lo sviluppo è iniziato il 17 ottobre. In totale, abbiamo trascorso 45 giorni durante i quali:
  1. Abbiamo imparato come usare libGDX.
  2. Abbiamo scritto codice.
  3. Abbiamo creato la grafica.
  4. Abbiamo creato musica.
Chiunque abbia visto il gioco potrebbe chiedersi: "Perché ci è voluto così tanto tempo? Il gioco è così semplice". Sì, è vero, e per la precisione la parte di sviluppo (scrittura del codice) ha richiesto circa una settimana e mezza. Il resto del tempo è stato suddiviso tra:
  1. Padroneggiare come utilizzare il motore di gioco.
  2. Disegnare e ridisegnare opere d'arte.
  3. Scrivere musica.
  4. Ricerca di suoni su https://freesound.org .
  5. Leggere mucchi di articoli su come promuovere i giochi.
Abbiamo avuto anche momenti di "tempo morto" per vari motivi: qualcuno aveva un esame, qualcun altro aveva una prova di recupero, ecc. Possiamo sicuramente attribuire al tempo morto una settimana e mezza o più. Un po' di tempo è stato dedicato anche ai "dibattiti": nuove idee su cosa aggiungere al gioco sono apparse quasi quotidianamente, quindi abbiamo discusso: "è superfluo", "non va bene", ecc. ad esempio, l'aggiunta di scarafaggi in corsa che potrebbero essere schiacciati per ottenere punti extra: secondo me, una delle cose più difficili è stata decidere in anticipo cosa ci sarebbe stato nel gioco e attenersi al piano senza provare ad aggiungere "solo un altro " caratteristica. È così che si sono accumulati questi 45 giorni. Un prototipo del gioco era pronto dopo una settimana e mezza. Durante questo periodo, non avevamo davvero alcuna grafica, All'inizio c'era... - 2Il gioco è molto semplice in senso tecnico. Non avevamo nemmeno bisogno di usare box2d (un motore fisico). Possiamo gestire le collisioni e calcolare l'ipotenusa da soli. I punti più interessanti che evidenzierò sono:
  1. Inizialmente, tutti gli elementi del gioco venivano generati in modo casuale. In altre parole, mettiamo i fornitori (di buchi neri, forbici, stelle ninja, mina di matita, cuori) in un array, otteniamo un fornitore casuale, otteniamo un elemento con coordinate casuali. È diventato chiaro abbastanza rapidamente che questo approccio "non era davvero buono". Gli amici che hanno partecipato ai test ci hanno detto la stessa cosa, raccomandando l'uso di modelli. Per coloro che sono coinvolti nello sviluppo del gioco, questa è probabilmente una soluzione ovvia. Ma poiché eravamo nuovi arrivati ​​nel campo, è stato un consiglio molto pratico per noi.

    Così abbiamo creato diversi modelli: una valle di forbici; mine per matite: è piuttosto bello collezionarle molto velocemente (whoosh, whoosh, whoosh con il dito); e un altro modello che non so come chiamare — ti dirò solo come abbiamo chiamato la classe nel nostro codice: StraightForwardPattern.

    All'inizio c'era... - 3

    Questi modelli lo hanno migliorato, ma in qualche modo è diventato troppo prevedibile. Ecco perché ne abbiamo aggiunto un altro: un modello casuale. In altre parole, ora abbiamo alcuni modelli "statici" e uno casuale (inserire qui un meme "perfettamente bilanciato").

  2. Ecco il problema principale che abbiamo riscontrato. LibGDX chiama il metodo render (float delta) in un ciclo infinito. Qui è dove vengono disegnati tutti gli elementi. La linea della matita è disegnata come segue: otteniamo le coordinate delle dita e disegniamo la trama lì. Quindi, se muovessimo il dito sullo schermo molto velocemente, la linea presenterebbe degli "spazi" dovuti ai millisecondi tra le chiamate al metodo render(delta).

    La soluzione era abbastanza semplice: ricordiamo le ultime coordinate in cui è disegnata la trama, otteniamo le coordinate successive e se la distanza tra loro è maggiore di X e il dito non è stato rilasciato, riempiamo il vuoto. All'inizio, abbiamo pensato che questa opzione potesse non funzionare: le linee sarebbero state angolari. Ma i nostri timori erano infondati, tutto funzionava come doveva.

Riguardo al gioco

Il gameplay non pretende di essere unico, ma è abbastanza buono e può coinvolgere gli utenti. Controlli una matita, disegnando letteralmente su carta e schivando ostacoli: forbici, stelle ninja e buchi neri. Nel frattempo, la mina della tua matita si sta esaurendo e devi raccogliere piccole matite. Se la tua matita sta per finire prima di raccogliere una piccola matita, puoi prendere un pezzo di uno specchio. Per alcuni secondi, invece di consumare la mina della matita, verrà ripristinata, tuttavia, allo stesso tempo, i controlli vengono rispecchiati: se il dito si sposta a sinistra, la matita disegna a destra. Puoi anche raccogliere un cuore che ti permetterà di colpire un ostacolo una volta e rimanere in vita. Più a lungo muovi la matita senza alzare il dito, più alta sarà la tua combinazione, il che significa che accumulerai punti più velocemente. All'inizio c'era... - 4Anche la velocità del gioco aumenta gradualmente. L'unica cosa che manca sono gli uccelli arrabbiati. Inizialmente, avevamo programmato di chiamare il gioco Karan Dash (la traslitterazione della parola russa per matita è karandash — ah! capito?), ma in seguito abbiamo cambiato idea e abbiamo optato per Pencil Dash. Lo abbiamo fatto perché questo grazioso gioco di parole sarebbe stato compreso solo da un pubblico di lingua russa. Abbiamo rilasciato il gioco un paio di giorni fa e ora lo stiamo promuovendo. Anche qui nessuno della squadra ha esperienza. Abbiamo acquisito tutta la nostra conoscenza sulla promozione del gioco da vari articoli. Abbiamo pubblicato gratuitamente informazioni sul gioco su vari siti web/forum. I nostri canali a pagamento includevano pubblicità su 4pd, pubblicità con un blogger, diversi post in gruppi pubblici su VKontakte e pubblicità AdMob. A proposito, anche questo post fa parte della nostra promozione, quindi, con il permesso dell'amministrazione del sito, allego qui un link al gioco. Puoi trovare il gioco su Google Play qui . Ti sarei grato se lo installassi (forse ti piacerà!), e se lascerai una valutazione, prometto di dare il tuo nome a un bambino! :) All'inizio c'era... - 6
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION