CodeGym/Java Blog/Willekeurig/In het begin was er...
John Squirrels
Niveau 41
San Francisco

In het begin was er...

Gepubliceerd in de groep Willekeurig
In het begin was er ... - 1 De proeftijd van mijn eerste baan liep 3 jaar geleden af, maar nu pas vond ik tijd om een ​​artikel te schrijven. Ik heb een jaar op verschillende afdelingen van mijn universiteit doorgebracht: in mijn eerste semester studeerde ik management en in mijn tweede semester stapte ik over naar software engineering. Ik hoopte dat ze me zouden leren programmeren, maar ik vergiste me. Dus verzamelde ik materiaal en besloot alles zelf te leren. De enige reden waarom ik mijn leraar dankbaar ben, is dat hij me aanraadde om te beginnen met Stephen Pratts e-boek "The C Programming Language". Het is echt een goed boek met veel praktische oefeningen. Ik heb ongeveer 2 maanden aan het boek besteed, waarna ik deze online Java-cursus tegenkwam in de groepen van vrienden en zo begon het. In eerste instantie was ik van plan om Android-ontwikkelaar te worden, maar de backend leek me interessanter naarmate ik vorderde in mijn leerproces. Trouwens, het kostte me 3 maanden studeren om niveau 20 te bereiken, waarna ik besloot om te proberen een baan te vinden. De eerste opdracht was om naar een andere stad te verhuizenaangezien de mijne geen vacatures had voor een junior Java-ontwikkelaar. Ik vond een bedrijf, solliciteerde en kreeg een proefopdracht, waar ik een week de tijd voor kreeg. Ik moest een eenvoudige webapplicatie schrijven met behulp van Hibernate, Servlet/JSP en MySQL. Toen ik al deze termen zag, wist ik alleen dat MySQL een database was. In het begin was ik erg teleurgesteld. Ik besloot zelfs om vacatures bij een of andere KFC te zoeken, maar toen besloot ik de testtaak te wagen. Ik kon immers altijd nog een baan krijgen bij KFC. Ik heb de hele week non-stop gewerkt en heb de test afgemaakt. Ik heb mijn oplossing ingediend, maar het "was niet mooi", dus heb ik het nog 4 keer herzien. Mijn laatste oplossing bleek juist te zijn, maar de vacatures waren al vervuld en aanvullende sollicitaties zouden gedurende 3 maanden niet worden geaccepteerd. Wat ga je doen, toch? Voor de komende 3 maanden, Ik leerde HTML, CSS, JS, SQL en PHP. Waarom PHP? Ik had een servertaal nodig die zou reageren op verzoeken en dergelijke. Op dat moment leken servlets en jsp te ingewikkeld. Uiteindelijk heb ik een volwaardige webapplicatie gemaakt met een vreselijke interface. Ik heb de code op GitHub gepubliceerd voor mijn portfolio. Tegen die tijd waren er 3 maanden verstreken en hetzelfde bedrijf nam opnieuw contact met me op en nodigde me uit voor een interview, waarbij ik weer een eenvoudige taak kreeg om mijn kennis van SQL te testen, wat ik in een paar uur wist te voltooien. De persoon met wie ik sprak over werk, liet doorschemeren dat ze zouden vragen naar algoritmen en datastructuren - onderwerpen waar ik nog geen tijd voor had gehad. Dat gezegd hebbende, er waren 15 dagen voor het interview. Ik heb dit! Het boek "Data Structures & Algorithms in Java" van Robert Lafore heeft me geholpen. ik deed' Ik heb geen tijd gehad om alles in twee weken te lezen en te begrijpen, maar ik heb toch veel geleerd. En toen kwam de dag van het interview. Ik kwam op de afgesproken tijd aan. Twee mannen begroetten me en het interview begon. Zeggen dat ik me zorgen maakte, zou een wild understatement zijn. Mijn stem trilde. Ze vroegen naar alles behalve algoritmen en datastructuren. Ze vroegen naar Spring, DI, IoC, Hibernate, hoe de JVM werkt, hoe de vuilnisman werkt - ik kon geen enkele van deze vragen beantwoorden. Ik heb alleen met succes vragen over Java Core beantwoord (verzamelingen, uitzonderingen, OOP, enz.). Terwijl ik nog bij het interview was, wist ik dat ik het niet gehaald had, maar ik was nog steeds teleurgesteld dat ik geen feedback kreeg. In plaats daarvan identificeerde ik hiaten in mijn kennis en begon ijverig te werken om ze te dichten. En toen kwam de dag van het interview. Ik kwam op de afgesproken tijd aan. Twee mannen begroetten me en het interview begon. Zeggen dat ik me zorgen maakte, zou een wild understatement zijn. Mijn stem trilde. Ze vroegen naar alles behalve algoritmen en datastructuren. Ze vroegen naar Spring, DI, IoC, Hibernate, hoe de JVM werkt, hoe de vuilnisman werkt - ik kon geen enkele van deze vragen beantwoorden. Ik heb alleen met succes vragen over Java Core beantwoord (verzamelingen, uitzonderingen, OOP, enz.). Terwijl ik nog bij het interview was, wist ik dat ik het niet gehaald had, maar ik was nog steeds teleurgesteld dat ik geen feedback kreeg. In plaats daarvan identificeerde ik hiaten in mijn kennis en begon ijverig te werken om ze te dichten. En toen kwam de dag van het interview. Ik kwam op de afgesproken tijd aan. Twee mannen begroetten me en het interview begon. Zeggen dat ik me zorgen maakte, zou een wild understatement zijn. Mijn stem trilde. Ze vroegen naar alles behalve algoritmen en datastructuren. Ze vroegen naar Spring, DI, IoC, Hibernate, hoe de JVM werkt, hoe de vuilnisman werkt - ik kon geen enkele van deze vragen beantwoorden. Ik heb alleen met succes vragen over Java Core beantwoord (verzamelingen, uitzonderingen, OOP, enz.). Terwijl ik nog bij het interview was, wist ik dat ik het niet gehaald had, maar ik was nog steeds teleurgesteld dat ik geen feedback kreeg. In plaats daarvan identificeerde ik hiaten in mijn kennis en begon ijverig te werken om ze te dichten. Zeggen dat ik me zorgen maakte, zou een wild understatement zijn. Mijn stem trilde. Ze vroegen naar alles behalve algoritmen en datastructuren. Ze vroegen naar Spring, DI, IoC, Hibernate, hoe de JVM werkt, hoe de vuilnisman werkt - ik kon geen enkele van deze vragen beantwoorden. Ik heb alleen met succes vragen over Java Core beantwoord (verzamelingen, uitzonderingen, OOP, enz.). Terwijl ik nog bij het interview was, wist ik dat ik het niet gehaald had, maar ik was nog steeds teleurgesteld dat ik geen feedback kreeg. In plaats daarvan identificeerde ik hiaten in mijn kennis en begon ijverig te werken om ze te dichten. Zeggen dat ik me zorgen maakte, zou een wild understatement zijn. Mijn stem trilde. Ze vroegen naar alles behalve algoritmen en datastructuren. Ze vroegen naar Spring, DI, IoC, Hibernate, hoe de JVM werkt, hoe de vuilnisman werkt - ik kon geen enkele van deze vragen beantwoorden. Ik heb alleen met succes vragen over Java Core beantwoord (verzamelingen, uitzonderingen, OOP, enz.). Terwijl ik nog bij het interview was, wist ik dat ik het niet gehaald had, maar ik was nog steeds teleurgesteld dat ik geen feedback kreeg. In plaats daarvan identificeerde ik hiaten in mijn kennis en begon ijverig te werken om ze te dichten. Ik heb alleen met succes vragen over Java Core beantwoord (verzamelingen, uitzonderingen, OOP, enz.). Terwijl ik nog bij het interview was, wist ik dat ik het niet gehaald had, maar ik was nog steeds teleurgesteld dat ik geen feedback kreeg. In plaats daarvan identificeerde ik hiaten in mijn kennis en begon ijverig te werken om ze te dichten. Ik heb alleen met succes vragen over Java Core beantwoord (verzamelingen, uitzonderingen, OOP, enz.). Terwijl ik nog bij het interview was, wist ik dat ik het niet gehaald had, maar ik was nog steeds teleurgesteld dat ik geen feedback kreeg. In plaats daarvan identificeerde ik hiaten in mijn kennis en begon ijverig te werken om ze te dichten.Ik vond een baan een maand na mijn mislukte sollicitatiegesprek. Overigens vond ik de vacature in discussies over CodeGym ( CodeGym is de Russischtalige versie van CodeGym — noot van de redactie). Eerst was er een Skype-interview met een recruiter (het duurde ongeveer 2 uur). Ze vroegen naar Java Core, garbage collection (nu wist ik hoe het werkt), databases en datastructuren. De interviewer vroeg me om mijn scherm te delen en een rekenmachine te schrijven. Ik huilde bijna van blijdschap, aangezien ik een week eerder een rekenmachine had geschreven. Zelfverzekerd begon ik aan de taak. Maar of het nu door mijn opwinding was of om een ​​andere reden, ik vergat een deel van het algoritme. Mijn scherm is gedeeld. Ik was bang om Google te raadplegen. Gelukkig had ik mijn mobiele telefoon, die redde me. De volgende dag belden ze voor een persoonlijk gesprek en een paar dagen later kreeg ik een aanbod. Het was geen officieel standpunt. Mijn functie was leerling bij een eenmanszaak. We schreven een dienst voor het plannen van evenementen, het verkopen van kaartjes, enz. Ik herinner me mijn eerste werkdag. Mijn baas had 15 minuten nodig om uit te leggen wat er moest gebeuren. "Is alles duidelijk?" hij vroeg. "Hmm, niet echt. Kun je het nog een keer herhalen?" vroeg ik met grote bezorgdheid. De baas legde alles nog eens uit. "Is het nu duidelijk?" "Ja, nu is het zo." Eigenlijk begreep ik er NIKS van. Maar ik was bang om een ​​andere verklaring te vragen. Ik denk dat iedereen die in dienst is dat kan begrijpen. De taak kwam neer op het overzetten van Thymeleaf naar AngularJS. Gelukkig vond ik een stuk voltooide code en gebruikte ik het als een voorbeeld van wat ik moest doen. Ik begreep niet hoe het werkte, maar ik voltooide de taak. Vervolgens kreeg ik taken toegewezen die direct verband hielden met de backend. Pas na een praktijkervaring met Spring begon ik te begrijpen wat ik las in "Spring voor Professionals". Ik werkte daar 8 maanden en verhuisde toen naar een andere stad, waar ik snel een officiële baan vond, 2 jaar werkte en gaandeweg mijn titel veranderde van "junior" in "mid-level". Toen werd ik geconfronteerd met het feit dat mijn werk routine was geworden en me geen druppel plezier gaf. Dus ik nam een ​​pauze. Om te voorkomen dat mijn vingers tijdens mijn pauze verschrompelden, besloot ik mijn hand op een ander gebied te proberen: spelontwikkeling. Meer specifiek, ontwikkeling van mobiele games, het oppakken van Android, aangezien ik Java al kende. En daar ga ik het nu in detail over hebben. Pas na een praktijkervaring met Spring begon ik te begrijpen wat ik las in "Spring voor Professionals". Ik werkte daar 8 maanden en verhuisde toen naar een andere stad, waar ik snel een officiële baan vond, 2 jaar werkte en gaandeweg mijn titel veranderde van "junior" in "mid-level". Toen werd ik geconfronteerd met het feit dat mijn werk routine was geworden en me geen druppel plezier gaf. Dus ik nam een ​​pauze. Om te voorkomen dat mijn vingers tijdens mijn pauze verschrompelden, besloot ik mijn hand op een ander gebied te proberen: spelontwikkeling. Meer specifiek, ontwikkeling van mobiele games, het oppakken van Android, aangezien ik Java al kende. En daar ga ik het nu in detail over hebben. Pas na een praktijkervaring met Spring begon ik te begrijpen wat ik las in "Spring voor Professionals". Ik werkte daar 8 maanden en verhuisde toen naar een andere stad, waar ik snel een officiële baan vond, 2 jaar werkte en gaandeweg mijn titel veranderde van "junior" in "mid-level". Toen werd ik geconfronteerd met het feit dat mijn werk routine was geworden en me geen druppel plezier gaf. Dus ik nam een ​​pauze. Om te voorkomen dat mijn vingers tijdens mijn pauze verschrompelden, besloot ik mijn hand op een ander gebied te proberen: spelontwikkeling. Meer specifiek, ontwikkeling van mobiele games, het oppakken van Android, aangezien ik Java al kende. En daar ga ik het nu in detail over hebben. waar ik snel een officiële baan vond, 2 jaar werkte en gaandeweg mijn titel veranderde van "junior" naar "mid-level". Toen werd ik geconfronteerd met het feit dat mijn werk routine was geworden en me geen druppel plezier gaf. Dus ik nam een ​​pauze. Om te voorkomen dat mijn vingers tijdens mijn pauze verschrompelden, besloot ik mijn hand op een ander gebied te proberen: spelontwikkeling. Meer specifiek, ontwikkeling van mobiele games, het oppakken van Android, aangezien ik Java al kende. En daar ga ik het nu in detail over hebben. waar ik snel een officiële baan vond, 2 jaar werkte en gaandeweg mijn titel veranderde van "junior" naar "mid-level". Toen werd ik geconfronteerd met het feit dat mijn werk routine was geworden en me geen druppel plezier gaf. Dus ik nam een ​​pauze. Om te voorkomen dat mijn vingers tijdens mijn pauze verschrompelden, besloot ik mijn hand op een ander gebied te proberen: spelontwikkeling. Meer specifiek, ontwikkeling van mobiele games, het oppakken van Android, aangezien ik Java al kende. En daar ga ik het nu in detail over hebben. Ik besloot mijn hand op een ander gebied te proberen: game-ontwikkeling. Meer specifiek, ontwikkeling van mobiele games, het oppakken van Android, aangezien ik Java al kende. En daar ga ik het nu in detail over hebben. Ik besloot mijn hand op een ander gebied te proberen: game-ontwikkeling. Meer specifiek, ontwikkeling van mobiele games, het oppakken van Android, aangezien ik Java al kende. En daar ga ik het nu in detail over hebben.Mijn team. In korte tijd had ik een klein team van 4 mensen (inclusief mezelf) samengesteld: 2 ontwikkelaars, 1 game-ontwerper en 1 geluidstechnicus. Omdat niemand in het team enige ervaring had met game-ontwikkeling en omdat mijn vakantietijd beperkt was, besloten we een eenvoudig project uit te voeren dat we zeker zouden kunnen afmaken. En dat deden we! Aanvankelijk was de deadline 15 november, maar zoals u weet, is het gewoon verkeerd om een ​​project op tijd af te ronden. Dus we waren er twee weken te laat mee klaar. Onze technology stack bestond uit Java 8 en libGDX.

Ontwikkeling

De ontwikkeling begon op 17 oktober. In totaal hebben we 45 dagen doorgebracht waarin:
  1. We hebben geleerd hoe we libGDX moeten gebruiken.
  2. We hebben code geschreven.
  3. We hebben afbeeldingen gemaakt.
  4. We hebben muziek gemaakt.
Iedereen die de game heeft gezien, vraagt ​​zich misschien af: "Waarom duurde het zo lang? De game is zo eenvoudig." Ja, dat klopt, en om precies te zijn duurde het ontwikkelingsgedeelte (het schrijven van de code) ongeveer anderhalve week. De rest van de tijd was verdeeld tussen:
  1. Beheersen hoe de game-engine te gebruiken.
  2. Kunstwerken tekenen en hertekenen.
  3. Muziek schrijven.
  4. Zoeken naar geluiden op https://freesound.org .
  5. Stapels artikelen lezen over het promoten van games.
We hebben ook momenten van "downtime" gehad om verschillende redenen: iemand had een examen, iemand anders had een inhaaltoets, enz. We kunnen zeker anderhalve week of langer aan de downtime toeschrijven. Er werd ook wat tijd besteed aan "debatten": bijna dagelijks kwamen er nieuwe ideeën over wat toe te voegen aan het spel, dus we debatteerden: "dat is overbodig", "dat past niet", enz. We gooiden veel ideeën weg, bijvoorbeeld rennende kakkerlakken toevoegen die kunnen worden verpletterd om extra punten te krijgen: naar mijn mening was een van de moeilijkste dingen om van tevoren te beslissen wat er in het spel zou komen en om je aan het plan te houden zonder te proberen "nog maar één" toe te voegen " functie. Zo zijn deze 45 dagen opgebouwd. Na anderhalve week was een prototype van de game klaar. Gedurende deze periode hadden we echt geen graphics, In het begin was er ... - 2Het spel is in technische zin heel eenvoudig. We hoefden niet eens box2d (een physics-engine) te gebruiken. We kunnen botsingen aan en berekenen zelf de schuine zijde. De meest interessante punten die ik zal benadrukken zijn:
  1. Aanvankelijk werden alle spelelementen willekeurig gegenereerd. Met andere woorden, we hebben providers (van zwarte gaten, scharen, ninjasterren, potloodstift, harten) in een array geplaatst, we hebben een willekeurige provider, we hebben een element met willekeurige coördinaten. Al vrij snel werd duidelijk dat deze aanpak "echt niet echt goed" was. Vrienden die deelnamen aan testen vertelden ons hetzelfde en bevalen het gebruik van sjablonen aan. Voor degenen die betrokken zijn bij game-ontwikkeling, is dit waarschijnlijk een voor de hand liggende oplossing. Maar omdat we nieuwkomers waren in het veld, was het voor ons een heel praktisch advies.

    Dus hebben we verschillende sjablonen gemaakt: een vallei van schaar; potloodstiften - het is best gaaf om ze supersnel te verzamelen (woesh, whoosh, whoosh met je vinger); en nog een sjabloon waarvan ik niet weet hoe ik hem moet noemen - ik zal je gewoon vertellen hoe we de klas in onze code hebben genoemd: StraightForwardPattern.

    In het begin was er ... - 3

    Deze sjablonen verbeterden het, maar het werd op de een of andere manier te voorspelbaar. Daarom hebben we er nog een toegevoegd: een willekeurig sjabloon. Met andere woorden, we hebben nu enkele "statische" sjablonen en één willekeurige (voeg hier een "perfect uitgebalanceerde" meme in).

  2. Dit is het belangrijkste probleem dat we tegenkwamen. LibGDX roept de render (float delta) methode aan in een oneindige lus. Hier worden alle elementen getekend. De potloodlijn wordt als volgt getekend: we krijgen vingercoördinaten en tekenen daar textuur. Dus als we onze vinger heel snel over het scherm zouden bewegen, zou de regel "gaten" hebben vanwege de milliseconden tussen aanroepen van de render (delta) -methode.

    De oplossing was vrij eenvoudig: we onthouden de laatste coördinaten waar de textuur is getekend, krijgen de volgende coördinaten, en als de afstand ertussen meer is dan X en de vinger is niet losgelaten, dan vullen we het gat. Eerst dachten we dat deze optie misschien niet zou werken — de lijnen zouden hoekig zijn. Maar onze vrees was ongegrond, alles werkte zoals het hoort.

Over het spel

De gameplay beweert niet uniek te zijn, maar het is best goed en kan gebruikers naar binnen trekken. Je bestuurt een potlood, tekent letterlijk op papier en ontwijkt obstakels - scharen, ninjasterren en zwarte gaten. Ondertussen raakt je potloodstift op en moet je kleine potloden oppakken. Als je potlood bijna op is voordat je een potloodje hebt verzameld, kun je een stuk van een spiegel oppakken. Gedurende een paar seconden wordt het potlood hersteld in plaats van de potloodstift te verbruiken, maar tegelijkertijd worden de bedieningselementen gespiegeld - als uw vinger naar links beweegt, tekent het potlood naar rechts. Je kunt ook een hart oppakken waarmee je één keer een obstakel raakt en in leven blijft. Hoe langer je het potlood beweegt zonder je vinger op te tillen, hoe hoger je combo, wat betekent dat je sneller punten verzamelt. In het begin was er ... - 4De snelheid van het spel neemt ook geleidelijk toe. Het enige wat ontbreekt zijn boze vogels. Aanvankelijk waren we van plan om het spel Karan Dash te noemen (de transliteratie van het Russische woord voor potlood is karandash - ha! Snap je het?), maar later veranderden we van gedachten en kozen we voor Pencil Dash. We deden dit omdat deze gracieuze woordspeling alleen begrepen zou worden door een Russisch sprekend publiek. We hebben de game een paar dagen geleden uitgebracht en maken er nu reclame voor. Ook hier heeft niemand in het team enige ervaring. Al onze kennis over spelpromotie hebben we gehaald uit verschillende artikelen. We hebben gratis informatie over het spel op verschillende websites/forums gepubliceerd. Onze betaalde kanalen omvatten adverteren op 4pd, adverteren met één blogger, verschillende posts in openbare groepen op VKontakte en AdMob-advertenties. Trouwens, dit bericht maakt ook deel uit van onze promotie, dus met toestemming van de websitebeheerder voeg ik hier een link naar het spel toe. Je kunt het spel hier op Google Play vinden . Ik zou het op prijs stellen als je het zou willen installeren (misschien vind je het leuk!), en als je een beoordeling achterlaat, beloof ik dat ik een kind naar je zal vernoemen! :) In het begin was er ... - 6
Opmerkingen
  • Populair
  • Nieuw
  • Oud
Je moet ingelogd zijn om opmerkingen te kunnen maken
Deze pagina heeft nog geen opmerkingen