JavaRush /Java Blog /Random-ID /Pada awalnya ada JavaRush
Марат Каджаев
Level 20
Санкт-Петербург

Pada awalnya ada JavaRush

Dipublikasikan di grup Random-ID
Masa percobaan pertama saya berakhir 3 tahun yang lalu, tetapi saya baru punya waktu untuk menulis artikel. Di universitas saya menghabiskan 1 tahun di fakultas yang berbeda: semester pertama saya belajar menjadi manajer, semester kedua saya pindah ke rekayasa perangkat lunak. Saya berharap mereka akan mengajari saya cara membuat program, tetapi saya salah, jadi saya mengambil dokumen tersebut dan memutuskan untuk mempelajari semuanya sendiri. Satu-satunya hal yang saya syukuri kepada guru adalah dia menyarankan saya untuk memulai dengan buku Stephen Prat “The C Programming Language.” Buku yang sangat bagus dengan banyak masalah praktis. Buku ini memakan waktu sekitar 2 bulan, setelah itu saya bertemu JR di grup teman dan kami berangkat. Awalnya saya berencana menjadi pengembang Android, namun selama proses pembelajaran backend terasa lebih menarik bagi saya. Omong-omong, pelatihannya memakan waktu 3 bulan, di mana saya mencapai level 20, setelah itu saya memutuskan untuk mencoba mencari pekerjaan. Pertama-tama, saya pindah ke kota lain, karena... Tidak ada lowongan untuk pengembang Java junior di tambang. Saya menemukan sebuah perusahaan, menjawab, menerima tugas tes, yang diberi waktu seminggu untuk menyelesaikannya. Penting untuk menulis aplikasi web sederhana menggunakan Hibernate, Servlet\JSP dan MySQL. Dari semua kata tersebut, saya hanya mengetahui bahwa MySQL adalah database. Awalnya saya sangat kesal, bahkan saya memutuskan untuk mencari lowongan di beberapa KFC untuk saat ini, namun akhirnya saya memutuskan untuk berusaha memenuhi spesifikasi teknis - saya akan selalu punya waktu untuk mendapatkan pekerjaan di KFC. Saya melakukan tes tanpa henti sepanjang minggu dan berhasil. Saya kirim solusinya, tapi “jelek”, jadi saya buat ulang 4 kali lagi. Keputusan terakhir ternyata benar, namun ternyata developer sudah terlanjur direkrut dan rekrutmen selanjutnya akan dilakukan 3 bulan lagi. Astaga, oke. Selama 3 bulan berikutnya saya belajar html, css, js, sql dan php. Apa yang PHP lakukan di sini? Saya memerlukan bahasa sisi server yang dapat merespons permintaan dan sebagainya - servlet dan jsp tampak terlalu rumit bagi saya saat itu. Hasilnya adalah aplikasi web lengkap dengan antarmuka yang buruk, kode yang saya posting di github untuk portofolio saya. Tepat pada saat ini, 3 bulan telah berlalu dan mereka menulis surat kepada saya dari perusahaan yang sama dan memanggil saya untuk wawancara dan memberi saya tugas tes sederhana lainnya untuk pengetahuan SQL, yang saya selesaikan dalam beberapa jam. Orang yang saya ajak bicara tentang pekerjaan itu mengisyaratkan bahwa mereka akan bertanya tentang algoritme dan struktur data - Saya belum menguasai topik ini, tetapi ada 15 hari sebelum wawancara, sialnya kami para pembalap. Buku Robert Laforet "Struktur Data dan Algoritma di Java" membantu saya. Saya tidak punya waktu untuk membaca dan memahami semuanya dalam dua minggu, tapi saya masih belajar banyak hal baru. Dan kemudian hari wawancara tiba, saya tiba pada waktu yang ditentukan, 2 orang pria menemui saya dan wawancara dimulai. Mengatakan bahwa aku khawatir adalah sebuah pernyataan yang meremehkan; suaraku bahkan bergetar. Mereka menanyakan segala hal kecuali algoritma dan struktur data. Mereka bertanya tentang Spring, DI, IoC, Hibernate, cara kerja JVM, cara kerja GC - saya tidak menjawab satu pun pertanyaan ini. Saya hanya menjawab pertanyaan tentang Java Core (koleksi, pengecualian, OOP, dll.). Saat wawancara, saya menyadari bahwa saya telah gagal, tetapi tetap saja mengecewakan karena tidak menerima tanggapan apa pun. Namun saya mengidentifikasi kesenjangan dalam pengetahuan dan mulai rajin menutupnya. Saya menemukan pekerjaan sebulan setelah wawancara yang gagal. Omong-omong, saya menemukan lowongan tersebut dalam diskusi JavaRush. Pertama ada wawancara Skype dengan perekrut (berlangsung sekitar 2 jam). Mereka bertanya tentang Java Core, GC (sekarang saya tahu cara kerjanya), database, struktur data. Kemudian pewawancara meminta saya untuk membagikan layar dan menulis kalkulator. Saya hampir berteriak kegirangan karena saya menulis kalkulator seminggu sebelumnya. Percaya diri, saya memulai tugas itu, tetapi karena kegembiraan, atau karena alasan lain saya lupa sebagian dari algoritmanya. Layarnya dibagikan - menakutkan untuk membuka Google. Untungnya saya punya ponsel yang bisa menyelamatkan saya. Keesokan harinya mereka menelepon saya untuk wawancara langsung dan beberapa hari kemudian saya menerima tawaran.
Pada awalnya ada JavaRush - 1
Pekerjaan itu tidak resmi, saya berperan sebagai magang bagi seorang pengusaha perorangan. Kami menulis layanan untuk membuat acara, menjual tiket, dan sebagainya. Saya ingat hari pertama saya bekerja - pengusaha perorangan menghabiskan 15 menit untuk menjelaskan apa yang perlu dilakukan. - Nah, apakah semuanya jelas? - tanya IP - Mmm, tidak juga, bisakah kita melakukannya sekali lagi? – Aku bertanya dengan sangat khawatir. IP menjelaskan semuanya lagi. - Sekarang sudah jelas? - Sekarang iya. Faktanya, saya tidak mengerti APA PUN. Tapi saya takut untuk meminta penjelasan lagi - saya rasa setiap orang yang mendapat pekerjaan akan memahami saya. Inti dari tugasnya adalah menulis ulang dari thymeleaf ke AngularJS. Untungnya, saya menemukan bagian dari kode yang sudah jadi dan mengikuti contoh dan melakukan hal yang sama. Saya tidak mengerti cara kerjanya saat itu, tetapi saya berhasil mengatasi tugas tersebut. Kemudian datanglah tugas-tugas yang berhubungan langsung dengan bagian backend. Hanya setelah pengalaman praktis dengan Spring saya mulai memahami apa yang tertulis dalam buku “Spring for Professionals”. Saya bekerja di sana selama 8 bulan, setelah itu saya pindah ke kota lain, di mana saya segera mendapatkan pekerjaan resmi, bekerja selama 2 tahun, dan pada saat yang sama mengubah jabatan saya dari “Junior” menjadi “Menengah”. Kini saya dihadapkan pada kenyataan bahwa pekerjaan sudah menjadi rutinitas dan tidak membawa kesenangan sedikit pun. Oleh karena itu, saat ini saya sedang istirahat, dan untuk mencegah jari-jari saya berhenti berkembang selama istirahat, saya memutuskan untuk mencoba bidang lain - pengembangan game. Yaitu, pengembangan game seluler, sebagai permulaan, Android, karena... Saya tahu Jawa. Saya akan memberi tahu Anda tentang ini sekarang secara mendetail. Tentang kami Dalam waktu singkat, sebuah tim kecil yang terdiri dari 4 orang (termasuk saya) berkumpul: 2 pengembang, 1 desainer game, 1 sound engineer. Karena Tidak ada seorang pun di tim yang memiliki pengalaman di bidang pengembangan game dan waktu istirahat saya terbatas, kami memutuskan untuk mengimplementasikan proyek sederhana yang pasti akan kami selesaikan sampai akhir. Mereka melakukannya! Awalnya tenggat waktu adalah 15 November, namun seperti yang Anda ketahui, menyelesaikan sebuah proyek sesuai tenggat waktu semula adalah sebuah dosa. Jadi kami menyelesaikannya dua minggu kemudian. Menurut itu Tumpukannya adalah: Java 8 dan libGDX.

Tentang perkembangan

Awal pengembangan dapat dianggap 17 Oktober. Total kami menghabiskan 45 hari, di mana:
  1. belajar bekerja dengan libGDX;
  2. menulis kodenya;
  3. menggambar grafik;
  4. membuat musik;
Mereka yang sudah melihat gamenya mungkin bertanya-tanya - kenapa lama sekali, gamenya sederhana? Ya, ini benar, dan lebih tepatnya, pengembangannya sendiri (penulisan kode) memakan waktu sekitar satu setengah minggu. Sisa waktunya dapat dibagi antara:
  1. menguasai mesin;
  2. menggambar dan kemudian menggambar ulang;
  3. menulis musik;
  4. mencari suara di https://freesound.org ;
  5. membaca banyak artikel tentang cara mempromosikan game
Ditambah lagi, ada saat-saat “downtime” karena berbagai alasan - ada yang ujian, ada yang mengulang, dll. Anda dapat dengan aman menghabiskan satu setengah minggu, atau bahkan lebih, untuk “waktu henti”. Bagian lain dari waktu dihabiskan untuk “debat”: gagasan tentang apa yang harus ditambahkan ke dalam permainan muncul hampir setiap hari, jadi ada perselisihan tentang “ini akan berlebihan”, “ini tidak cocok”, dll. Oleh karena itu, kami meninggalkan banyak ide, misalnya menambahkan kecoak berlari yang dapat Anda hancurkan dan dapatkan tambahannya. poin: Pada awalnya ada JavaRush - 2Secara umum, salah satu hal tersulit, menurut saya, adalah memutuskan terlebih dahulu apa yang akan ada dalam permainan dan tetap berpegang pada rencana itu tanpa mencoba menambahkan fitur “lain”. Beginilah cara kami mengumpulkan 45 hari ini. Prototipe game siap setelah satu setengah minggu. Selama periode ini, kami belum benar-benar memiliki grafik, jadi kami mengambil beberapa hal dari domain publik (misalnya, kami meminjam selembar kertas latar belakang dari Doodle Jump), dan beberapa lainnya kami buat sendiri dengan cat. Pada awalnya ada JavaRush - 3Permainan ini secara teknis sangat sederhana - kami bahkan tidak perlu menggunakan box2d (mesin fisika), kami dapat menangani tabrakan dan menghitung sendiri sisi miringnya. Dari poin yang paling menarik, saya akan soroti yang berikut ini.
  1. Awalnya, semua elemen dalam game dihasilkan secara acak. Itu. kami memiliki penyedia lubang hitam, gunting, senjata rahasia, batang, hati - kami menempatkannya dalam array, lalu kami mengambil penyedia acak dan mendapatkan elemen dengan koordinat acak. Dengan cepat menjadi jelas bahwa pendekatan ini “tidak terlalu baik”; teman-teman kami yang mengambil bagian dalam pengujian memberi tahu kami hal yang sama dan menyarankan kami untuk menggunakan templat. Tentunya bagi mereka yang terlibat dalam pengembangan game ini adalah solusi yang jelas, tapi... Kami baru di bidang ini dan ini adalah saran yang sangat bagus untuk kami.

    Maka muncullah beberapa pola: lembah gunting; batang diagonal - cukup menyenangkan untuk merakitnya dengan kecepatan tinggi (desir-desir-desir dengan jari Anda); dan satu template lagi, saya tidak tahu harus menyebutnya apa - saya akan menyebutnya apa yang disebut kelas dalam kode: StraightForwardPattern.

    Pada awalnya ada JavaRush - 4

    Menjadi lebih menyenangkan dengan template, tapi terlalu mudah ditebak atau semacamnya. Oleh karena itu, acak yang sama menjadi templat lain. Itu. Sekarang kami memiliki templat “statis” dan satu templat acak. (ini meme tentang keseimbangan sempurna).

  2. Masalah utama yang kami temui adalah ini. LibGDX memanggil metode render(float delta) dalam loop tanpa akhir, di mana semua rendering elemen benar-benar terjadi. Kami menggambar garis pensil dengan cara berikut: kami mengambil koordinat jari dan menempatkan tekstur di sana. Jadi, jika kita menggerakkan jari kita melintasi layar dengan sangat cepat, “lubang” akan terbentuk karena kita berada dalam milidetik ketika metode render(delta) sudah bekerja dan belum dipanggil lagi. Masalahnya diselesaikan dengan cukup sederhana - kita mengingat koordinat terakhir di mana tekstur digambar, kita mendapatkan koordinat berikutnya, dan jika jarak antara keduanya lebih besar dari X dan jari tidak dilepaskan, kita mengisi celah ini. Pada awalnya kami mengira opsi ini mungkin tidak berhasil - garisnya akan bersudut, tetapi ketakutan kami sia-sia - semuanya berjalan sebagaimana mestinya.

    Sebenarnya tentang permainan

    Gameplaynya tidak berpura-pura unik, tapi cukup bagus dan bisa membuat ketagihan. Anda mengontrol pensil, menggambar di atas kertas, menghindari rintangan - gunting, senjata rahasia, lubang hitam. Dalam hal ini, inti pensil berakhir dan Anda perlu mengambil pensil kecil. Jika batangnya habis dan masih belum ada pensil, Anda dapat mengambil pecahan cermin. Ini akan memiliki efek selama beberapa detik - alih-alih menyia-nyiakan batangnya, itu akan dipulihkan, tetapi pada saat yang sama kontrolnya menjadi cermin - Anda bergerak ke kiri, dan pensil menggambar ke kanan. Anda juga dapat mengambil hati yang memungkinkan Anda menghadapi rintangan satu kali dan tetap hidup. Semakin lama Anda menahannya tanpa mengangkat jari dari layar, semakin tinggi kombonya, yang meningkatkan kecepatan perolehan poin. Ditambah lagi kecepatan permainan meningkat secara bertahap. Kecuali Anda tidak bisa merampok Korovan. Pada awalnya ada JavaRush - 5Awalnya kami berencana menamai game tersebut Karan Dash (pensil, ahaha, ngerti kan?), tapi kemudian kami berubah pikiran dan memilih Pencil Dash. Motivasinya adalah permainan kata-kata yang elegan (menurut saya) ini hanya dapat dimengerti oleh penonton berbahasa Rusia. Kami merilis game ini beberapa hari yang lalu dan sekarang sedang mempromosikannya. Tidak ada seorang pun di tim yang memiliki pengalaman dalam hal ini; kami mengumpulkan semua pengetahuan tentang promosi dari berbagai artikel. Kami mempublikasikan informasi tentang game di berbagai situs/forum secara gratis. Sedangkan untuk channel berbayar, kami memesan iklan di 4PD, dari satu blogger, beberapa postingan di halaman publik VK dan AdMob. Omong-omong, postingan ini juga merupakan bagian dari promosi, jadi dengan izin dari administrasi saya meninggalkan link ke game tersebut di sini. Halaman permainan di Google Play: klik Saya juga akan meninggalkan tautan ke grup VK kami, tempat Anda dapat meninggalkan ulasan/saran dan tidak ketinggalan pembaruan, klik Saya akan berterima kasih jika Anda menginstalnya (bagaimana jika Anda menyukainya?), dan untuk review dengan rating saya berjanji akan menyalakan lilin untuk kesehatan Anda! Ajukan pertanyaan, jika ada, saya akan menjawab.Pada awalnya ada JavaRush - 6

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