Berburu Wumpus atau pengalaman menulis game Android klasik

gambar

Pernahkah Anda mendengar tentang Vampus? Terlepas dari jawabannya - selamat datang di masa jabatannya!

Pada artikel ini saya ingin menceritakan kisah saya tentang membuat game untuk Android. Tergantung pada kompetensi pembaca, pengalaman, pemikiran dan keputusan yang saya sampaikan akan lebih atau kurang bermanfaat. Namun, saya harap cerita saya, setidaknya, akan menarik.

Isi


1. Pendahuluan
2. Pilihan dana
3. Gagasan proyek
4. Saya mencium bau WUMPUS
5. Dasar dasar-dasar - struktur proyek
6. Generasi labirin Vampus dan bekerja dengannya
7. Penyimpanan pesan game dan hasilnya ke pemain
8. Hasil pertama
9. Bahkan game kecil pun layak sejarah.
10. Transformasi Vampus dan hasil akhirnya
11. Kesimpulan

1. Pendahuluan


Isi

Pertama, beberapa kata tentang diri Anda. Pemrograman, sayangnya, bukan kegiatan utama saya, tetapi saya senang mencurahkan waktu luang saya untuk itu.

Untuk beberapa alasan, saya memilih cara membuat game mobile. Proyek saya sebelumnya untuk perangkat seluler dibuat di lingkungan Qt bersamaan dengan bahasa QML dan C ++. Saya sangat senang dari ketiganya, namun, menganalisis ide-ide saya, saya menyadari bahwa di masa depan akan terlalu banyak waktu dan usaha untuk menyelesaikan beberapa masalah dengan cara yang diketahui oleh saya. Oleh karena itu, memikirkan proyek berikutnya, saya memutuskan untuk menemukan alat pengembangan baru yang lebih cocok dan mendapatkan pengalaman dengan mereka.

2. Pilihan dana


Isi

Sebelumnya, saya hanya memperhatikan Android, dan dalam proyek baru saya memutuskan untuk berkonsentrasi pada OS ini, berkenalan dengan Android Studio, yang asli untuknya, coba Java baru untuk saya sendiri (dan di masa depan, jika Anda suka, juga menjanjikan Kotlin).

Saya belum pernah menggunakan AS atau Java sebelumnya, dan saya menghadapi pekerjaan raksasa dengan banyak tugas baru, dan saya siap untuk terjun ke medan pertempuran, hanya tinggal menghasilkan sebuah proyek.

3. Gagasan proyek


Isi

Diketahui bahwa yang terbaik dari semuanya, pelatihan berlangsung pada tugas-tugas nyata, dan terutama yang menarik. Bagi saya, proyek pelatihan seperti itu adalah permainan yang saya buat dengan sejumlah persyaratan:

  1. Putar ulang nilai.
  2. Kesederhanaan mekanisme permainan.
  3. Penggunaan grafis yang minimal.
  4. Gameplay harus memaksa pemain untuk berpikir.
  5. Pesta permainan seharusnya tidak lama.
  6. Implementasi cepat dari proyek (2 bulan).
  7. Kesederhanaan dan kemudahan UI.

Setelah memilah-milah banyak pilihan dan menilai kekuatan saya secara objektif, mengingat bahwa tidak peduli berapa banyak waktu dan sumber daya yang diletakkan di awal, sebenarnya akan membutuhkan lebih banyak, saya sampai pada kesimpulan bahwa yang terbaik adalah mengambil klasik yang diuji sebagai dasar daripada menciptakan sesuatu dari mereka sendiri. Saya benar-benar tidak ingin membuat ular bersyarat, dan saya mulai mempelajari permainan lama. Jadi saya menemukan Hunt the Wumpus yang penasaran.

4. Saya mencium bau WUMPUS


Isi
gambar

Vampus Hunting adalah gim teks klasik yang diciptakan oleh Gregory Yob pada tahun 1972. Pada tahun yang sama, ia diberi deskripsi gim dan kode sumber dalam artikel majalah.

Inti dari permainan ini adalah studi pemain tentang labirin dodecahedron, yang merupakan rumah dari Vampus jahat, dan upaya untuk menebak, berdasarkan pesan indikator yang ditampilkan di log permainan, yang ada di ruang teratas. Selain Vampus sendiri (membuat bau tidak enak), ada kelelawar (suara terdengar) mengangkut pemain ke ruang acak, dan lubang-lubang (menembus), memukul yang mengarah ke akhir permainan. Tujuan permainan ini adalah untuk membunuh Vampus, di mana pemain memiliki 5 anak panah yang dapat terbang dari 1 hingga 5 kamar pada suatu waktu (pemain itu sendiri memutuskan "kekuatan" untuk membuat tembakan apa). Dengan demikian, pemain memiliki dua tindakan: menembak dari haluan, pergi ke kamar. Apa yang akan menjadi hasilnya tergantung pada bagian keberuntungan dan tingkat kesadaran.

Secara umum, saya menyukai mekanika: sederhana, tetapi pada saat yang sama dengan elemen risiko. Tidak ada game yang menarik di Vampus di Google Play (kecuali untuk game baru pada waktu itu di dunia Lovecraft, di mana, seperti yang kemudian saya ketahui, itu didasarkan pada mekanisme Vampus yang sama. Tetapi artikel ini adalah tentang membuat game di Habré), oleh karena itu diterima keputusan untuk mengambil Vampus sebagai dasar. Saya menetapkan tujuan untuk mempertahankan permainan klasik, tetapi sedikit memperbaruinya dan menambahkan fitur baru.

5. Dasar dasar-dasar - struktur proyek


Isi

Pertama-tama, saya belajar aturan permainan klasik dan berkenalan dengan berbagai implementasi Vampus. Lalu saya membuat diagram dengan logika permainan (dapat diklik):


Pada awalnya, skema itu bermanfaat, karena diizinkan untuk menganalisis mekanisme permainan, menghilangkan kekurangan dan membuat sesuatu dari mereka sendiri. Selain itu, skema ini sangat berguna ketika kemudian saya bekerja dengan artis untuk menjelaskan inti dari permainan.

Saya membagi proyek menjadi 4 bagian, di mana masing-masing tugas yang berbeda diselesaikan. Saya hanya akan memberikan beberapa dari mereka.

1. Mekanika game

  • Dalam bentuk apa informasi tentang ruang bawah tanah akan disimpan?
  • Jenis apa dan berapa banyak variabel yang Anda butuhkan?
  • Algoritme penulisan: membentuk ruang bawah tanah, penerbangan booming, memeriksa hasil pemotretan, penerbangan booming dengan urutan kamar yang salah pilih, memindahkan pemain, memeriksa kamar saat bergerak, memindahkan pemain dengan kelelawar, dll.
  • Bagaimana cara menampilkan informasi dalam log game dan dalam urutan apa?
  • Bagaimana cara memeriksa kamar?

2. UI

  • Kegiatan apa yang harus dalam aplikasi? Bagaimana seharusnya mereka terlihat dan elemen apa yang harus ada pada mereka?
  • Parameter apa yang dapat diubah dalam pengaturan?
  • Apakah saya perlu gambar di dalam game?
  • Apa, secara umum, yang harus menjadi gaya aplikasi (warna, suasana hati, gaya pesan)?
  • Font apa yang digunakan?

3. Lainnya

  • Hubungkan ke layanan Google play
  • Bekerja dengan file XML
  • Font apa yang digunakan?

4. Menulis teks untuk permainan

  • Pesan Game
  • Aturannya
  • Deskripsi Game untuk Google Play

Agak tidak perlu, daripada tidak mungkin, untuk menggambarkan semuanya, jadi saya akan fokus hanya pada beberapa poin, setelah itu saya akan menunjukkan hasil pertama yang diperoleh.

6. Generasi labirin Vampus dan bekerja dengannya


Isi

Labirin Vampus adalah dodecahedron, yang dapat direpresentasikan sebagai matriks G dimensi 20x20. Kami menomori simpul dari 0 hingga 19. Jika elemen matriksnya adalah 1, ada bagian antara simpul (ruang), jika tidak, tidak.

Kami juga memperkenalkan matriks 20 × 3 N yang menyimpan indeks tetangga untuk setiap kamar. Matriks ini akan mempercepat pekerjaan dengan G.


Matriks G dan N dijahit ke dalam kode permainan dan tidak berubah (tentu saja, menyimpan G tidak perlu, karena Anda hanya dapat bekerja dengan N , tetapi untuk sekarang mari kita biarkan seperti itu). Ini adalah indeks vertex "benar" dari dodecahedron yang diberikan sekali dan untuk semua. Untuk pemain, indeks "game" dibentuk, yang merupakan semacam topeng dari yang "benar", ke dalam vektor V dimensi 20 sebagai berikut:

//  ""    for (byte i = 0; i < 20; i++) { V[i] = i; } //    ""  for (int i = 0; i < 20; i++) { int tmpRand = random.nextInt(20); byte tmpVar = V[i]; V[i] = V[tmpRand]; V[tmpRand] = tmpVar; } 

Dengan demikian, gambar berikut diperoleh:


Vektor V dibentuk setiap gim baru, yang memberi pemain penjara "baru".

Untuk membuat korespondensi antara indeks kamar "true" dan "game", metode konversi indByNmb digunakan:

 public byte indByNmb(int room) { byte ind = -1; for (byte i = 0; i < V.length; i++) { if (V[i] == room) { ind = i; break; } } return ind; } 

Pada input, metode indByNmb mendapatkan indeks "game" dari ruang kamar , dan pada output, itu memberikan ind "benar".

Setelah membuat struktur ruang bawah tanah, kami menempatkan: 2 kawanan kelelawar, 2 lubang, seorang Vampus dan seorang pemain:

 byte[] randomRooms = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; for (int i = 0; i < 20; i++) { int tmpRand = random.nextInt(20); byte tmpVar = randomRooms[i]; randomRooms[i] = randomRooms[tmpRand]; randomRooms[tmpRand] = tmpVar; } P = randomRooms[0]; W = randomRooms[1]; Pits[0] = randomRooms[2]; Pits[1] = randomRooms[3]; Bats[0] = randomRooms[4]; Bats[1] = randomRooms[5]; 

Penempatan seperti itu memastikan bahwa tidak akan ada dua penghuni dalam satu ruangan, dan pemain tidak akan dilempar ke dalam ruangan ke Vampus sejak awal.

Generasi penjara bawah tanah yang lengkap adalah sebagai berikut:

Kode
 byte[] V = new byte[20]; // ""  int P; //  , byte W; //   byte[] Bats = new byte[2]; //    , byte[] Pits = new byte[2]; //    public void generateDungeons() { resetVars(); //      for (int i = 0; i < 20; i++) { int tmpRand = random.nextInt(20); byte tmpVar = V[i]; V[i] = V[tmpRand]; V[tmpRand] = tmpVar; } byte[] randomRooms = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; for (int i = 0; i < 20; i++) { int tmpRand = random.nextInt(20); byte tmpVar = randomRooms[i]; randomRooms[i] = randomRooms[tmpRand]; randomRooms[tmpRand] = tmpVar; } P = randomRooms[0]; W = randomRooms[1]; Pits[0] = randomRooms[2]; Pits[1] = randomRooms[3]; Bats[0] = randomRooms[4]; Bats[1] = randomRooms[5]; } 


Sekarang Anda dapat menerapkan semua algoritma mekanika game. Jadi, misalnya, output dari kamar tetangga terjadi ketika seorang pemain memasuki ruangan dengan indeks CurrentRoom :

 public void printNearRooms(byte currentRoom) { byte ind = indByNmb(currentRoom); appendText(V[N[ind][0]], V[N[ind][1]], V[N[ind][2]]); } 

Pada input, metode printNearRooms mendapatkan indeks "game" saat ini dari ruang currentRoom .

Perhatikan mekanisme contoh. Biarkan pemain pindah ke kamar baru dan sebuah pesan muncul: "Sekarang saya di kamar 8". Angka 8 adalah indeks permainan. Indeks ruang "true" adalah 6 (lihat tangkapan layar di atas). Kode ini bekerja secara khusus dengan indeks "benar", yaitu 6. Untuk 6, indeks tetangga "benar" ditentukan: 2, 5, 7. Yang "permainan", masing-masing, akan menjadi: 10, 0, 7. Kami menunjukkan pemain di log: "Saya bisa pergi ke kamar 10, 0, 7".

Dengan demikian, membentuk setiap game baru vektor V dan bekerja dengan indeks "benar" dan "game" dari grafik labirin, penampilan fakta bahwa setiap game unik dibuat.

Berkat fungsi appendText, pesan ditampilkan pada interval yang ditentukan. Kami akan bertemu dengannya nanti.

Berikut ini adalah contoh memeriksa ruang untuk kedekatan tikus:

 public boolean isBatsNear() { boolean answer = false; byte indP = indByNmb(P); for (int i = 0; i < 3; i++) { if ((V[N[indP][i]] == Bats[0]) || (V[N[indP][i]] == Bats[1])) { answer = true; break; } } return answer; } 


7. Penyimpanan pesan game dan hasilnya ke pemain


Isi

Gim klasik adalah proses interaksi antara pemain dan konsol, mis. permainan itu murni tekstual. Saya ingin menyimpan fitur ini yang memecah semua pesan game menjadi beberapa blok, misalnya:

  • Pesan pertama dari game baru.
  • Pesan saat pemain bergerak.
  • Pesan di sekitar lubang.
  • Pesan saat memindahkan Vampus.
  • Pesan saat jatuh ke lubang.

Teks disimpan dalam file XML. Setiap blok memiliki beberapa opsi pesan demi beragam gameplay.

Contoh blok pesan yang ditampilkan jika ada lubang di salah satu kamar tetangga:

 <string name="g_pitsNear_1">—  \n</string> <string name="g_pitsNear_2">—    \n</string> <string name="g_pitsNear_3">—     \n</string> <string name="g_pitsNear_4">—  , \n</string> <string name="g_pitsNear_5">—   \n</string> <string-array name="g_pitsNear"> <item>@string/g_pitsNear_1</item> <item>@string/g_pitsNear_2</item> <item>@string/g_pitsNear_3</item> <item>@string/g_pitsNear_4</item> <item>@string/g_pitsNear_5</item> </string-array> 

Dengan struktur ini, Anda dapat dengan mudah mengedit yang sudah ada atau menambahkan pesan baru tanpa mempengaruhi kode Java.

Jika, misalnya, ketika memeriksa ruangan, metode isBatsNear yang ditunjukkan sebelumnya mengembalikan true , maka kita mendapatkan blok pesan yang diperlukan dari XML, dan kemudian secara acak mengambil satu sebagai argumen untuk appendText :

 if (isBatsNear()) { String[] g_batsNear = getResources().getStringArray(R.array.g_batsNear); appendText(g_batsNear[random.nextInt(g_batsNear.length)]); } 

Pesan game adalah output ke konsol, yang merupakan objek TextView . Mari kita lihat metode appendText .

 public void appendText(final String str) { msgBuffer.add(str); if (!isTimerGameMsgWork) { mTimerGameMsg.run(); isTimerGameMsgWork = true; } } 

Ketika menjadi perlu untuk menampilkan pesan gim, metode appendText dipanggil , yang menganggapnya sebagai argumen. Dalam metode itu sendiri, sebuah baris pertama-tama ditambahkan ke buffer msgBuffer . Ini diikuti dengan memeriksa variabel boolean isTimerGameMsgWork . Ini menerima true dalam kasus ketika timer mTimerGameMsg dimulai . Ketika timer ini berfungsi, maka dari buffer msgBuffer, sesuai dengan prinsip FIFO (First In First Out), pesan diterima pada interval yang ditentukan mIntervalGameMsg dan ditambahkan ke log permainan - txtViewGameLog .

Kode keluaran pesan lengkap:

Kode
 ArrayList<String> msgBuffer = new ArrayList<>(); Handler mHandlerGameMsg; private int mIntervalGameMsg = 1000; boolean isTimerGameMsgWork = false; public void appendText(final String str) { msgBuffer.add(str); if (!isTimerGameMsgWork) { mTimerGameMsg.run(); isTimerGameMsgWork = true; } } final Runnable mTimerGameMsg = new Runnable() { @Override public void run() { if (msgBuffer.size() == 0) { mHandlerGameMsg.removeCallbacks(mTimerGameMsg); isTimerGameMsgWork = false; } else { txtViewGameLog.append(msgBuffer.get(0)); msgBuffer.remove(0); mHandlerGameMsg.postDelayed(mTimerGameMsg, mIntervalGameMsg); } } }; 



8. Hasil pertama


Isi

Setelah satu bulan pengembangan, versi game yang dapat dimainkan pertama kali dengan fungsionalitas yang diimplementasikan sepenuhnya diterima. Saya lampirkan tangkapan layar:

Tangkapan layar dari versi pertama gim





Pada tangkapan layar yang disajikan, Anda dapat melihat: menu utama, jendela aturan, jendela pengaturan, jendela game.

Tentu saja, saya mengerti bahwa hasilnya sama sekali tidak menarik. Yang utama adalah saya mendapat pengalaman praktis di AS dan Jawa, yang merupakan tugas pertama.

Pemain, seperti dalam permainan klasik, harus berinteraksi melalui konsol: masukkan nomor kamar untuk bergerak atau rute untuk panah untuk terbang. Dalam pengaturan, saya memungkinkan untuk mengubah ukuran font dan transparansi latar belakang. Saya berasumsi bahwa untuk setiap jendela permainan akan ada gambar-latar belakangnya sendiri (untuk sedikit mendiversifikasikan gameplay, ha!).

Selanjutnya, saya berencana untuk mengganti foto-foto yang ada (yang saya ambil dengan tidak sopan dari internet) dengan gambar-gambar yang akan digambar artis tersebut. Kemudian saya akan merilis game di pasar Play dan melupakannya dengan aman, menerapkan pengalaman yang diperoleh untuk proyek-proyek baru. Dan kemudian aku tidak bisa membayangkan berapa banyak Vampus bisa berubah ...

9. Bahkan game kecil pun layak sejarah.


Isi

Ketika seseorang datang untuk bekerja dengan jiwa, maka proyek hanya mendapat manfaat dari ini. Saya beruntung bahwa artis, Anastasia Frolikova , ternyata menjadi orang seperti itu. Yaitu alih-alih hanya menggambar apa yang saya butuhkan, dia menjadi tertarik pada dunia permainan dan ingin memahami cara kerjanya. Dan tiba-tiba ternyata pada umumnya tidak ada kedamaian! Siapa vampus ini? Dan mengapa seorang pemain harus membunuhnya? Seperti apa ruang Vampus? Dan seterusnya, begitu seterusnya, yang tidak saya pikirkan dan bahwa saya tidak berencana untuk memberi tahu pemain. Sebagai hasilnya, kami sepakat bahwa bahkan game yang tampaknya kecil ini harus memiliki cerita sendiri. Dan dia muncul.

Menurut legenda kami, Vampus, meskipun kuno, tetapi bukan makhluk mitos jahat yang suka mengolok-olok orang. Ya, dia tinggal di labirin, tetapi labirin ini bukan dalam bentuk ruang bawah tanah yang suram klasik, tetapi dalam bentuk rumah yang tak terbayangkan yang terdiri dari tumpukan kamar, yang isinya menjadi ciri Vampus. Jadi, misalnya, di salah satu kamar ada bioskop, di dindingnya terdapat poster film favoritnya, dan di ruangan lain ada lemari pakaiannya, tempat dia sedang menyiapkan "lelucon".


Pemain dari pemburu tanpa nama berubah menjadi biasa di forum cryptozoological yang ingin membuktikan keberadaan Vampus. Kami mengganti busur dan anak panah klasik dengan kamera dan film, dan tujuan permainan itu bukan untuk membunuh Vampus, tetapi untuk mendapatkan fotonya. Ngomong-ngomong, menu utama telah diulang untuk sebuah forum di mana orang mendiskusikan Vampus, dan dari diskusi tersebut pemain dapat mempelajarinya.

Versi pertama dari menu utama, dibuat dalam bentuk forum

Adapun aspek-aspek lain, mereka hampir tidak berubah: tikus bertindak dengan cara yang sama, dan masuk ke dalam lubang mulai menyebabkan kecelakaan, kerusakan kamera dan akhir permainan (dan bukan kematian pemain).


Sesaat lagi tentang kamera. Dalam permainan klasik, pemain bisa menembakkan panah pada kisaran 1 hingga 5 kamar dan itu tampak logis. Kami memiliki kamera alih-alih busur (mengambil gambar 1 hingga 3 kamar sekaligus, tetapi berfungsi seperti panah klasik yang menyerang Vampus). Dan itu ... terlihat aneh, bukan? Ada ide untuk mengurangi rentang kamera menjadi 1 ruangan sehingga Anda bisa memotret hanya yang bersebelahan, tetapi ini, pertama, menyulitkan permainan, dan kedua, situasi dapat diperoleh di mana permainan tidak dapat dimenangkan, yang salah. Secara umum, ini adalah momen yang secara pribadi masih menghantui saya, tetapi saya belum menemukan solusi.

Berkenaan dengan gaya dan suasana permainan. Hampir semua gim tentang Vampus dibuat dalam nada abu-abu yang membosankan, dan aksi terjadi di lokasi gelap ruang bawah tanah. Karena itu, kami memutuskan bahwa permainan kami harus berbeda dari semua ini dan dilakukan dengan humor dan warna-warna cerah.




10. Transformasi Vampus dan hasil akhirnya


Isi

Kemudian 2 bulan lagi bekerja pada permainan menunggu kami. Karena Vampus memiliki 20 kamar, masing-masing memiliki interiornya sendiri. Selain itu, ikon pencapaian, ikon dalam game dibuat, keputusan tentang desain secara umum dan UI dibuat. Seluruh teks game juga ditambahkan, kode ditambahkan dan dioptimalkan, fungsi baru ditambahkan (misalnya, notepad muncul untuk merekam informasi selama permainan). Secara umum, Vampus telah mengalami perubahan besar.

Kamar, misalnya, dibuat sebagai berikut:

gambar
Ada 20 kamar, semuanya unik, dan pemain menerima labirin "baru" setiap pertandingan. Bagaimana cara membuat setiap foto permainan baru yang melekat pada kamar baru? Yang paling sederhana adalah dengan menggunakan pendekatan indeks "benar" dan "permainan" yang sama:

 public void changeImgOfRoom() { ImageView img = findViewById(R.id.imgRoom); int ind = indByNmb(P); String imgName = "room_" + ind; int id = getResources().getIdentifier(imgName, "drawable", this.getPackageName()); Glide.with(this) .load(id) .transition(DrawableTransitionOptions.withCrossFade()) .into(img); } 

Gambar format persegi (untuk mengurangi distorsi saat melihat pada layar yang berbeda) disimpan dalam sumber daya dengan nama [room_0; room_1; ..., room_19]. Dan mereka, pada kenyataannya, terkait dengan indeks dodecahedron "benar", tetapi untuk pemain, setiap permainan baru untuk ruangan yang sama akan memiliki gambar yang berbeda. Mengapa ini dibutuhkan? Untuk memungkinkan dalam pesta permainan tertentu untuk mengkorelasikan informasi tekstual dengan gambar ruangan tertentu ("yeah, saya ingat bahwa di kamar X, yang merupakan ruang tamu, ada konsep") dan tidak berhasil bahwa "mengapa selalu X adalah gambar yang sama? " Semuanya untuk variasi dan membantu pemain (namun, seperti yang ditunjukkan oleh pengalaman, tidak ada bantuan dari penghafalan visual, itu lebih efisien untuk bekerja dengan teks).

Pada akhirnya, kami mendapat versi baru dari game. Dan tahukah Anda? Vampus telah menjadi sangat menarik, dan yang paling penting, itu masih Vampus klasik yang sama, tetapi di rumah baru yang nyaman!

Tangkapan layar dari versi kedua gim





Pada tangkapan layar: menu utama, jendela aturan, jendela pengaturan, jendela game.

Berkenaan dengan mekanik, itu hanya sedikit dimodifikasi dan diganti namanya (baik, sebenarnya, apakah ada perbedaan: kamera atau busur, jika Anda perlu melakukan hal yang sama?). Perubahan yang paling nyata dalam mekanika adalah menyederhanakan proses interaksi antara pemain dan permainan - input klasik nomor kamar menggunakan keyboard telah dihapus. Sekarang, untuk beralih antar kamar, Anda perlu memilih 1 dari 3 angka di jendela sembul, dan untuk membentuk "rute" untuk memotret, cukup gulirkan roda pada drum:


Dalam video di bawah ini Anda dapat melihat hasil akhirnya:



11. Kesimpulan


Isi

Versi pertama dari permainan diterima oleh saya dalam satu bulan pengembangan, mengalokasikan 1-2 jam setelah bekerja. Pada saat yang sama, baik AS maupun Jawa sebelumnya tidak kenal saya. Versi kedua dari game ini membutuhkan 2 bulan lagi. Dengan demikian, hanya 3 bulan kerja santai.

Tentu saja, dalam bentuk ini permainan ini bukan untuk jangkauan luas, karena mungkin terlihat rumit dan tidak mengasyikkan bagi pemain modern, tetapi yang lebih penting, mungkin, menjaga semangat permainan klasik, bukankah begitu?

Apakah saya senang dengan hasilnya? Jelas ya. Saya mendapatkan banyak pengalaman baik dalam pemrograman maupun dalam kerja tim. Saya suka mekanik hasil permainan dan komponen visualnya. Adakah yang ingin saya ubah? Tentu saja, tidak ada batasan untuk kesempurnaan dan Anda selalu dapat menambah / meningkatkan sesuatu, tetapi Anda tidak dapat melakukan ini selamanya!

Apakah game ini menarik? Ya, itu bukan keputusan saya. Tetapi biarkan Vampus merasa nyaman di rumah yang kami bangun untuknya dengan cinta dan perhatian yang besar.

Semoga sukses!

Terima kasih dan hati-hati untuk Vampus!

PS Terus-menerus muncul tugas dan kegembiraan menyelesaikannya adalah apa yang saya suka pemrograman. Saya harap Anda mendapatkan kesenangan yang tidak sedikit.

Source: https://habr.com/ru/post/id462943/


All Articles