I begynnelsen var det ... - 1 Min første jobbs prøvetid ble avsluttet for 3 år siden, men først nå fant jeg tid til å skrive en artikkel. Jeg tilbrakte et år i forskjellige avdelinger ved universitetet mitt: i mitt første semester studerte jeg ledelse, og i mitt andre semester byttet jeg til programvareteknikk. Jeg håpet de ville lære meg å programmere, men jeg tok feil. Så jeg samlet materiale og bestemte meg for å lære alt på egenhånd. Den eneste grunnen til at jeg er takknemlig overfor læreren min, er at han anbefalte meg å begynne med Stephen Pratts e-bok "The C Programming Language". Det er virkelig en god bok med mange praktiske øvelser. Jeg brukte omtrent 2 måneder på boken, hvoretter jeg kom over dette nettbaserte Java-kurset i en venns grupper, og så begynte det. Først planla jeg å bli Android-utvikler, men backend virket mer interessant for meg etter hvert som jeg kom videre i læringen. Forresten, det tok meg 3 måneder med studier å nå nivå 20, hvoretter jeg bestemte meg for å prøve å finne en jobb. Den første ordren var å flytte til en annen bysiden min ikke hadde noen åpninger for en junior Java-utvikler. Jeg fant et firma, søkte og fikk en testoppgave, som jeg fikk en uke til å fullføre. Jeg måtte skrive en enkel nettapplikasjon med Hibernate, Servlet/JSP og MySQL. Når jeg så alle disse begrepene, visste jeg bare at MySQL var en database. Først ble jeg veldig skuffet. Jeg bestemte meg til og med for å se etter ledige stillinger på noen KFC, men så bestemte jeg meg for å ta en prikk på testoppgaven. Tross alt kunne jeg alltid fått jobb på KFC. Jeg jobbet non-stop hele uken og klarte å fullføre testen. Jeg sendte inn løsningen min, men den "var ikke pen", så jeg reviderte den 4 ganger til. Min siste løsning viste seg å være riktig, men stillingene var allerede besatt og flere søknader ville ikke bli akseptert før 3 måneder. Hva skal du gjøre, ikke sant? For de neste 3 månedene, Jeg lærte HTML, CSS, JS, SQL og PHP. Hvorfor PHP? Jeg trengte et serverspråk som ville svare på forespørsler og slikt. På den tiden virket servlets og jsp for kompliserte. Til slutt produserte jeg en fullverdig nettapplikasjon med et forferdelig grensesnitt. Jeg publiserte koden på GitHub for porteføljen min. På dette tidspunktet hadde det gått 3 måneder og det samme firmaet kontaktet meg igjen og inviterte meg til et intervju, og ga en annen enkel oppgave for å teste kunnskapen min om SQL, som jeg klarte å fullføre på noen timer. Personen jeg snakket med om ansettelse antydet at de ville spørre om algoritmer og datastrukturer – emner som jeg ikke hadde hatt tid til å mestre ennå. Når det er sagt, var det 15 dager før intervjuet. Jeg fikk denne! Robert Lafores bok "Data Structures & Algorithms in Java" hjalp meg. jeg gjorde ikke har ikke tid til å lese og forstå alt på to uker, men jeg har fortsatt lært mye. Og så kom dagen for intervjuet. Jeg kom til avtalt tid. To menn hilste på meg og intervjuet begynte. Å si at jeg var bekymret ville være en vill underdrivelse. Stemmen min skalv. De spurte om alt unntatt algoritmer og datastrukturer. De spurte om Spring, DI, IoC, Hibernate, hvordan JVM fungerer, hvordan søppelsamleren fungerer - jeg klarte ikke å svare på ett eneste av disse spørsmålene. Jeg svarte bare på spørsmål om Java Core (samlinger, unntak, OOP, etc.). Mens jeg fortsatt var på intervjuet, visste jeg at jeg mislyktes, men jeg var fortsatt skuffet over å ikke få noen tilbakemelding. I stedet identifiserte jeg hull i kunnskapen min og begynte å jobbe iherdig for å lukke dem. Og så kom dagen for intervjuet. Jeg kom til avtalt tid. To menn hilste på meg og intervjuet begynte. Å si at jeg var bekymret ville være en vill underdrivelse. Stemmen min skalv. De spurte om alt unntatt algoritmer og datastrukturer. De spurte om Spring, DI, IoC, Hibernate, hvordan JVM fungerer, hvordan søppelsamleren fungerer - jeg klarte ikke å svare på ett eneste av disse spørsmålene. Jeg svarte bare på spørsmål om Java Core (samlinger, unntak, OOP, etc.). Mens jeg fortsatt var på intervjuet, visste jeg at jeg mislyktes, men jeg var fortsatt skuffet over å ikke få noen tilbakemelding. I stedet identifiserte jeg hull i kunnskapen min og begynte å jobbe iherdig for å lukke dem. Og så kom dagen for intervjuet. Jeg kom til avtalt tid. To menn hilste på meg og intervjuet begynte. Å si at jeg var bekymret ville være en vill underdrivelse. Stemmen min skalv. De spurte om alt unntatt algoritmer og datastrukturer. De spurte om Spring, DI, IoC, Hibernate, hvordan JVM fungerer, hvordan søppelsamleren fungerer - jeg klarte ikke å svare på ett eneste av disse spørsmålene. Jeg svarte bare på spørsmål om Java Core (samlinger, unntak, OOP, etc.). Mens jeg fortsatt var på intervjuet, visste jeg at jeg mislyktes, men jeg var fortsatt skuffet over å ikke få noen tilbakemelding. I stedet identifiserte jeg hull i kunnskapen min og begynte å jobbe iherdig for å lukke dem. Å si at jeg var bekymret ville være en vill underdrivelse. Stemmen min skalv. De spurte om alt unntatt algoritmer og datastrukturer. De spurte om Spring, DI, IoC, Hibernate, hvordan JVM fungerer, hvordan søppelsamleren fungerer - jeg klarte ikke å svare på ett eneste av disse spørsmålene. Jeg svarte bare på spørsmål om Java Core (samlinger, unntak, OOP, etc.). Mens jeg fortsatt var på intervjuet, visste jeg at jeg mislyktes, men jeg var fortsatt skuffet over å ikke få noen tilbakemelding. I stedet identifiserte jeg hull i kunnskapen min og begynte å jobbe iherdig for å lukke dem. Å si at jeg var bekymret ville være en vill underdrivelse. Stemmen min skalv. De spurte om alt unntatt algoritmer og datastrukturer. De spurte om Spring, DI, IoC, Hibernate, hvordan JVM fungerer, hvordan søppelsamleren fungerer - jeg klarte ikke å svare på ett eneste av disse spørsmålene. Jeg svarte bare på spørsmål om Java Core (samlinger, unntak, OOP, etc.). Mens jeg fortsatt var på intervjuet, visste jeg at jeg mislyktes, men jeg var fortsatt skuffet over å ikke få noen tilbakemelding. I stedet identifiserte jeg hull i kunnskapen min og begynte å jobbe iherdig for å lukke dem. Jeg svarte bare på spørsmål om Java Core (samlinger, unntak, OOP, etc.). Mens jeg fortsatt var på intervjuet, visste jeg at jeg mislyktes, men jeg var fortsatt skuffet over å ikke få noen tilbakemelding. I stedet identifiserte jeg hull i kunnskapen min og begynte å jobbe iherdig for å lukke dem. Jeg svarte bare på spørsmål om Java Core (samlinger, unntak, OOP, etc.). Mens jeg fortsatt var på intervjuet, visste jeg at jeg mislyktes, men jeg var fortsatt skuffet over å ikke få noen tilbakemelding. I stedet identifiserte jeg hull i kunnskapen min og begynte å jobbe iherdig for å lukke dem.Jeg fant en jobb en måned etter mitt mislykkede intervju. Jeg fant forresten jobbåpningen i diskusjoner om CodeGym ( CodeGym er den russiskspråklige versjonen av CodeGym — red.anm.). Først var det et Skype-intervju med en rekrutterer (det varte i ca. 2 timer). De spurte om Java Core, søppelinnsamling (nå visste jeg hvordan det fungerer), databaser og datastrukturer. Intervjueren ba meg dele skjermen min og skrive en kalkulator. Jeg gråt nesten av glede, siden jeg hadde skrevet en kalkulator bare en uke før. Trygg på meg selv begynte jeg på oppgaven. Men enten på grunn av begeistringen eller av en annen grunn, glemte jeg en del av algoritmen. Skjermen min ble delt. Jeg var redd for å konsultere Google. Heldigvis hadde jeg mobilen min, som reddet rumpa mi. Dagen etter innkalte de til et personlig intervju og et par dager senere fikk jeg et tilbud. Det var ikke en offisiell stilling. Min rolle var lærling hos en enkeltperson. Vi skrev en tjeneste for arrangementsplanlegging, salg av billetter osv. Jeg husker min første arbeidsdag. Sjefen min brukte 15 minutter på å forklare hva som måtte gjøres. "Er alt klart?" spurte han. "Hmm, egentlig ikke. Kan du gå over det en gang til?" spurte jeg med stor bekymring. Sjefen forklarte alt på nytt. "Er det klart nå?" "Ja, nå er det det." Egentlig skjønte jeg INGENTING. Men jeg var redd for å be om en annen forklaring. Jeg tror alle ansatt kan forstå det. Oppgaven kokte ned til portering fra Thymeleaf til AngularJS. Heldigvis fant jeg en del ferdig kode og brukte den som et eksempel på hva jeg skulle gjøre. Jeg skjønte ikke hvordan det fungerte, men jeg fullførte oppgaven. Jeg ble deretter tildelt oppgaver direkte knyttet til backend. Først etter en praktisk erfaring med Spring begynte jeg å forstå det jeg leste i «Vår for fagfolk». Jeg jobbet der i 8 måneder og flyttet så til en annen by, hvor jeg raskt fant en offisiell jobb, jobbet i 2 år og endret tittelen min fra "junior" til "mid-level" underveis. Så møtte jeg det faktum at jobben min hadde blitt rutine og ikke ga meg en dråpe glede. Så jeg tok en pause. For å hindre at fingrene mine atrofierer i pausen, bestemte jeg meg for å prøve meg på et annet område: spillutvikling. Mer spesifikt, mobil spillutvikling, plukke opp Android, siden jeg allerede kjente Java. Og det er det jeg skal snakke om i detalj nå. Først etter en praktisk erfaring med Spring begynte jeg å forstå det jeg leste i «Vår for fagfolk». Jeg jobbet der i 8 måneder og flyttet så til en annen by, hvor jeg raskt fant en offisiell jobb, jobbet i 2 år og endret tittelen min fra "junior" til "mid-level" underveis. Så møtte jeg det faktum at jobben min hadde blitt rutine og ikke ga meg en dråpe glede. Så jeg tok en pause. For å hindre at fingrene mine atrofierer i pausen, bestemte jeg meg for å prøve meg på et annet område: spillutvikling. Mer spesifikt, mobil spillutvikling, plukke opp Android, siden jeg allerede kjente Java. Og det er det jeg skal snakke om i detalj nå. Først etter en praktisk erfaring med Spring begynte jeg å forstå det jeg leste i «Vår for fagfolk». Jeg jobbet der i 8 måneder og flyttet så til en annen by, hvor jeg raskt fant en offisiell jobb, jobbet i 2 år og endret tittelen min fra "junior" til "mid-level" underveis. Så møtte jeg det faktum at jobben min hadde blitt rutine og ikke ga meg en dråpe glede. Så jeg tok en pause. For å hindre at fingrene mine atrofierer i pausen, bestemte jeg meg for å prøve meg på et annet område: spillutvikling. Mer spesifikt, mobil spillutvikling, plukke opp Android, siden jeg allerede kjente Java. Og det er det jeg skal snakke om i detalj nå. hvor jeg raskt fant en offisiell jobb, jobbet i 2 år og endret tittel fra «junior» til «mid-level» underveis. Så møtte jeg det faktum at jobben min hadde blitt rutine og ikke ga meg en dråpe glede. Så jeg tok en pause. For å hindre at fingrene mine atrofierer i pausen, bestemte jeg meg for å prøve meg på et annet område: spillutvikling. Mer spesifikt, mobil spillutvikling, plukke opp Android, siden jeg allerede kjente Java. Og det er det jeg skal snakke om i detalj nå. hvor jeg raskt fant en offisiell jobb, jobbet i 2 år og endret tittel fra «junior» til «mid-level» underveis. Så møtte jeg det faktum at jobben min hadde blitt rutine og ikke ga meg en dråpe glede. Så jeg tok en pause. For å hindre at fingrene mine atrofierer i pausen, bestemte jeg meg for å prøve meg på et annet område: spillutvikling. Mer spesifikt, mobil spillutvikling, plukke opp Android, siden jeg allerede kjente Java. Og det er det jeg skal snakke om i detalj nå. Jeg bestemte meg for å prøve meg på et annet område: spillutvikling. Mer spesifikt, mobil spillutvikling, plukke opp Android, siden jeg allerede kjente Java. Og det er det jeg skal snakke om i detalj nå. Jeg bestemte meg for å prøve meg på et annet område: spillutvikling. Mer spesifikt, mobil spillutvikling, plukke opp Android, siden jeg allerede kjente Java. Og det er det jeg skal snakke om i detalj nå.Mitt lag. På kort tid hadde jeg satt sammen et lite team på 4 personer (inkludert meg): 2 utviklere, 1 spilldesigner og 1 lydtekniker. Fordi ingen på laget hadde noen erfaring med spillutvikling, og fordi ferietiden min var begrenset, bestemte vi oss for å implementere et enkelt prosjekt som vi definitivt ville klare å fullføre. Og det gjorde vi! I utgangspunktet var fristen 15. november, men det er som kjent bare feil å fullføre et prosjekt etter planen. Så vi ble ferdige med det to uker for sent. Vår teknologistabel besto av Java 8 og libGDX.

Utvikling

Utviklingen startet 17. oktober. Totalt brukte vi 45 dager hvor:
  1. Vi lærte hvordan vi bruker libGDX.
  2. Vi skrev kode.
  3. Vi laget grafikk.
  4. Vi skapte musikk.
Alle som har sett spillet kan spørre: "Hvorfor tok det så lang tid? Spillet er så enkelt." Ja, det er sant, og for å være presis tok utviklingsdelen (skriving av koden) omtrent en og en halv uke. Resten av tiden ble delt mellom:
  1. Mestre hvordan du bruker spillmotoren.
  2. Tegning og omtegning av kunstverk.
  3. Å skrive musikk.
  4. Søker etter lyder på https://freesound.org .
  5. Leser haugevis av artikler om hvordan du promoterer spill.
Vi hadde også øyeblikk med "nedetid" av ulike årsaker: noen hadde eksamen, noen andre hadde en sminketest osv. Vi kan sikkert tillegge nedetiden halvannen uke eller mer. Det ble også brukt litt tid på «debatter»: det dukket opp nye ideer om hva vi skulle legge til i spillet nesten daglig, så vi diskuterte: «det er overflødig», «det passer ikke» osv. Vi kastet ut mange ideer, for eksempel å legge til løpende kakerlakker som kunne knuses for å få ekstra poeng: etter min mening var en av de vanskeligste tingene å bestemme på forhånd hva som skulle være i spillet og å holde seg til planen uten å prøve å legge til "bare en til " trekk. Slik akkumulerte disse 45 dagene. En prototype av spillet var klar etter halvannen uke. I denne perioden hadde vi egentlig ingen grafikk, I begynnelsen var det ... - 2Spillet er veldig enkelt i teknisk forstand. Vi trengte ikke engang å bruke box2d (en fysikkmotor). Vi kan håndtere kollisjoner og beregne hypotenusen på egenhånd. De mest interessante punktene jeg vil trekke frem er:
  1. Opprinnelig ble alle spillelementer generert tilfeldig. Med andre ord, vi satte leverandører (av sorte hull, saks, ninjastjerner, blyant, hjerter) inn i en matrise, fikk en tilfeldig leverandør, fikk et element med tilfeldige koordinater. Det ble ganske raskt klart at denne tilnærmingen "virkelig ikke var bra". Venner som deltok i testingen fortalte oss det samme, og anbefalte bruk av maler. For de som driver med spillutvikling er nok dette en opplagt løsning. Men fordi vi var nykommere på feltet, var det veldig praktiske råd for oss.

    Så vi laget flere maler: en dal av saks; blyantavledninger — det er ganske kult å samle dem superrask (whoosh, whoosh, whoosh med fingeren); og en mal til som jeg ikke vet hva jeg skal kalle — jeg skal bare fortelle deg hva vi kalte klassen i koden vår: StraightForwardPattern.

    I begynnelsen var det ... - 3

    Disse malene forbedret det, men det ble for forutsigbart på en eller annen måte. Derfor la vi til en til: en tilfeldig mal. Med andre ord, vi har nå noen "statiske" maler og en tilfeldig (sett inn "perfekt balansert" meme her).

  2. Her er hovedproblemet vi møtte. LibGDX kaller render (float delta) metoden i en uendelig sløyfe. Det er her alle elementene er tegnet. Blyantlinjen er tegnet som følger: vi får fingerkoordinater og tegner tekstur der. Så hvis vi flyttet fingeren over skjermen veldig raskt, ville linjen ha "hull" på grunn av millisekundene mellom kall til render(delta)-metoden.

    Løsningen var ganske enkel: vi husker de siste koordinatene der teksturen er tegnet, får de neste koordinatene, og hvis avstanden mellom dem er mer enn X og fingeren ikke er sluppet, så fyller vi gapet. Først trodde vi at dette alternativet kanskje ikke ville fungere - linjene ville være kantete. Men frykten vår var ubegrunnet, alt fungerte som det skulle.

Om spillet

Spillet hevder ikke å være unikt, men det er ganske bra og kan trekke brukere inn. Du styrer en blyant, tegner bokstavelig talt på papir og unngår hindringer – sakser, ninjastjerner og sorte hull. I mellomtiden er blyantstiften din tom, og du må plukke opp små blyanter. Hvis blyanten nærmer seg slutten før du samler en liten blyant, kan du plukke opp en bit av et speil. I noen sekunder, i stedet for å konsumere blyantavledningen, vil den bli gjenopprettet, men samtidig speiles kontrollene - hvis fingeren din beveger seg til venstre, trekker blyanten mot høyre. Du kan også plukke opp et hjerte som lar deg treffe en hindring én gang og holde deg i live. Jo lenger du beveger blyanten uten å løfte fingeren, desto høyere er kombinasjonen, noe som betyr at du vil samle poeng raskere. I begynnelsen var det ... - 4Hastigheten på spillet øker også gradvis. Det eneste som mangler er sinte fugler. I utgangspunktet planla vi å gi spillet navnet Karan Dash (translitterasjonen av det russiske ordet for blyant er karandash — ha! skjønner det?), men senere ombestemte vi oss og bestemte oss for Pencil Dash. Vi gjorde dette fordi dette grasiøse ordspillet bare ville bli forstått av et russisktalende publikum. Vi ga ut spillet for et par dager siden og markedsfører det nå. Heller ikke her er det noen på laget som har noen erfaring. Vi har fått all vår kunnskap om spillpromotering fra forskjellige artikler. Vi publiserte informasjon om spillet gratis på ulike nettsteder/fora. Våre betalte kanaler inkluderte annonsering på 4pd, annonsering med én blogger, flere innlegg i offentlige grupper på VKontakte og AdMob-annonsering. Dette innlegget er forresten også en del av kampanjen vår, så med tillatelse fra nettstedets administrasjon legger jeg til en lenke til spillet her. Du finner spillet på Google Play her . Jeg ville vært takknemlig hvis du ville installere den (kanskje du vil like den!), og hvis du legger igjen en vurdering, lover jeg å navngi et barn etter deg! :) I begynnelsen var det ... - 6