CodeGym/Java blog/Véletlen/Kezdetben volt...
John Squirrels
Szint
San Francisco

Kezdetben volt...

Megjelent a csoportban
Kezdetben volt... - 1 Az első munkahelyemen a próbaidő 3 éve lejárt, de csak most találtam időt egy cikk megírására. Egy évet töltöttem az egyetemem különböző tanszékein: az első félévben menedzsmentet tanultam, a második félévben pedig áttértem a szoftvermérnökségre. Reméltem, hogy megtanítanak programozni, de tévedtem. Tehát összegyűjtöttem az anyagokat, és úgy döntöttem, hogy mindent egyedül tanulok meg. Az egyetlen ok, amiért hálás vagyok a tanáromnak, az az, hogy azt javasolta, hogy kezdjem Stephen Pratt „The C programozási nyelv” című e-könyvével. Valóban egy jó könyv, sok gyakorlati feladattal. Körülbelül 2 hónapot töltöttem a könyvvel, majd egy baráti csoportban ráakadtam erre az online Java tanfolyamra, és így kezdődött. Először azt terveztem, hogy Android fejlesztő leszek, de a backend érdekesebbnek tűnt számomra, ahogy fejlődtem a tanulásban. Egyébként 3 hónap tanulásba telt, mire elértem a 20. szintet, utána döntöttem úgy, hogy megpróbálok munkát találni. Az első feladat az volt, hogy egy másik városba költözzünkmivel az enyémben nem volt nyitva tartás egy junior Java fejlesztő számára. Találtam egy céget, jelentkeztem, és kaptam egy tesztfeladatot, aminek elvégzésére egy hetet adtam. Egy egyszerű webalkalmazást kellett írnom Hibernate, Servlet/JSP és MySQL segítségével. Mindezen kifejezések láttán csak azt tudtam, hogy a MySQL egy adatbázis. Először nagyon csalódott voltam. Még azt is elhatároztam, hogy keresek álláslehetőségeket valamelyik KFC-nél, de aztán úgy döntöttem, hogy megszakítom a tesztfeladatot. Végül is mindig kaphattam munkát a KFC-nél. Egész héten megállás nélkül dolgoztam, és sikerült befejeznem a tesztet. Beküldtem a megoldásomat, de "nem volt szép", így még 4x átdolgoztam. Legutóbbi megoldásom helyesnek bizonyult, de a pozíciókat már betöltötték, és további jelentkezéseket 3 hónapig nem fogadnak el. Mit fogsz csinálni, igaz? A következő 3 hónapban Megtanultam HTML-t, CSS-t, JS-t, SQL-t és PHP-t. Miért PHP? Szükségem volt egy szervernyelvre, amely válaszol a kérésekre és hasonlókra. Akkoriban a szervletek és a jsp túl bonyolultnak tűntek. Végül egy teljes értékű webalkalmazást készítettem szörnyű felülettel. A portfólióm kódját a GitHubon tettem közzé. Ekkor már eltelt 3 hónap, és ugyanaz a cég ismét megkeresett és interjúra hívott, újabb egyszerű feladatot adva az SQL tudásom próbára, amit néhány óra alatt sikerült teljesítenem. Az a személy, akivel a foglalkoztatásról beszélgettem, utalt rá, hogy algoritmusokról és adatstruktúrákról fog kérdezni – olyan témákról, amelyeket még nem volt időm elsajátítani. Ez azt jelenti, hogy 15 nap volt az interjú előtt. Ezt kaptam! Robert Lafore "Data Structures & Algorithms in Java" című könyve segített nekem. Én nem' nincs időm elolvasni és megérteni az egészet két hét alatt, de még így is sokat tanultam. Aztán eljött az interjú napja. Megérkeztem a megbeszélt időpontra. Két férfi üdvözölt, és elkezdődött az interjú. Azt mondani, hogy aggódom, vad alulmondás lenne. A hangom remegett. Mindenre rákérdeztek, kivéve az algoritmusokat és az adatstruktúrákat. Megkérdezték a Spring-ről, a DI-ről, az IoC-ről, a Hibernate-ról, a JVM működéséről, a szemétgyűjtő működéséről – egyetlen kérdésre sem tudtam válaszolni. Csak a Java Core-ra vonatkozó kérdésekre válaszoltam sikeresen (gyűjtemények, kivételek, OOP stb.). Még az interjú alatt tudtam, hogy nem sikerült, de csalódott voltam, hogy nem kaptam visszajelzést. Ehelyett felismertem a tudásom hiányosságait, és szorgalmasan dolgozni kezdtem, hogy bezárjam azokat. Aztán eljött az interjú napja. Megérkeztem a megbeszélt időpontra. Két férfi üdvözölt, és elkezdődött az interjú. Azt mondani, hogy aggódom, vad alulmondás lenne. A hangom remegett. Mindenre rákérdeztek, kivéve az algoritmusokat és az adatstruktúrákat. Megkérdezték a Spring-ről, a DI-ről, az IoC-ről, a Hibernate-ról, a JVM működéséről, a szemétgyűjtő működéséről – egyetlen kérdésre sem tudtam válaszolni. Csak a Java Core-ra vonatkozó kérdésekre válaszoltam sikeresen (gyűjtemények, kivételek, OOP stb.). Még az interjú alatt tudtam, hogy nem sikerült, de csalódott voltam, hogy nem kaptam visszajelzést. Ehelyett felismertem a tudásom hiányosságait, és szorgalmasan dolgozni kezdtem, hogy bezárjam azokat. Aztán eljött az interjú napja. Megérkeztem a megbeszélt időpontra. Két férfi üdvözölt, és elkezdődött az interjú. Azt mondani, hogy aggódom, vad alulmondás lenne. A hangom remegett. Mindenre rákérdeztek, kivéve az algoritmusokat és az adatstruktúrákat. Megkérdezték a Spring-ről, a DI-ről, az IoC-ről, a Hibernate-ról, a JVM működéséről, a szemétgyűjtő működéséről – egyetlen kérdésre sem tudtam válaszolni. Csak a Java Core-ra vonatkozó kérdésekre válaszoltam sikeresen (gyűjtemények, kivételek, OOP stb.). Még az interjú alatt tudtam, hogy nem sikerült, de csalódott voltam, hogy nem kaptam visszajelzést. Ehelyett felismertem a tudásom hiányosságait, és szorgalmasan dolgozni kezdtem, hogy bezárjam azokat. Azt mondani, hogy aggódom, vad alulmondás lenne. A hangom remegett. Mindenre rákérdeztek, kivéve az algoritmusokat és az adatstruktúrákat. Megkérdezték a Spring-ről, a DI-ről, az IoC-ről, a Hibernate-ról, a JVM működéséről, a szemétgyűjtő működéséről – egyetlen kérdésre sem tudtam válaszolni. Csak a Java Core-ra vonatkozó kérdésekre válaszoltam sikeresen (gyűjtemények, kivételek, OOP stb.). Még az interjú alatt tudtam, hogy nem sikerült, de csalódott voltam, hogy nem kaptam visszajelzést. Ehelyett felismertem a tudásom hiányosságait, és szorgalmasan dolgozni kezdtem, hogy bezárjam azokat. Azt mondani, hogy aggódom, vad alulmondás lenne. A hangom remegett. Mindenre rákérdeztek, kivéve az algoritmusokat és az adatstruktúrákat. Megkérdezték a Spring-ről, a DI-ről, az IoC-ről, a Hibernate-ról, a JVM működéséről, a szemétgyűjtő működéséről – egyetlen kérdésre sem tudtam válaszolni. Csak a Java Core-ra vonatkozó kérdésekre válaszoltam sikeresen (gyűjtemények, kivételek, OOP stb.). Még az interjú alatt tudtam, hogy nem sikerült, de csalódott voltam, hogy nem kaptam visszajelzést. Ehelyett felismertem a tudásom hiányosságait, és szorgalmasan dolgozni kezdtem, hogy bezárjam azokat. Csak a Java Core-ra vonatkozó kérdésekre válaszoltam sikeresen (gyűjtemények, kivételek, OOP stb.). Még az interjú alatt tudtam, hogy nem sikerült, de csalódott voltam, hogy nem kaptam visszajelzést. Ehelyett felismertem a tudásom hiányosságait, és szorgalmasan dolgozni kezdtem, hogy bezárjam azokat. Csak a Java Core-ra vonatkozó kérdésekre válaszoltam sikeresen (gyűjtemények, kivételek, OOP stb.). Még az interjú alatt tudtam, hogy nem sikerült, de csalódott voltam, hogy nem kaptam visszajelzést. Ehelyett felismertem a tudásom hiányosságait, és szorgalmasan dolgozni kezdtem, hogy bezárjam azokat.Egy hónappal a sikertelen interjúm után találtam munkát. A megnyíló állást egyébként a CodeGym-ról folytatott vitákban találtam ( A CodeGym a CodeGym orosz nyelvű változata – a szerkesztő megjegyzése). Először is volt egy Skype interjú egy toborzóval (kb. 2 óráig tartott). Kérdezték a Java Core-ról, a szemétgyűjtésről (most már tudtam, hogyan működik), adatbázisokról és adatstruktúrákról. A kérdező megkért, hogy osszam meg a képernyőmet, és írjak egy számológépet. Majdnem sírtam az örömömben, hiszen alig egy héttel azelőtt írtam egy számológépet. Magabiztosan kezdtem el a feladatot. De akár az izgalom miatt, akár más okból, elfelejtettem az algoritmus egy részét. Megosztották a képernyőmet. Féltem a Google-lel való konzultációtól. Szerencsére nálam volt a mobilom, ami megmentette a seggem. Másnap személyes interjúra hívtak, és pár nappal később kaptam egy ajánlatot. Ez nem volt hivatalos álláspont. Az én szerepem egy egyéni vállalkozó tanoncja volt. Írtunk egy szolgáltatást rendezvényszervezéshez, jegyértékesítéshez stb. Emlékszem az első munkanapomra. A főnökömnek 15 perce volt, hogy elmagyarázza, mit kell tenni. – Minden világos? kérdezte. "Hmm, nem igazán. Átnéznéd még egyszer?" – kérdeztem nagy aggodalommal. A főnök újra elmagyarázott mindent. – Most már világos? – Igen, most már az. Igazából SEMMIT nem értettem. De féltem más magyarázatot kérni. Szerintem ezt minden alkalmazott megértheti. A feladat a Thymeleaf-ről az AngularJS-re való áthelyezésben merült ki. Szerencsére találtam egy darab kész kódot, és példaként használtam a teendőkre. Nem értettem, hogyan működik, de befejeztem a feladatot. Ezt követően olyan feladatokat kaptam, amelyek közvetlenül kapcsolódnak a háttérhez. Csak a tavaszi gyakorlati tapasztalatok után kezdtem megérteni, amit a "Tavasz a szakembereknek"-ben olvastam. 8 hónapig dolgoztam ott, majd egy másik városba költöztem, ahol gyorsan találtam hivatalos állást, 2 évig dolgoztam, és közben a címemet "junior"-ról "középszintre" változtattam. Aztán szembesültem azzal, hogy a munkám rutinná vált, és cseppet sem okozott örömet. Szóval szünetet tartottam. Hogy ne sorvadjanak el ujjaim a szünetben, úgy döntöttem, hogy kipróbálom magam egy másik területen: a játékfejlesztésben. Pontosabban mobil játékfejlesztés, Android felszedése, hiszen a Java-t már ismertem. És erről fogok most részletesen beszélni. Csak a tavaszi gyakorlati tapasztalatok után kezdtem megérteni, amit a "Tavasz a szakembereknek"-ben olvastam. 8 hónapig dolgoztam ott, majd egy másik városba költöztem, ahol gyorsan találtam hivatalos állást, 2 évig dolgoztam, és közben a címemet "junior"-ról "középszintre" változtattam. Aztán szembesültem azzal, hogy a munkám rutinná vált, és cseppet sem okozott örömet. Szóval szünetet tartottam. Hogy ne sorvadjanak el ujjaim a szünetben, úgy döntöttem, hogy kipróbálom magam egy másik területen: a játékfejlesztésben. Pontosabban mobil játékfejlesztés, Android felszedése, hiszen a Java-t már ismertem. És erről fogok most részletesen beszélni. Csak a tavaszi gyakorlati tapasztalatok után kezdtem megérteni, amit a "Tavasz a szakembereknek"-ben olvastam. 8 hónapig dolgoztam ott, majd egy másik városba költöztem, ahol gyorsan találtam hivatalos állást, 2 évig dolgoztam, és közben a címemet "junior"-ról "középszintre" változtattam. Aztán szembesültem azzal, hogy a munkám rutinná vált, és cseppet sem okozott örömet. Szóval szünetet tartottam. Hogy ne sorvadjanak el ujjaim a szünetben, úgy döntöttem, hogy kipróbálom magam egy másik területen: a játékfejlesztésben. Pontosabban mobil játékfejlesztés, Android felszedése, hiszen a Java-t már ismertem. És erről fogok most részletesen beszélni. ahol gyorsan találtam hivatalos állást, 2 évig dolgoztam és közben "junior"-ról "középszintre" változtattam a címemet. Aztán szembesültem azzal, hogy a munkám rutinná vált, és cseppet sem okozott örömet. Szóval szünetet tartottam. Hogy ne sorvadjanak el ujjaim a szünetben, úgy döntöttem, hogy kipróbálom magam egy másik területen: a játékfejlesztésben. Pontosabban mobil játékfejlesztés, Android felszedése, hiszen a Java-t már ismertem. És erről fogok most részletesen beszélni. ahol gyorsan találtam hivatalos állást, 2 évig dolgoztam és közben "junior"-ról "középszintre" változtattam a címemet. Aztán szembesültem azzal, hogy a munkám rutinná vált, és cseppet sem okozott örömet. Szóval szünetet tartottam. Hogy ne sorvadjanak el ujjaim a szünetben, úgy döntöttem, hogy kipróbálom magam egy másik területen: a játékfejlesztésben. Pontosabban mobil játékfejlesztés, Android felszedése, hiszen a Java-t már ismertem. És erről fogok most részletesen beszélni. Úgy döntöttem, hogy kipróbálom magam egy másik területen: a játékfejlesztésben. Pontosabban mobil játékfejlesztés, Android felszedése, hiszen a Java-t már ismertem. És erről fogok most részletesen beszélni. Úgy döntöttem, hogy kipróbálom magam egy másik területen: a játékfejlesztésben. Pontosabban mobil játékfejlesztés, Android felszedése, hiszen a Java-t már ismertem. És erről fogok most részletesen beszélni.Az én csapatom. Röviden összeállítottam egy 4 fős kis csapatot (köztük én is): 2 fejlesztő, 1 játéktervező és 1 hangmérnök. Mivel a csapatból senkinek nem volt tapasztalata a játékfejlesztésben, és mivel a szabadságom korlátozott volt, úgy döntöttünk, hogy megvalósítunk egy egyszerű projektet, amelyet biztosan be fogunk tudni fejezni. És így is tettünk! Kezdetben november 15-e volt a határidő, de mint tudják, egy projekt ütemterv szerinti befejezése egyszerűen rossz. Szóval két hét késéssel fejeztük be. Technológiai veremünk a Java 8-ból és a libGDX-ből állt.

Fejlesztés

A fejlesztés október 17-én kezdődött. Összesen 45 napot töltöttünk, amely alatt:
  1. Megtanultuk a libGDX használatát.
  2. Kódot írtunk.
  3. Grafikát készítettünk.
  4. Zenét alkottunk.
Bárki, aki látta a játékot, megkérdezheti: "Miért tartott ilyen sokáig? A játék olyan egyszerű." Igen, ez igaz, és hogy pontos legyek, a fejlesztési rész (a kód megírása) körülbelül másfél hétig tartott. A hátralévő idő a következők között oszlik meg:
  1. A játékmotor használatának elsajátítása.
  2. Műalkotások rajzolása és átrajzolása.
  3. Zeneírás.
  4. Hangok keresése a https://freesound.org oldalon .
  5. Rengeteg cikk olvasása a játékok népszerűsítéséről.
Nálunk is voltak „leállások” különböző okok miatt: valakinek vizsgája volt, valakinek pótvizsgája volt, stb. A leállásnak bizonyára másfél hetet vagy még többet is betudhatunk. A "vitákkal" is eltelt egy kis idő: szinte naponta megjelentek új ötletek, hogy mit is lehetne hozzátenni a játékhoz, így vitatkoztunk: "ez felesleges", "nem illik" stb. Sok ötletet kidobtunk, például a futó csótányok hozzáadásával, amelyeket össze lehetett törni, hogy pluszpontokat szerezzenek: véleményem szerint az egyik legnehezebb dolog volt előre eldönteni, hogy mi lesz a játékban, és ragaszkodni a tervhez anélkül, hogy megpróbáltuk volna hozzátenni „csak egyet " funkció. Így gyűlt össze ez a 45 nap. A játék prototípusa másfél hét után elkészült. Ebben az időszakban tényleg nem volt grafikánk, Kezdetben volt...-2A játék technikai értelemben nagyon egyszerű. Nem is kellett box2d-t (fizikai motor) használnunk. Az ütközéseket mi magunk is tudjuk kezelni, és ki tudjuk számítani a hipotenúzust. A legérdekesebb pontokat kiemelem:
  1. Kezdetben az összes játékelemet véletlenszerűen generálták. Más szóval, a szolgáltatókat (fekete lyukak, olló, nindzsa csillagok, ceruza, szívek) egy tömbbe helyeztük, véletlenszerű szolgáltatót kaptunk, véletlenszerű koordinátákkal rendelkező elemet. Elég hamar világossá vált, hogy ez a megközelítés "tényleg nem igazán jó". A tesztelésben részt vevő ismerőseink is ugyanezt mondták nekünk, sablonok használatát javasolták. A játékfejlesztéssel foglalkozók számára ez valószínűleg kézenfekvő megoldás. De mivel újoncok voltunk a pályán, ez nagyon praktikus tanács volt számunkra.

    Így több sablont készítettünk: ollóvölgy; ceruzahüvelyek — nagyon klassz szupergyorsan összeszedni őket (húúúú, hú, ujj az ujjaddal); és még egy sablon, amit nem tudom, minek nevezzek – csak elmondom, hogyan neveztük el az osztályt a kódunkban: StraightForwardPattern.

    Kezdetben volt... - 3

    Ezek a sablonok javítottak rajta, de valahogy túlságosan kiszámíthatóvá vált. Ezért adtunk hozzá még egyet: egy véletlenszerű sablont. Más szóval, most van néhány "statikus" sablonunk és egy véletlenszerű (ide szúrja be a "tökéletesen kiegyensúlyozott" mémet).

  2. Itt van a fő probléma, amellyel találkoztunk. A LibGDX egy végtelen ciklusban hívja meg a render (float delta) metódust. Itt rajzolódik ki az összes elem. A ceruzavonalat a következőképpen húzzuk meg: megkapjuk az ujj koordinátáit, és oda rajzolunk textúrát. Tehát, ha nagyon gyorsan mozgatnánk az ujjunkat a képernyőn, akkor a vonalon "rések" lennének a render(delta) metódus hívásai közötti ezredmásodpercek miatt.

    A megoldás nagyon egyszerű volt: megjegyezzük az utolsó koordinátákat, ahol a textúra megrajzolódott, megkapjuk a következő koordinátákat, és ha a távolság nagyobb, mint X, és az ujjat nem engedték el, akkor kitöltjük a rést. Először azt hittük, hogy ez a lehetőség nem működik – a vonalak szögletesek lennének. De félelmeink alaptalanok voltak, minden úgy működött, ahogy kell.

A játékról

A játékmenet nem állítja, hogy egyedi, de elég jó, és képes magával ragadni a felhasználókat. Ön irányít egy ceruzát, szó szerint rajzolhat papírra és kerüli az akadályokat - ollót, nindzsa csillagokat és fekete lyukakat. Közben kifogy a ceruzája, és kis ceruzákat kell felvennie. Ha a ceruzája a végéhez közeledik, mielőtt egy kis ceruzát gyűjtene, felvehet egy tükröt. Néhány másodpercre a ceruzakábel elfogyasztása helyett visszaáll, ugyanakkor a vezérlőelemek tükröződnek – ha az ujjunk balra mozdul, akkor a ceruza jobbra húz. Felvehetsz egy szívet is, amivel egyszer akadályba ütközöl, és életben maradsz. Minél tovább mozgatja a ceruzát anélkül, hogy felemelné az ujját, annál magasabb lesz a kombó, ami azt jelenti, hogy gyorsabban gyűjti a pontokat. Kezdetben volt...-4A játék sebessége is fokozatosan növekszik. Már csak a dühös madarak hiányoznak. Kezdetben azt terveztük, hogy a játékot Karan Dash névvel látjuk el (az orosz ceruza szó átírása karandash – ha! érted?), de később meggondoltuk magunkat, és a Pencil Dash mellett döntöttünk. Azért tettük ezt, mert ezt a kecses szójátékot csak az orosz ajkú közönség értené meg. Néhány napja adtuk ki a játékot, és most hirdetjük. Itt sem a csapatból senkinek nincs tapasztalata. A játékpromócióval kapcsolatos minden tudásunkat különféle cikkekből szereztük meg. A játékkal kapcsolatos információkat ingyenesen közzétettük különböző weboldalakon/fórumokon. Fizetős csatornáink közé tartozott a 4pd-n történő hirdetés, egy bloggerrel való hirdetés, több bejegyzés a VKontakte nyilvános csoportjaiban, valamint az AdMob hirdetés. Egyébként ez a bejegyzés is a promóciónk része, így a weboldal adminisztrációjának engedélyével ide teszek egy linket a játékhoz. A játékot a Google Playen itt találod . Hálás lennék, ha telepítenéd (talán tetszeni fog!), és ha hagysz értékelést, megígérem, hogy gyermeket nevezek el rólad! :) Kezdetben volt... - 6
Hozzászólások
  • Népszerű
  • Új
  • Régi
Hozzászólás írásához be kell jelentkeznie
Ennek az oldalnak még nincsenek megjegyzései