CodeGym/Java Blog/Acak/Pada awalnya, ada ...
John Squirrels
Level 41
San Francisco

Pada awalnya, ada ...

Dipublikasikan di grup Acak
anggota
Pada awalnya, ada ... - 1 Masa percobaan pekerjaan pertama saya berakhir 3 tahun yang lalu, tetapi baru sekarang saya menemukan waktu untuk menulis artikel. Saya menghabiskan satu tahun di berbagai departemen di universitas saya: di semester pertama, saya belajar manajemen, dan di semester kedua, saya beralih ke rekayasa perangkat lunak. Saya berharap mereka akan mengajari saya cara memprogram, tetapi saya salah. Jadi, saya mengumpulkan materi dan memutuskan untuk mempelajari semuanya sendiri. Satu-satunya alasan saya berterima kasih kepada guru saya adalah karena dia merekomendasikan agar saya mulai dengan ebook Stephen Pratt "Bahasa Pemrograman C". Ini benar-benar buku yang bagus dengan banyak latihan praktis. Saya menghabiskan sekitar 2 bulan untuk buku itu, setelah itu saya menemukan kursus Java online ini di grup teman dan begitulah dimulainya. Awalnya, saya berencana untuk menjadi pengembang Android, tetapi bagian belakangnya tampak lebih menarik bagi saya seiring kemajuan saya dalam pembelajaran. Ngomong-ngomong, saya butuh 3 bulan belajar untuk mencapai Level 20, setelah itu saya memutuskan untuk mencoba mencari pekerjaan. Urutan pertama bisnis adalah pindah ke kota lainkarena saya tidak memiliki lowongan untuk pengembang junior Java. Saya menemukan sebuah perusahaan, melamar, dan menerima tugas ujian, yang diberikan waktu seminggu untuk saya selesaikan. Saya harus menulis aplikasi web sederhana menggunakan Hibernate, Servlet/JSP dan MySQL. Melihat semua istilah tersebut, saya hanya tahu bahwa MySQL adalah sebuah database. Awalnya, saya sangat kecewa. Saya bahkan memutuskan untuk mencari lowongan pekerjaan di beberapa KFC, tetapi kemudian saya memutuskan untuk mencoba tugas ujian. Lagi pula, saya selalu bisa mendapatkan pekerjaan di KFC. Saya bekerja tanpa henti sepanjang minggu dan berhasil menyelesaikan tes. Saya mengirimkan solusi saya, tetapi "tidak bagus", jadi saya merevisinya 4 kali lagi. Solusi terakhir saya ternyata benar, tetapi posisi sudah terisi dan aplikasi tambahan tidak akan diterima selama 3 bulan. Apa yang akan kamu lakukan, kan? Selama 3 bulan ke depan, Saya belajar HTML, CSS, JS, SQL dan PHP. Mengapa PHP? Saya membutuhkan bahasa server yang akan menanggapi permintaan dan semacamnya. Pada saat itu, servlet dan jsp terlihat terlalu rumit. Pada akhirnya, saya menghasilkan aplikasi web lengkap dengan antarmuka yang buruk. Saya menerbitkan kode di GitHub untuk portofolio saya. Saat ini, 3 bulan telah berlalu dan perusahaan yang sama menghubungi saya lagi dan mengundang saya untuk wawancara, memberikan tugas sederhana lainnya untuk menguji pengetahuan saya tentang SQL, yang berhasil saya selesaikan dalam beberapa jam. Orang yang saya ajak bicara tentang pekerjaan mengisyaratkan bahwa mereka akan bertanya tentang algoritme dan struktur data - topik yang belum sempat saya kuasai. Konon, ada 15 hari sebelum wawancara. Saya mengerti! Buku Robert Lafore "Data Structures & Algorithms in Java" membantu saya. Saya tidak' Saya tidak punya waktu untuk membaca dan memahami semuanya dalam dua minggu, tetapi saya masih belajar banyak. Dan kemudian hari wawancara tiba. Saya tiba pada waktu yang ditentukan. Dua pria menyapa saya dan wawancara dimulai. Mengatakan saya khawatir akan menjadi pernyataan yang meremehkan. Suaraku bergetar. Mereka bertanya tentang segala hal kecuali algoritma dan struktur data. Mereka bertanya tentang Spring, DI, IoC, Hibernate, cara kerja JVM, cara kerja pengumpul sampah - saya tidak dapat menjawab satu pun dari pertanyaan ini. Saya hanya berhasil menjawab pertanyaan tentang Java Core (koleksi, pengecualian, OOP, dll.). Saat masih dalam wawancara, saya tahu bahwa saya gagal, tetapi saya masih kecewa karena tidak menerima umpan balik. Sebaliknya, saya mengidentifikasi celah dalam pengetahuan saya dan mulai bekerja dengan rajin untuk menutupnya. Dan kemudian hari wawancara tiba. Saya tiba pada waktu yang ditentukan. Dua pria menyapa saya dan wawancara dimulai. Mengatakan saya khawatir akan menjadi pernyataan yang meremehkan. Suaraku bergetar. Mereka bertanya tentang segala hal kecuali algoritma dan struktur data. Mereka bertanya tentang Spring, DI, IoC, Hibernate, cara kerja JVM, cara kerja pengumpul sampah - saya tidak dapat menjawab satu pun dari pertanyaan ini. Saya hanya berhasil menjawab pertanyaan tentang Java Core (koleksi, pengecualian, OOP, dll.). Saat masih dalam wawancara, saya tahu bahwa saya gagal, tetapi saya masih kecewa karena tidak menerima umpan balik. Sebaliknya, saya mengidentifikasi celah dalam pengetahuan saya dan mulai bekerja dengan rajin untuk menutupnya. Dan kemudian hari wawancara tiba. Saya tiba pada waktu yang ditentukan. Dua pria menyapa saya dan wawancara dimulai. Mengatakan saya khawatir akan menjadi pernyataan yang meremehkan. Suaraku bergetar. Mereka bertanya tentang segala hal kecuali algoritma dan struktur data. Mereka bertanya tentang Spring, DI, IoC, Hibernate, cara kerja JVM, cara kerja pengumpul sampah - saya tidak dapat menjawab satu pun dari pertanyaan ini. Saya hanya berhasil menjawab pertanyaan tentang Java Core (koleksi, pengecualian, OOP, dll.). Saat masih dalam wawancara, saya tahu bahwa saya gagal, tetapi saya masih kecewa karena tidak menerima umpan balik. Sebaliknya, saya mengidentifikasi celah dalam pengetahuan saya dan mulai bekerja dengan rajin untuk menutupnya. Mengatakan saya khawatir akan menjadi pernyataan yang meremehkan. Suaraku bergetar. Mereka bertanya tentang segala hal kecuali algoritma dan struktur data. Mereka bertanya tentang Spring, DI, IoC, Hibernate, cara kerja JVM, cara kerja pengumpul sampah - saya tidak dapat menjawab satu pun dari pertanyaan ini. Saya hanya berhasil menjawab pertanyaan tentang Java Core (koleksi, pengecualian, OOP, dll.). Saat masih dalam wawancara, saya tahu bahwa saya gagal, tetapi saya masih kecewa karena tidak menerima umpan balik. Sebaliknya, saya mengidentifikasi celah dalam pengetahuan saya dan mulai bekerja dengan rajin untuk menutupnya. Mengatakan saya khawatir akan menjadi pernyataan yang meremehkan. Suaraku bergetar. Mereka bertanya tentang segala hal kecuali algoritma dan struktur data. Mereka bertanya tentang Spring, DI, IoC, Hibernate, cara kerja JVM, cara kerja pengumpul sampah - saya tidak dapat menjawab satu pun dari pertanyaan ini. Saya hanya berhasil menjawab pertanyaan tentang Java Core (koleksi, pengecualian, OOP, dll.). Saat masih dalam wawancara, saya tahu bahwa saya gagal, tetapi saya masih kecewa karena tidak menerima umpan balik. Sebaliknya, saya mengidentifikasi celah dalam pengetahuan saya dan mulai bekerja dengan rajin untuk menutupnya. Saya hanya berhasil menjawab pertanyaan tentang Java Core (koleksi, pengecualian, OOP, dll.). Saat masih dalam wawancara, saya tahu bahwa saya gagal, tetapi saya masih kecewa karena tidak menerima umpan balik. Sebaliknya, saya mengidentifikasi celah dalam pengetahuan saya dan mulai bekerja dengan rajin untuk menutupnya. Saya hanya berhasil menjawab pertanyaan tentang Java Core (koleksi, pengecualian, OOP, dll.). Saat masih dalam wawancara, saya tahu bahwa saya gagal, tetapi saya masih kecewa karena tidak menerima umpan balik. Sebaliknya, saya mengidentifikasi celah dalam pengetahuan saya dan mulai bekerja dengan rajin untuk menutupnya.Saya menemukan pekerjaan satu bulan setelah wawancara saya yang gagal. Omong-omong, saya menemukan lowongan pekerjaan dalam diskusi di CodeGym ( CodeGym adalah CodeGym versi bahasa Rusia — catatan editor). Pertama, ada wawancara Skype dengan perekrut (berlangsung sekitar 2 jam). Mereka bertanya tentang Java Core, pengumpulan sampah (sekarang saya tahu cara kerjanya), database, dan struktur data. Pewawancara meminta saya untuk membagikan layar saya dan menulis kalkulator. Saya hampir menangis kegirangan, karena saya baru saja menulis kalkulator seminggu sebelumnya. Percaya diri, saya memulai tugas. Tetapi entah karena kegembiraan saya atau karena alasan lain, saya lupa sebagian dari algoritme. Layar saya dibagikan. Saya takut berkonsultasi dengan Google. Untungnya, saya memiliki ponsel saya, yang menyelamatkan pantat saya. Keesokan harinya, mereka meminta wawancara langsung dan beberapa hari kemudian saya menerima tawaran. Itu bukan posisi resmi. Peran saya adalah magang untuk pemilik tunggal. Kami menulis layanan untuk perencanaan acara, penjualan tiket, dll. Saya ingat hari pertama saya bekerja. Bos saya membutuhkan waktu 15 menit untuk menjelaskan apa yang perlu dilakukan. "Apakah semuanya jelas?" Dia bertanya. "Hmm, tidak juga. Bisakah kamu mengulanginya sekali lagi?" tanyaku dengan penuh perhatian. Bos menjelaskan semuanya lagi. "Sudah jelas sekarang?" "Ya, sekarang." Sebenarnya, saya tidak mengerti APA SAJA. Tapi saya takut untuk meminta penjelasan lain. Saya pikir siapa pun yang dipekerjakan dapat memahaminya. Tugasnya bermuara pada porting dari Thymeleaf ke AngularJS. Untungnya, saya menemukan potongan kode yang telah selesai dan menggunakannya sebagai contoh tentang apa yang harus dilakukan. Saya tidak mengerti cara kerjanya, tetapi saya menyelesaikan tugas. Saya kemudian diberi tugas yang berhubungan langsung dengan backend. Hanya setelah pengalaman praktis dengan Spring saya mulai memahami apa yang saya baca di "Spring for Professionals". Saya bekerja di sana selama 8 bulan dan kemudian pindah ke kota lain, di mana saya segera mendapatkan pekerjaan resmi, bekerja selama 2 tahun dan mengubah gelar saya dari "junior" menjadi "menengah" di sepanjang jalan. Kemudian saya menghadapi kenyataan bahwa pekerjaan saya telah menjadi rutinitas dan tidak memberi saya kesenangan sedikitpun. Jadi saya istirahat. Untuk mencegah jari saya berhenti tumbuh selama istirahat, saya memutuskan untuk mencoba bidang lain: pengembangan game. Lebih khusus lagi, pengembangan game seluler, mengambil Android, karena saya sudah mengenal Java. Dan itulah yang akan saya bicarakan secara rinci sekarang. Hanya setelah pengalaman praktis dengan Spring saya mulai memahami apa yang saya baca di "Spring for Professionals". Saya bekerja di sana selama 8 bulan dan kemudian pindah ke kota lain, di mana saya segera mendapatkan pekerjaan resmi, bekerja selama 2 tahun dan mengubah gelar saya dari "junior" menjadi "menengah" di sepanjang jalan. Kemudian saya menghadapi kenyataan bahwa pekerjaan saya telah menjadi rutinitas dan tidak memberi saya kesenangan sedikitpun. Jadi saya istirahat. Untuk mencegah jari saya berhenti tumbuh selama istirahat, saya memutuskan untuk mencoba bidang lain: pengembangan game. Lebih khusus lagi, pengembangan game seluler, mengambil Android, karena saya sudah mengenal Java. Dan itulah yang akan saya bicarakan secara rinci sekarang. Hanya setelah pengalaman praktis dengan Spring saya mulai memahami apa yang saya baca di "Spring for Professionals". Saya bekerja di sana selama 8 bulan dan kemudian pindah ke kota lain, di mana saya segera mendapatkan pekerjaan resmi, bekerja selama 2 tahun dan mengubah gelar saya dari "junior" menjadi "menengah" di sepanjang jalan. Kemudian saya menghadapi kenyataan bahwa pekerjaan saya telah menjadi rutinitas dan tidak memberi saya kesenangan sedikitpun. Jadi saya istirahat. Untuk mencegah jari saya berhenti tumbuh selama istirahat, saya memutuskan untuk mencoba bidang lain: pengembangan game. Lebih khusus lagi, pengembangan game seluler, mengambil Android, karena saya sudah mengenal Java. Dan itulah yang akan saya bicarakan secara rinci sekarang. di mana saya dengan cepat menemukan pekerjaan resmi, bekerja selama 2 tahun dan mengubah gelar saya dari "junior" menjadi "menengah" di sepanjang jalan. Kemudian saya menghadapi kenyataan bahwa pekerjaan saya telah menjadi rutinitas dan tidak memberi saya kesenangan sedikitpun. Jadi saya istirahat. Untuk mencegah jari saya berhenti tumbuh selama istirahat, saya memutuskan untuk mencoba bidang lain: pengembangan game. Lebih khusus lagi, pengembangan game seluler, mengambil Android, karena saya sudah mengenal Java. Dan itulah yang akan saya bicarakan secara rinci sekarang. di mana saya dengan cepat menemukan pekerjaan resmi, bekerja selama 2 tahun dan mengubah gelar saya dari "junior" menjadi "menengah" di sepanjang jalan. Kemudian saya menghadapi kenyataan bahwa pekerjaan saya telah menjadi rutinitas dan tidak memberi saya kesenangan sedikitpun. Jadi saya istirahat. Untuk mencegah jari saya berhenti tumbuh selama istirahat, saya memutuskan untuk mencoba bidang lain: pengembangan game. Lebih khusus lagi, pengembangan game seluler, mengambil Android, karena saya sudah mengenal Java. Dan itulah yang akan saya bicarakan secara rinci sekarang. Saya memutuskan untuk mencoba bidang lain: pengembangan game. Lebih khusus lagi, pengembangan game seluler, mengambil Android, karena saya sudah mengenal Java. Dan itulah yang akan saya bicarakan secara rinci sekarang. Saya memutuskan untuk mencoba bidang lain: pengembangan game. Lebih khusus lagi, pengembangan game seluler, mengambil Android, karena saya sudah mengenal Java. Dan itulah yang akan saya bicarakan secara rinci sekarang.Kelompok ku. Singkatnya, saya telah membentuk tim kecil yang terdiri dari 4 orang (termasuk saya): 2 developer, 1 game designer, dan 1 sound engineer. Karena tidak ada seorang pun di tim yang memiliki pengalaman dalam pengembangan game, dan karena waktu liburan saya terbatas, kami memutuskan untuk mengimplementasikan proyek sederhana yang pasti dapat kami selesaikan. Dan kami melakukannya! Awalnya, batas waktunya adalah 15 November, tetapi seperti yang Anda ketahui, menyelesaikan proyek sesuai jadwal itu salah. Jadi, kami menyelesaikannya terlambat dua minggu. Tumpukan teknologi kami terdiri dari Java 8 dan libGDX.

Perkembangan

Pengembangan dimulai pada 17 Oktober. Secara total, kami menghabiskan 45 hari di mana:
  1. Kami belajar cara menggunakan libGDX.
  2. Kami menulis kode.
  3. Kami membuat grafik.
  4. Kami menciptakan musik.
Siapa pun yang pernah melihat game tersebut mungkin bertanya, "Mengapa lama sekali? Game ini sangat sederhana." Ya, itu benar, dan tepatnya, bagian pengembangan (menulis kode) memakan waktu sekitar satu setengah minggu. Sisa waktu dibagi antara:
  1. Menguasai cara menggunakan mesin game.
  2. Menggambar dan menggambar ulang karya seni.
  3. Menulis musik.
  4. Mencari suara di https://freesound.org .
  5. Membaca banyak artikel tentang cara mempromosikan game.
Kami juga mengalami saat-saat "waktu henti" karena berbagai alasan: seseorang menjalani ujian, orang lain menjalani tes make-up, dll. Kami pasti dapat mengaitkan satu setengah minggu atau lebih dengan waktu henti. Beberapa waktu juga dihabiskan untuk "debat": ide-ide baru tentang apa yang harus ditambahkan ke dalam game muncul hampir setiap hari, jadi kami berdebat: "itu berlebihan", "itu tidak cocok", dll. misalnya, menambahkan kecoak lari yang dapat dihancurkan untuk mendapatkan poin ekstra: menurut saya, salah satu hal yang paling sulit adalah memutuskan terlebih dahulu apa yang akan ada di dalam game dan tetap berpegang pada rencana tanpa mencoba menambahkan "hanya satu lagi " fitur. Begitulah akumulasi 45 hari ini. Prototipe permainan sudah siap setelah satu setengah minggu. Selama periode ini, kami benar-benar tidak memiliki grafik apa pun, Pada awalnya, ada ... - 2Gim ini sangat sederhana dalam arti teknis. Kami bahkan tidak perlu menggunakan box2d (mesin fisika). Kita dapat menangani tabrakan dan menghitung sisi miringnya sendiri. Poin paling menarik yang akan saya soroti adalah:
  1. Awalnya, semua elemen game dihasilkan secara acak. Dengan kata lain, kami menempatkan penyedia (lubang hitam, gunting, bintang ninja, ujung pensil, hati) ke dalam array, mendapatkan penyedia acak, mendapatkan elemen dengan koordinat acak. Menjadi jelas dengan cepat bahwa pendekatan ini "benar-benar tidak terlalu bagus". Teman yang berpartisipasi dalam pengujian memberi tahu kami hal yang sama, merekomendasikan penggunaan template. Bagi mereka yang terlibat dalam pengembangan game, ini mungkin solusi yang jelas. Tetapi karena kami adalah pendatang baru di lapangan, itu adalah saran yang sangat praktis bagi kami.

    Jadi kami membuat beberapa templat: lembah gunting; ujung pensil - cukup keren untuk mengumpulkannya dengan sangat cepat (wusssssss dengan jari Anda); dan satu lagi templat yang saya tidak tahu harus memanggil apa — saya hanya akan memberi tahu Anda apa yang kami beri nama kelas dalam kode kami: StraightForwardPattern.

    Pada awalnya, ada ... - 3

    Template ini memperbaikinya, tetapi entah bagaimana menjadi terlalu mudah diprediksi. Itu sebabnya kami menambahkan satu lagi: template acak. Dengan kata lain, kami sekarang memiliki beberapa templat "statis" dan satu templat acak (masukkan meme "seimbang sempurna" di sini).

  2. Inilah masalah utama yang kami temui. LibGDX memanggil metode render (float delta) dalam loop tak terbatas. Di sinilah semua elemen digambar. Garis pensil digambar sebagai berikut: kita mendapatkan koordinat jari dan menggambar tekstur di sana. Jadi, jika kita menggerakkan jari kita melintasi layar dengan sangat cepat, garis akan memiliki "celah" karena milidetik antara panggilan ke metode render(delta).

    Solusinya cukup sederhana: kita mengingat koordinat terakhir tempat tekstur digambar, mendapatkan koordinat berikutnya, dan jika jarak antara keduanya lebih dari X dan jari belum dilepas, maka kita mengisi celah tersebut. Pada awalnya, kami mengira opsi ini mungkin tidak berfungsi — garisnya akan bersudut. Tapi ketakutan kami tidak berdasar, semuanya berjalan sebagaimana mestinya.

Tentang permainan

Gameplaynya tidak mengklaim unik, tetapi cukup bagus dan dapat menarik pengguna. Anda mengontrol pensil, menggambar di atas kertas dan menghindari rintangan - gunting, bintang ninja, dan lubang hitam. Sementara itu, ujung pensil Anda hampir habis dan Anda perlu mengambil pensil kecil. Jika pensil Anda akan habis sebelum Anda mengumpulkan sedikit pensil, Anda dapat mengambil sepotong cermin. Selama beberapa detik, alih-alih menghabiskan ujung pensil, ujung pensil akan dipulihkan, namun, pada saat yang sama, kontrolnya dicerminkan - jika jari Anda bergerak ke kiri, maka pensil akan ditarik ke kanan. Anda juga dapat mengambil hati yang memungkinkan Anda menabrak rintangan sekali dan tetap hidup. Semakin lama Anda menggerakkan pensil tanpa mengangkat jari, semakin tinggi kombo Anda, yang berarti Anda akan mengumpulkan poin lebih cepat. Pada awalnya, ada ... - 4Kecepatan permainan juga meningkat secara bertahap. Satu-satunya hal yang hilang adalah angry birds. Awalnya, kami berencana menamai game tersebut Karan Dash (transliterasi dari kata Rusia untuk pensil adalah karandash — ha! Mengerti?), tetapi kemudian kami berubah pikiran dan memilih Pencil Dash. Kami melakukan ini karena permainan kata yang anggun ini hanya akan dipahami oleh audiens yang berbahasa Rusia. Kami merilis game ini beberapa hari yang lalu dan sekarang sedang mempromosikannya. Di sini, juga, tidak ada seorang pun di tim yang memiliki pengalaman. Kami memperoleh semua pengetahuan kami tentang promosi game dari berbagai artikel. Kami menerbitkan informasi tentang game di berbagai situs web/forum secara gratis. Saluran berbayar kami termasuk beriklan di 4pd, beriklan dengan satu blogger, beberapa posting di grup publik di VKontakte, dan iklan AdMob. Omong-omong, postingan ini juga merupakan bagian dari promosi kami, jadi dengan izin dari administrasi situs web, saya menyertakan tautan ke game tersebut di sini. Anda dapat menemukan game tersebut di Google Play di sini . Saya akan berterima kasih jika Anda mau menginstalnya (mungkin Anda akan menyukainya!), dan jika Anda akan memberikan peringkat, saya berjanji untuk menamai anak Anda dengan nama Anda! :) Pada awalnya, ada ... - 6
Komentar
  • Populer
  • Baru
  • Lama
Anda harus login untuk memberikan komentar
Halaman ini belum memiliki komentar