JavaRush /Blog Java /Random-MS /Pada mulanya terdapat JavaRush
Марат Каджаев
Tahap
Санкт-Петербург

Pada mulanya terdapat JavaRush

Diterbitkan dalam kumpulan
Tempoh percubaan pertama saya telah tamat 3 tahun yang lalu, tetapi saya baru mempunyai masa untuk menulis artikel. Di universiti saya menghabiskan 1 tahun di fakulti yang berbeza: semester pertama saya belajar untuk menjadi pengurus, pada semester kedua saya berpindah ke kejuruteraan perisian. Saya berharap mereka akan mengajar saya cara memprogram, tetapi saya tersilap, jadi saya mengambil dokumen dan memutuskan untuk mempelajari semuanya sendiri. Satu-satunya perkara yang saya berterima kasih kepada guru itu ialah dia menasihati saya untuk memulakan dengan buku Stephen Prat "The C Programming Language." Buku yang sangat bagus dengan banyak masalah praktikal. Buku itu mengambil masa kira-kira 2 bulan, selepas itu saya terserempak dengan JR dalam kumpulan rakan dan kami pergi. Pada mulanya saya merancang untuk menjadi pembangun Android, tetapi semasa proses pembelajaran bahagian belakang kelihatan lebih menarik kepada saya. By the way, latihan mengambil masa 3 bulan, di mana saya mencapai tahap 20, selepas itu saya memutuskan untuk cuba mencari pekerjaan. Pertama sekali, saya berpindah ke bandar lain, kerana... Tiada kekosongan untuk pembangun Java junior di saya. Saya menemui sebuah syarikat, menjawab, menerima tugas ujian, yang diberi masa seminggu untuk diselesaikan. Ia adalah perlu untuk menulis aplikasi web mudah menggunakan Hibernate, Servlet\JSP dan MySQL. Daripada semua perkataan ini, saya hanya tahu bahawa MySQL adalah pangkalan data. Pada mulanya saya sangat terkilan, malah saya memutuskan untuk mencari jawatan kosong di beberapa KFC buat masa ini, tetapi akhirnya saya memutuskan untuk cuba memenuhi spesifikasi teknikal - saya akan sentiasa mempunyai masa untuk mendapatkan pekerjaan di KFC. Saya melakukan ujian tanpa henti sepanjang minggu dan berjaya. Saya menghantar penyelesaian itu, tetapi ia "hodoh", jadi saya membuatnya semula 4 kali lagi. Keputusan terakhir ternyata betul, tetapi ternyata pemaju telah pun diambil dan pengambilan seterusnya adalah dalam 3 bulan. Shtosh, okay. Untuk 3 bulan seterusnya saya belajar html, css, js, sql dan php. Apa yang PHP lakukan di sini? Saya memerlukan bahasa sebelah pelayan yang akan bertindak balas kepada permintaan dan semua itu - servlets dan jsp kelihatan terlalu rumit kepada saya pada masa itu. Hasilnya ialah aplikasi web lengkap dengan antara muka yang mengerikan, kod yang saya siarkan di github untuk portfolio saya. Hanya pada masa ini, 3 bulan telah berlalu dan mereka menulis kepada saya dari syarikat yang sama dan memanggil saya untuk temu duga dan memberi saya satu lagi tugas ujian mudah untuk pengetahuan SQL, yang saya selesaikan dalam beberapa jam. Orang yang saya bincangkan tentang kerja itu membayangkan bahawa mereka akan bertanya tentang algoritma dan struktur data - saya belum lagi menguasai topik ini, tetapi ada 15 hari sebelum temu duga, sialan kita pelumba. Buku Robert Laforet "Struktur Data dan Algoritma di Jawa" membantu saya. Saya tidak mempunyai masa untuk membaca dan memahami semuanya dalam masa dua minggu, tetapi saya masih belajar banyak perkara baru. Dan kemudian hari temuduga tiba, saya tiba pada masa yang ditetapkan, 2 orang lelaki bertemu saya dan temuduga bermula. Untuk mengatakan bahawa saya bimbang adalah pernyataan yang meremehkan; suara saya juga bergetar. Mereka bertanya tentang segala-galanya kecuali algoritma dan struktur data. Mereka bertanya tentang Spring, DI, IoC, Hibernate, cara JVM berfungsi, cara GC berfungsi - Saya tidak menjawab mana-mana soalan ini. Saya hanya menangani soalan tentang Java Core (koleksi, pengecualian, OOP, dsb.). Sudah pada temuduga saya menyedari bahawa saya telah gagal, tetapi masih mengecewakan kerana tidak menerima sebarang maklum balas. Tetapi saya mengenal pasti jurang dalam pengetahuan dan mula bersungguh-sungguh menutupnya. Saya mendapat pekerjaan sebulan selepas temuduga gagal. By the way, saya terjumpa kekosongan dalam perbincangan JavaRush. Mula-mula ada temu bual Skype dengan seorang perekrut (berlangsung kira-kira 2 jam). Mereka bertanya tentang Java Core, GC (sekarang saya tahu cara ia berfungsi), pangkalan data, struktur data. Kemudian penemuduga meminta saya berkongsi skrin dan menulis kalkulator. Saya hampir menjerit kegembiraan kerana saya menulis kalkulator secara literal seminggu sebelumnya. Yakin dengan diri saya sendiri, saya memulakan tugas, tetapi sama ada kerana teruja, atau atas sebab lain saya terlupa sebahagian daripada algoritma. Skrin dikongsi - ia adalah menakutkan untuk pergi ke Google. Nasib baik saya mempunyai telefon bimbit yang menyelamatkan pantat saya. Keesokan harinya mereka menghubungi saya untuk temu duga secara peribadi dan beberapa hari kemudian saya menerima tawaran.
Pada mulanya terdapat JavaRush - 1
Kerja itu tidak rasmi, saya berperanan sebagai perantis untuk usahawan individu. Kami menulis perkhidmatan untuk mencipta acara, menjual tiket dan semua itu. Saya masih ingat hari pertama saya di tempat kerja - usahawan individu menghabiskan 15 minit menerangkan perkara yang perlu dilakukan. - Nah, adakah semuanya jelas? - tanya IP - Mmm, tidak juga, bolehkah kita melakukannya sekali lagi? - Saya bertanya dengan sangat risau. IP menerangkan segala-galanya sekali lagi. - Ia kini jelas? - Sekarang ya. Sebenarnya, saya tidak faham APA-APA. Tetapi saya takut untuk meminta penjelasan sekali lagi - saya rasa semua orang yang mendapat pekerjaan akan memahami saya. Intipati tugas itu adalah untuk menulis semula dari thymeleaf ke AngularJS. Nasib baik, saya menemui sebahagian daripada kod siap pakai dan mengikuti contoh dan melakukan perkara yang sama. Saya tidak faham bagaimana ia berfungsi ketika itu, tetapi saya berjaya mengatasi tugas itu. Kemudian datang tugas yang berkaitan terus dengan bahagian belakang. Hanya selepas pengalaman praktikal dengan Spring, saya mula memahami apa yang ditulis dalam buku "Spring for Professionals". Saya bekerja di sana selama 8 bulan, selepas itu saya berpindah ke bandar lain, di mana saya dengan cepat mendapat pekerjaan rasmi, bekerja selama 2 tahun, dan pada masa yang sama menukar jawatan saya dari "Junior" kepada "Tengah". Kini saya berhadapan dengan hakikat bahawa kerja telah bertukar menjadi rutin dan tidak membawa sedikit pun keseronokan. Oleh itu, pada masa ini saya berehat, dan untuk mengelakkan jari saya daripada atrofi semasa rehat, saya memutuskan untuk mencuba bidang lain - pembangunan permainan. Iaitu, pembangunan permainan mudah alih, sebagai permulaan, Android, kerana... Saya tahu Java. Saya akan memberitahu anda tentang perkara ini sekarang secara terperinci. Mengenai kami Dalam masa yang singkat, sepasukan kecil 4 orang (termasuk saya) telah berkumpul: 2 pembangun, 1 pereka permainan, 1 jurutera bunyi. Kerana Tiada seorang pun dalam pasukan yang mempunyai pengalaman dalam bidang pembangunan permainan dan masa cuti saya adalah terhad, kami memutuskan untuk melaksanakan projek mudah yang pasti akan kami lihat hingga akhir. Mereka berjaya! Pada mulanya, tarikh akhir ialah 15 November, tetapi, seperti yang anda tahu, menyelesaikan projek pada tarikh akhir asal adalah satu dosa. Jadi kami menyelesaikannya dua minggu kemudian. Menurut mereka Timbunan ialah: Java 8 dan libGDX.

Mengenai perkembangan

Permulaan pembangunan boleh dipertimbangkan 17 Oktober. Secara keseluruhan kami menghabiskan 45 hari, di mana:
  1. belajar bekerja dengan libGDX;
  2. menulis kod;
  3. melukis grafik;
  4. membuat muzik;
Mereka yang telah melihat permainan itu mungkin mempunyai soalan - mengapa ia mengambil masa yang lama, permainan ini mudah? Ya, ini benar, dan tepat sekali, pembangunan itu sendiri (menulis kod) mengambil masa kira-kira satu setengah minggu. Selebihnya masa boleh dibahagikan antara:
  1. menguasai enjin;
  2. melukis gambar dan kemudian melukisnya semula;
  3. menulis muzik;
  4. mencari bunyi di https://freesound.org ;
  5. membaca sekumpulan artikel tentang cara mempromosikan permainan
Selain itu, terdapat saat-saat "downtime" atas pelbagai sebab - seseorang mempunyai peperiksaan, seseorang telah mengambil semula, dsb. Anda boleh meluangkan masa seminggu setengah, atau lebih, pada "masa henti" dengan selamat. Satu lagi bahagian masa dihabiskan untuk "perdebatan": idea tentang perkara yang perlu ditambahkan pada permainan datang hampir setiap hari, jadi terdapat pertikaian tentang "ini akan berlebihan", "ini tidak sesuai", dll. Oleh itu, kami meninggalkan banyak idea, contohnya, menambah lipas berlari yang anda boleh hancurkan dan mendapatkan tambahan untuknya. mata: Pada mulanya terdapat JavaRush - 2Secara umum, salah satu perkara yang paling sukar, pada pendapat saya, adalah untuk memutuskan terlebih dahulu apa yang akan ada dalam permainan dan berpegang pada rancangan ini tanpa cuba menambah ciri "lain". Ini adalah bagaimana kami mengumpul 45 hari ini. Prototaip permainan telah siap selepas seminggu setengah. Dalam tempoh ini, kami belum benar-benar mempunyai grafik, jadi kami mengambil beberapa perkara daripada domain awam (contohnya, kami meminjam helaian latar belakang kertas daripada Doodle Jump), dan beberapa yang kami cipta sendiri dalam cat. Pada mulanya terdapat JavaRush - 3Permainan ini secara teknikalnya sangat mudah - kami tidak perlu menggunakan box2d (enjin fizik), kami boleh mengendalikan perlanggaran dan mengira hipotenus sendiri. Daripada perkara yang paling menarik, saya akan menyerlahkan perkara berikut.
  1. Pada mulanya, semua elemen dalam permainan dijana secara rawak. Itu. kami mempunyai pembekal lubang hitam, gunting, shuriken, rod, hati - kami meletakkannya dalam tatasusunan, dan kemudian kami mengambil pembekal rawak dan mendapatkan elemen dengan koordinat rawak. Dengan cepat ia menjadi jelas bahawa pendekatan ini "tidak begitu baik"; rakan kami yang mengambil bahagian dalam ujian memberitahu kami perkara yang sama dan menasihati kami untuk menggunakan templat. Sudah tentu bagi mereka yang terlibat dalam pembangunan permainan ini adalah penyelesaian yang jelas, tetapi... Kami baru dalam bidang ini dan ini adalah nasihat yang sangat baik untuk kami.

    Oleh itu, beberapa corak muncul: lembah gunting; rod pepenjuru - ia agak menyeronokkan untuk memasangnya pada kelajuan tinggi (berdenyut-berdenyut dengan jari anda); dan satu lagi templat, saya tidak tahu untuk memanggilnya apa - Saya akan memanggilnya dengan nama kelas dalam kod: StraightForwardPattern.

    Pada mulanya terdapat JavaRush - 4

    Ia menjadi lebih menyenangkan dengan templat, tetapi ia terlalu boleh diramal atau sesuatu. Oleh itu, rawak yang sama menjadi templat lain. Itu. Kini kami mempunyai templat "statik" dan satu templat rawak. (ini adalah meme tentang keseimbangan sempurna).

  2. Masalah utama yang kami hadapi ialah ini. LibGDX memanggil kaedah render(float delta) dalam gelung tidak berkesudahan, di mana semua rendering elemen sebenarnya berlaku. Kami melukis garis pensil dengan cara berikut: kami mengambil koordinat jari dan meletakkan tekstur di sana. Jadi, jika kami menggerakkan jari kami merentasi skrin dengan cepat, "lubang" terbentuk kerana kami berakhir dalam milisaat tersebut apabila kaedah render(delta) telah berfungsi dan belum dipanggil lagi. Masalahnya diselesaikan dengan mudah - kita ingat koordinat terakhir di mana tekstur dilukis, kita mendapat yang seterusnya, dan jika jarak di antara mereka lebih besar daripada X dan jari tidak dilepaskan, kita mengisi jurang ini. Pada mulanya kami menyangka bahawa pilihan ini mungkin tidak berfungsi - garisan akan bersudut, tetapi ketakutan kami adalah sia-sia - semuanya berfungsi sebagaimana mestinya.

    Sebenarnya, tentang permainan

    Permainan ini tidak berpura-pura unik, tetapi ia agak bagus dan boleh menyebabkan ketagihan. Anda mengawal pensel, melukis secara literal di atas kertas, mengelak halangan - gunting, shuriken, lubang hitam. Dalam kes ini, teras pensel berakhir dan anda perlu mengambil pensel kecil. Sekiranya batang itu berakhir dan masih tiada pensel, anda boleh mengambil serpihan cermin. Ia akan memberi kesan selama beberapa saat - bukannya membazirkan rod, ia akan dipulihkan, tetapi pada masa yang sama kawalan menjadi cermin - anda bergerak ke kiri, dan pensel menarik ke kanan. Anda juga boleh mengambil hati yang akan membolehkan anda menghadapi halangan sekali dan terus hidup. Semakin lama anda menahan tanpa mengangkat jari anda dari skrin, semakin tinggi kombo itu, yang meningkatkan kelajuan mendapatkan mata. Selain itu, kelajuan permainan meningkat secara beransur-ansur. Melainkan anda tidak boleh merompak Korovan. Pada mulanya terdapat JavaRush - 5Pada mulanya, kami bercadang untuk memanggil permainan Karan Dash (pensel, ahaha, faham, kan?), tetapi kemudian kami berubah fikiran dan menetap di Pencil Dash. Motivasinya adalah bahawa (saya katakan) yang elegan ini memainkan perkataan hanya boleh difahami oleh penonton berbahasa Rusia. Kami mengeluarkan permainan itu beberapa hari lalu dan kini mempromosikannya. Tiada seorang pun dalam pasukan yang mempunyai pengalaman dalam hal ini sama ada; kami mengumpul semua pengetahuan tentang promosi daripada pelbagai artikel. Kami menerbitkan maklumat tentang permainan di pelbagai laman web/forum secara percuma. Bagi saluran berbayar, kami memesan pengiklanan di 4PD, daripada seorang blogger, beberapa siaran dalam halaman awam VK dan AdMob. Dengan cara ini, siaran ini juga merupakan sebahagian daripada promosi, jadi dengan kebenaran pentadbiran saya meninggalkan pautan ke permainan di sini. Halaman permainan di Google Play: klik Saya juga akan meninggalkan pautan ke kumpulan VK kami, di mana anda boleh meninggalkan ulasan/cadangan dan tidak terlepas kemas kini klik Saya akan berterima kasih jika anda memasangnya (bagaimana jika anda menyukainya?), dan untuk semakan dengan penarafan saya berjanji untuk menyalakan lilin untuk kesihatan anda! Tanya soalan, jika ada, saya akan menjawab.Pada mulanya terdapat JavaRush - 6

Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION