CodeGym /Blog Java /rawak /Pada mulanya, terdapat...
John Squirrels
Tahap
San Francisco

Pada mulanya, terdapat...

Diterbitkan dalam kumpulan
Pada mulanya, terdapat ... - 1 Tempoh percubaan kerja pertama saya telah tamat 3 tahun yang lalu, tetapi baru sekarang saya mendapat masa untuk menulis artikel. Saya menghabiskan setahun di jabatan yang berbeza di universiti saya: pada semester pertama saya, saya belajar pengurusan, dan pada semester kedua saya, saya beralih kepada kejuruteraan perisian. Saya berharap mereka akan mengajar saya cara membuat program, tetapi saya tersilap. Jadi, saya mengumpul bahan dan memutuskan untuk mempelajari semuanya sendiri. Satu-satunya sebab saya berterima kasih kepada guru saya ialah dia mengesyorkan saya mulakan dengan ebook Stephen Pratt "The C Programming Language". Ia benar-benar buku yang bagus dengan banyak latihan praktikal. Saya menghabiskan kira-kira 2 bulan untuk buku itu, selepas itu saya terjumpa kursus Java dalam talian ini dalam kumpulan rakan dan ia bermula. Pada mulanya, saya merancang untuk menjadi pembangun Android, tetapi bahagian belakang kelihatan lebih menarik kepada saya semasa saya maju dalam pembelajaran saya. By the way, saya mengambil masa 3 bulan belajar untuk mencapai Tahap 20, selepas itu saya memutuskan untuk cuba mencari pekerjaan. Perintah pertama perniagaan adalah untuk berpindah ke bandar lainkerana saya tidak mempunyai sebarang bukaan untuk pembangun Java junior. Saya menemui sebuah syarikat, memohon, dan menerima tugas ujian, yang saya diberi masa seminggu untuk menyelesaikannya. Saya terpaksa menulis aplikasi web mudah menggunakan Hibernate, Servlet/JSP dan MySQL. Melihat semua istilah ini, saya hanya tahu bahawa MySQL adalah pangkalan data. Pada mulanya, saya sangat kecewa. Saya juga memutuskan untuk mencari peluang pekerjaan di beberapa KFC, tetapi kemudian saya memutuskan untuk mengambil keputusan untuk menjalankan tugas ujian. Lagipun, saya sentiasa boleh mendapatkan pekerjaan di KFC. Saya bekerja tanpa henti sepanjang minggu dan berjaya menghabiskan ujian. Saya menyerahkan penyelesaian saya, tetapi ia "tidak cantik", jadi saya menyemaknya 4 kali lagi. Penyelesaian terakhir saya ternyata betul, tetapi jawatan telah diisi dan permohonan tambahan tidak akan diterima selama 3 bulan. Apa yang awak akan lakukan, kan? Untuk 3 bulan akan datang, Saya belajar HTML, CSS, JS, SQL dan PHP. Mengapa PHP? Saya memerlukan bahasa pelayan yang akan bertindak balas kepada permintaan dan sebagainya. Pada masa itu, servlets dan jsp kelihatan terlalu rumit. Pada akhirnya, saya menghasilkan aplikasi web lengkap dengan antara muka yang mengerikan. Saya menerbitkan kod di GitHub untuk portfolio saya. Pada masa ini, 3 bulan telah berlalu dan syarikat yang sama menghubungi saya semula dan menjemput saya ke temu duga, memberikan satu lagi tugas mudah untuk menguji pengetahuan saya tentang SQL, yang saya berjaya siapkan dalam beberapa jam. Orang yang saya bercakap tentang pekerjaan membayangkan bahawa mereka akan bertanya tentang algoritma dan struktur data — topik yang saya belum sempat kuasai lagi. Yang berkata, terdapat 15 hari sebelum temu duga. Saya dapat ini! Buku Robert Lafore "Data Structures & Algorithm in Java" membantu saya. saya tidak Saya tidak mempunyai masa untuk membaca dan memahami semuanya dalam dua minggu, tetapi saya masih belajar banyak. Dan kemudian hari temuduga datang. Saya tiba pada masa yang ditetapkan. Dua lelaki menyapa saya dan temu bual bermula. Untuk mengatakan saya bimbang akan menjadi kenyataan yang meremehkan. Suara saya bergetar. Mereka bertanya tentang segala-galanya kecuali algoritma dan struktur data. Mereka bertanya tentang Spring, DI, IoC, Hibernate, cara JVM berfungsi, cara pemungut sampah berfungsi — saya tidak dapat menjawab satu pun soalan ini. Saya hanya berjaya menjawab soalan tentang Java Core (koleksi, pengecualian, OOP, dll.). Semasa masih di temuduga, saya tahu bahawa saya gagal, tetapi saya masih kecewa kerana tidak menerima sebarang maklum balas. Sebaliknya, saya mengenal pasti jurang dalam pengetahuan saya dan mula berusaha bersungguh-sungguh untuk menutupnya. Dan kemudian hari temuduga datang. Saya tiba pada masa yang ditetapkan. Dua lelaki menyapa saya dan temu bual bermula. Untuk mengatakan saya bimbang akan menjadi kenyataan yang meremehkan. Suara saya bergetar. Mereka bertanya tentang segala-galanya kecuali algoritma dan struktur data. Mereka bertanya tentang Spring, DI, IoC, Hibernate, cara JVM berfungsi, cara pemungut sampah berfungsi — saya tidak dapat menjawab satu pun soalan ini. Saya hanya berjaya menjawab soalan tentang Java Core (koleksi, pengecualian, OOP, dll.). Semasa masih di temuduga, saya tahu bahawa saya gagal, tetapi saya masih kecewa kerana tidak menerima sebarang maklum balas. Sebaliknya, saya mengenal pasti jurang dalam pengetahuan saya dan mula berusaha bersungguh-sungguh untuk menutupnya. Dan kemudian hari temuduga datang. Saya tiba pada masa yang ditetapkan. Dua lelaki menyapa saya dan temu bual bermula. Untuk mengatakan saya bimbang akan menjadi kenyataan yang meremehkan. Suara saya bergetar. Mereka bertanya tentang segala-galanya kecuali algoritma dan struktur data. Mereka bertanya tentang Spring, DI, IoC, Hibernate, cara JVM berfungsi, cara pemungut sampah berfungsi — saya tidak dapat menjawab satu pun soalan ini. Saya hanya berjaya menjawab soalan tentang Java Core (koleksi, pengecualian, OOP, dll.). Semasa masih di temuduga, saya tahu bahawa saya gagal, tetapi saya masih kecewa kerana tidak menerima sebarang maklum balas. Sebaliknya, saya mengenal pasti jurang dalam pengetahuan saya dan mula berusaha bersungguh-sungguh untuk menutupnya. Untuk mengatakan saya bimbang akan menjadi kenyataan yang meremehkan. Suara saya bergetar. Mereka bertanya tentang segala-galanya kecuali algoritma dan struktur data. Mereka bertanya tentang Spring, DI, IoC, Hibernate, cara JVM berfungsi, cara pemungut sampah berfungsi — saya tidak dapat menjawab satu pun soalan ini. Saya hanya berjaya menjawab soalan tentang Java Core (koleksi, pengecualian, OOP, dll.). Semasa masih di temuduga, saya tahu bahawa saya gagal, tetapi saya masih kecewa kerana tidak menerima sebarang maklum balas. Sebaliknya, saya mengenal pasti jurang dalam pengetahuan saya dan mula berusaha bersungguh-sungguh untuk menutupnya. Untuk mengatakan saya bimbang akan menjadi kenyataan yang meremehkan. Suara saya bergetar. Mereka bertanya tentang segala-galanya kecuali algoritma dan struktur data. Mereka bertanya tentang Spring, DI, IoC, Hibernate, cara JVM berfungsi, cara pemungut sampah berfungsi — saya tidak dapat menjawab satu pun soalan ini. Saya hanya berjaya menjawab soalan tentang Java Core (koleksi, pengecualian, OOP, dll.). Semasa masih di temuduga, saya tahu bahawa saya gagal, tetapi saya masih kecewa kerana tidak menerima sebarang maklum balas. Sebaliknya, saya mengenal pasti jurang dalam pengetahuan saya dan mula berusaha bersungguh-sungguh untuk menutupnya. Saya hanya berjaya menjawab soalan tentang Java Core (koleksi, pengecualian, OOP, dll.). Semasa masih di temuduga, saya tahu bahawa saya gagal, tetapi saya masih kecewa kerana tidak menerima sebarang maklum balas. Sebaliknya, saya mengenal pasti jurang dalam pengetahuan saya dan mula berusaha bersungguh-sungguh untuk menutupnya. Saya hanya berjaya menjawab soalan tentang Java Core (koleksi, pengecualian, OOP, dll.). Semasa masih di temuduga, saya tahu bahawa saya gagal, tetapi saya masih kecewa kerana tidak menerima sebarang maklum balas. Sebaliknya, saya mengenal pasti jurang dalam pengetahuan saya dan mula berusaha bersungguh-sungguh untuk menutupnya.Saya mendapat pekerjaan sebulan selepas temu duga saya gagal. Ngomong-ngomong, saya menemui pembukaan kerja dalam perbincangan tentang CodeGym ( CodeGym ialah versi bahasa Rusia CodeGym — nota editor). Pertama, terdapat temu bual Skype dengan seorang perekrut (ia berlangsung kira-kira 2 jam). Mereka bertanya tentang Java Core, pengumpulan sampah (sekarang saya tahu cara ia berfungsi), pangkalan data dan struktur data. Penemuduga meminta saya berkongsi skrin saya dan menulis kalkulator. Saya hampir menangis kegembiraan, kerana saya telah menulis kalkulator hanya seminggu sebelumnya. Yakin dengan diri sendiri, saya memulakan tugas. Tetapi sama ada kerana keterujaan saya atau atas sebab lain, saya terlupa sebahagian daripada algoritma. Skrin saya telah dikongsi. Saya takut untuk berunding dengan Google. Nasib baik, saya mempunyai telefon bimbit saya, yang menyelamatkan pantat saya. Keesokan harinya, mereka memanggil temu duga secara peribadi dan beberapa hari kemudian saya menerima tawaran. Ia bukan jawatan rasmi. Peranan saya ialah perantis kepada pemilik tunggal. Kami menulis perkhidmatan untuk perancangan acara, menjual tiket, dll. Saya masih ingat hari pertama saya bekerja. Bos saya mengambil masa 15 minit untuk menerangkan perkara yang perlu dilakukan. "Adakah semuanya jelas?" dia tanya. "Hmm, tidak juga. Boleh awak ulangi sekali lagi?" Saya bertanya dengan penuh kebimbangan. Bos menerangkan segala-galanya sekali lagi. "Sekarang sudah jelas?" "Ya, sekarang sudah." Sebenarnya, saya tidak faham APA-APA. Tetapi saya takut untuk meminta penjelasan lain. Saya rasa sesiapa yang bekerja boleh memahaminya. Tugas itu dimulakan untuk mengalihkan dari Thymeleaf ke AngularJS. Nasib baik, saya menemui sebahagian daripada kod siap dan menggunakannya sebagai contoh perkara yang perlu dilakukan. Saya tidak faham bagaimana ia berfungsi, tetapi saya menyelesaikan tugasan itu. Saya kemudiannya diberikan tugasan yang berkaitan secara langsung dengan bahagian belakang. Hanya selepas pengalaman praktikal dengan Spring, saya mula memahami apa yang saya baca dalam "Spring for Professionals". Saya bekerja di sana selama 8 bulan dan kemudian berpindah ke bandar lain, di mana saya cepat mendapat pekerjaan rasmi, bekerja selama 2 tahun dan menukar gelaran saya daripada "junior" kepada "peringkat pertengahan" sepanjang perjalanan. Kemudian saya menghadapi hakikat bahawa pekerjaan saya telah menjadi rutin dan tidak memberi saya setitik kesenangan. Jadi saya berehat sebentar. Untuk menghentikan jari saya daripada atrofi semasa rehat saya, saya memutuskan untuk mencuba tangan saya dalam bidang lain: pembangunan permainan. Lebih khusus lagi, pembangunan permainan mudah alih, mengambil Android, kerana saya sudah tahu Java. Dan itulah yang saya akan bincangkan secara terperinci sekarang. Hanya selepas pengalaman praktikal dengan Spring, saya mula memahami apa yang saya baca dalam "Spring for Professionals". Saya bekerja di sana selama 8 bulan dan kemudian berpindah ke bandar lain, di mana saya cepat mendapat pekerjaan rasmi, bekerja selama 2 tahun dan menukar gelaran saya daripada "junior" kepada "peringkat pertengahan" sepanjang perjalanan. Kemudian saya menghadapi hakikat bahawa pekerjaan saya telah menjadi rutin dan tidak memberi saya setitik kesenangan. Jadi saya berehat sebentar. Untuk menghentikan jari saya daripada atrofi semasa rehat saya, saya memutuskan untuk mencuba tangan saya dalam bidang lain: pembangunan permainan. Lebih khusus lagi, pembangunan permainan mudah alih, mengambil Android, kerana saya sudah tahu Java. Dan itulah yang saya akan bincangkan secara terperinci sekarang. Hanya selepas pengalaman praktikal dengan Spring, saya mula memahami apa yang saya baca dalam "Spring for Professionals". Saya bekerja di sana selama 8 bulan dan kemudian berpindah ke bandar lain, di mana saya cepat mendapat pekerjaan rasmi, bekerja selama 2 tahun dan menukar gelaran saya daripada "junior" kepada "peringkat pertengahan" sepanjang perjalanan. Kemudian saya menghadapi hakikat bahawa pekerjaan saya telah menjadi rutin dan tidak memberi saya setitik kesenangan. Jadi saya berehat sebentar. Untuk menghentikan jari saya daripada atrofi semasa rehat saya, saya memutuskan untuk mencuba tangan saya dalam bidang lain: pembangunan permainan. Lebih khusus lagi, pembangunan permainan mudah alih, mengambil Android, kerana saya sudah tahu Java. Dan itulah yang saya akan bincangkan secara terperinci sekarang. di mana saya cepat mendapat pekerjaan rasmi, bekerja selama 2 tahun dan menukar gelaran saya daripada "junior" kepada "peringkat pertengahan" sepanjang perjalanan. Kemudian saya menghadapi hakikat bahawa pekerjaan saya telah menjadi rutin dan tidak memberi saya setitik kesenangan. Jadi saya berehat sebentar. Untuk menghentikan jari saya daripada atrofi semasa rehat saya, saya memutuskan untuk mencuba tangan saya dalam bidang lain: pembangunan permainan. Lebih khusus lagi, pembangunan permainan mudah alih, mengambil Android, kerana saya sudah tahu Java. Dan itulah yang saya akan bincangkan secara terperinci sekarang. di mana saya cepat mendapat pekerjaan rasmi, bekerja selama 2 tahun dan menukar gelaran saya daripada "junior" kepada "peringkat pertengahan" sepanjang perjalanan. Kemudian saya menghadapi hakikat bahawa pekerjaan saya telah menjadi rutin dan tidak memberi saya setitik kesenangan. Jadi saya berehat sebentar. Untuk menghentikan jari saya daripada atrofi semasa rehat saya, saya memutuskan untuk mencuba tangan saya dalam bidang lain: pembangunan permainan. Lebih khusus lagi, pembangunan permainan mudah alih, mengambil Android, kerana saya sudah tahu Java. Dan itulah yang saya akan bincangkan secara terperinci sekarang. Saya memutuskan untuk mencuba bidang lain: pembangunan permainan. Lebih khusus lagi, pembangunan permainan mudah alih, mengambil Android, kerana saya sudah tahu Java. Dan itulah yang saya akan bincangkan secara terperinci sekarang. Saya memutuskan untuk mencuba bidang lain: pembangunan permainan. Lebih khusus lagi, pembangunan permainan mudah alih, mengambil Android, kerana saya sudah tahu Java. Dan itulah yang saya akan bincangkan secara terperinci sekarang.Pasukan saya. Secara ringkasnya, saya telah mengumpulkan pasukan kecil 4 orang (termasuk saya): 2 pembangun, 1 pereka permainan dan 1 jurutera bunyi. Oleh kerana tiada seorang pun dalam pasukan yang mempunyai pengalaman dalam pembangunan permainan, dan kerana masa percutian saya terhad, kami memutuskan untuk melaksanakan projek mudah yang kami pasti akan dapat menyelesaikannya. Dan begitulah kami melakukannya! Pada mulanya, tarikh akhir ialah 15 November, tetapi seperti yang anda tahu, menyelesaikan projek mengikut jadual adalah salah. Jadi, kami menyelesaikannya lewat dua minggu. Tindanan teknologi kami terdiri daripada Java 8 dan libGDX.

Pembangunan

Pembangunan bermula pada 17 Oktober. Secara keseluruhan, kami menghabiskan 45 hari di mana:
  1. Kami belajar cara menggunakan libGDX.
  2. Kami menulis kod.
  3. Kami mencipta grafik.
  4. Kami mencipta muzik.
Sesiapa yang telah melihat permainan itu mungkin bertanya, "Mengapa ia mengambil masa yang lama? Permainan ini sangat mudah." Ya, itu benar, dan tepatnya, bahagian pembangunan (menulis kod) mengambil masa kira-kira satu setengah minggu. Selebihnya masa dibahagikan antara:
  1. Menguasai cara menggunakan enjin permainan.
  2. Melukis dan melukis semula karya seni.
  3. Menulis muzik.
  4. Mencari bunyi di https://freesound.org .
  5. Membaca timbunan artikel tentang cara mempromosikan permainan.
Kami juga mengalami detik-detik "masa rehat" atas pelbagai sebab: seseorang menjalani peperiksaan, orang lain menjalani ujian solekan, dsb. Kami pastinya boleh mengaitkan satu setengah minggu atau lebih kepada masa rehat. Sedikit masa juga dihabiskan untuk "perdebatan": idea baharu tentang perkara yang perlu ditambahkan pada permainan muncul hampir setiap hari, jadi kami berdebat: "itu berlebihan," "itu tidak sesuai," dll. Kami membuang banyak idea, sebagai contoh, menambah lipas berlari yang boleh dihancurkan untuk mendapatkan mata tambahan: pada pendapat saya, salah satu perkara yang paling sukar ialah memutuskan terlebih dahulu apa yang akan ada dalam permainan dan mematuhi rancangan tanpa cuba menambah "hanya satu lagi "ciri. Begitulah 45 hari ini terkumpul. Satu prototaip permainan telah siap selepas seminggu setengah. Dalam tempoh ini, kami benar-benar tidak mempunyai sebarang grafik, Pada mulanya, terdapat ... - 2Permainan ini sangat mudah dari segi teknikal. Kami tidak perlu menggunakan box2d (enjin fizik). Kami boleh mengendalikan perlanggaran dan mengira hipotenus sendiri. Perkara yang paling menarik yang akan saya ketengahkan ialah:
  1. Pada mulanya, semua elemen permainan dijana secara rawak. Dalam erti kata lain, kami meletakkan penyedia (lubang hitam, gunting, bintang ninja, plumbum pensel, hati) ke dalam tatasusunan, mendapat pembekal rawak, mendapat elemen dengan koordinat rawak. Ia menjadi jelas dengan cepat bahawa pendekatan ini "sangat tidak bagus". Rakan yang mengambil bahagian dalam ujian memberitahu kami perkara yang sama, mengesyorkan penggunaan templat. Bagi mereka yang terlibat dalam pembangunan permainan, ini mungkin penyelesaian yang jelas. Tetapi kerana kami adalah pendatang baru dalam bidang itu, ia adalah nasihat yang sangat praktikal untuk kami.

    Jadi kami mencipta beberapa templat: lembah gunting; petunjuk pensel — ia agak keren untuk mengumpulnya dengan pantas (whoosh, whoosh, whoosh dengan jari anda); dan satu lagi templat yang saya tidak tahu untuk memanggil apa — saya hanya akan memberitahu anda apa yang kami namakan kelas dalam kod kami: StraightForwardPattern.

    Pada mulanya, terdapat ... - 3

    Templat ini telah menambah baiknya, tetapi entah bagaimana ia menjadi terlalu boleh diramal. Itulah sebabnya kami menambah satu lagi: templat rawak. Dalam erti kata lain, kami kini mempunyai beberapa templat "statik" dan satu templat rawak (masukkan meme "seimbang sempurna" di sini).

  2. Inilah masalah utama yang kami hadapi. LibGDX memanggil kaedah render (float delta) dalam gelung tak terhingga. Di sinilah semua elemen dilukis. Garis pensil dilukis seperti berikut: kami mendapat koordinat jari dan melukis tekstur di sana. Jadi, jika kita menggerakkan jari kita merentasi skrin dengan cepat, maka garisan itu akan mempunyai "jurang" disebabkan oleh milisaat antara panggilan ke kaedah render(delta).

    Penyelesaiannya agak mudah: kami mengingati koordinat terakhir di mana tekstur dilukis, dapatkan koordinat seterusnya, dan jika jarak antara mereka lebih daripada X dan jari belum dilepaskan, maka kami mengisi jurang itu. Pada mulanya, kami fikir pilihan ini mungkin tidak berfungsi — garisan akan berbentuk sudut. Tetapi ketakutan kami tidak berasas, semuanya berfungsi sebagaimana mestinya.

Mengenai permainan

Permainan ini tidak mendakwa unik, tetapi ia agak bagus dan boleh menarik pengguna masuk. Anda mengawal pensel, betul-betul melukis di atas kertas dan mengelak halangan — gunting, bintang ninja dan lubang hitam. Sementara itu, petunjuk pensel anda sudah habis dan anda perlu mengambil pensel kecil. Jika pensel anda hampir tamat sebelum anda mengumpul sedikit pensel, anda boleh mengambil sekeping cermin. Selama beberapa saat, bukannya menggunakan pensel, ia akan dipulihkan, bagaimanapun, pada masa yang sama, kawalan dicerminkan — jika jari anda bergerak ke kiri, maka pensel dilukis ke kanan. Anda juga boleh mengambil hati yang akan membolehkan anda memukul halangan sekali dan terus hidup. Semakin lama anda menggerakkan pensel tanpa mengangkat jari anda, semakin tinggi kombo anda, yang bermaksud anda akan mengumpul mata dengan lebih cepat. Pada mulanya, terdapat ... - 4Kepantasan permainan juga meningkat secara beransur-ansur. Satu-satunya perkara yang hilang ialah burung marah. Pada mulanya, kami merancang untuk menamakan permainan Karan Dash (transliterasi perkataan Rusia untuk pensel ialah karandash — ha! faham?), tetapi kemudiannya kami mengubah fikiran kami dan menetap di Pencil Dash. Kami melakukan ini kerana permainan kata yang anggun ini hanya akan difahami oleh penonton berbahasa Rusia. Kami mengeluarkan permainan itu beberapa hari lalu dan kini mempromosikannya. Di sini juga, tiada seorang pun dalam pasukan yang mempunyai pengalaman. Kami memperoleh semua pengetahuan kami tentang promosi permainan daripada pelbagai artikel. Kami menerbitkan maklumat tentang permainan di pelbagai laman web/forum secara percuma. Saluran berbayar kami termasuk pengiklanan pada 4pd, pengiklanan dengan seorang blogger, beberapa siaran dalam kumpulan awam di VKontakte dan pengiklanan AdMob. Dengan cara ini, siaran ini juga merupakan sebahagian daripada promosi kami, jadi dengan kebenaran daripada pentadbiran laman web, saya sertakan pautan ke permainan di sini. Anda boleh mencari permainan di Google Play di sini . Saya akan berterima kasih jika anda akan memasangnya (mungkin anda akan menyukainya!), dan jika anda akan meninggalkan rating, saya berjanji untuk menamakan seorang kanak-kanak dengan nama anda! :) Pada mulanya, terdapat ... - 6
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION