Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. From Scratch

Membuat Game Match-3 di Build 2: Chaining dan Game Overs

by
Difficulty:BeginnerLength:LongLanguages:
This post is part of a series called Make a Match-3 Game in Construct 2.
Make a Match-3 Game in Construct 2: Eliminating Pre-Made Matches

Indonesian (Bahasa Indonesia) translation by Nasruddin (you can also view the original English article)

Waktunya telah tiba: kita hampir selesai dengan permainan kami, dan siap untuk mengimplementasikan mekanik permainan terakhir. Artikel ini akan fokus pada pembuatan sistem kombo yang memberi pemain lebih banyak poin untuk membuat rantai yang menghancurkan beberapa kelompok blok hanya setelah satu swap.

Di atas itu, kami akan menerapkan skenario kerugian dan menambahkan layar Game Over. Akhirnya, saya akan berbicara tentang hal-hal yang dapat Anda kerjakan di waktu Anda sendiri untuk meningkatkan dan memperluas permainan di luar apa yang telah kita bahas. Jadi, tanpa basa-basi lagi, mari kita mulai ...


Demo Final Game

Berikut ini adalah demo game yang sedang kami jalani, dan yang akan kami buat di bagian akhir seri ini:




Menemukan yang Cocok

Sebelum beralih ke artikel utama, saya ingin membuat perubahan kecil ketika FindMatches dipanggil.

Saat mengerjakan artikel ini, saya menemukan masalah yang dapat Anda lihat di GIF di bawah:

Match-3 Construct 2 tutorial

Seperti yang Anda lihat di GIF pertama ini, ketika sebuah blok dijatuhkan hanya satu blok jarak untuk mencoba dan membentuk kecocokan dengan sekelompok blok di bagian bawah jatuh, ia bekerja dengan sempurna.

Match-3 Construct 2 tutorial

Namun, dalam GIF kedua ini, menjadi jelas bahwa ketika blok dijatuhkan dalam jarak yang lebih besar dalam skenario yang sama, gagal untuk mendeteksi pertandingan sampai kita melakukan swap lain. Alasannya adalah karena game ini tidak cukup sering mencari kecocokan.

Saat ini, game hanya mencari pertandingan setelah swap, tetapi karena jumlah waktu yang dibutuhkan Blok untuk jatuh jarak ini, deteksi pertandingan telah berakhir ketika Blok menyentuh tanah dan sehingga pertandingan tidak ditemukan sampai itu dimulai kembali.

Untuk memperbaikinya, kami akan memodifikasi saat kami melakukan pemeriksaan FindMatches.

Pertama, masuk ke fungsi SwapBlocks dan hapus Peristiwa akhir dari fungsi sehingga tidak memanggil FindMatches sama sekali.

SwapBlocks akan terlihat seperti ini sekarang:

Match-3 Construct 2 tutorial

Pada titik ini, tidak ada acara yang memanggil FindMatches. Kami akan memperbaikinya dengan menambahkan Action baru ke Event yang mendeteksi saat Matches dimungkinkan. Temukan Acara ini dan tambahkan Tindakan ini ke akhir Acara Lain:

Acara Anda seharusnya sekarang terlihat seperti ini:

Match-3 Construct 2 tutorial

Selain itu, ambil kesempatan ini untuk memindahkan kedua Pertandingan yang MatchesPossible ke Acara di akhir kode permainan, jika Anda belum melakukannya. Melakukan hal ini akan memastikan bahwa mereka tidak dipanggil sama sekali sebelum kode yang menghilangkan pertandingan yang sudah dibuat sebelumnya.

Jika Anda menjalankan game sekarang, Anda harus dapat melakukan skenario yang saya sajikan di atas tanpa masalah.


Chaining

Dengan masalah itu diperbaiki, kami akan menerapkan sistem chaining, yang memberikan pemain poin ekstra untuk pertandingan yang disebabkan oleh penghancuran pertandingan lain.

Anda dapat melihat contoh dari jenis situasi yang saya maksud di bawah ini:

Match-3 Construct 2 tutorial

Dalam skenario di atas, pemain memindahkan blok hijau dan menciptakan kecocokan. Kemudian, penghancuran blok hijau menyebabkan balok biru jatuh dan menciptakan momen pertandingan lain nanti.

Saya ingin memberikan bonus poin pemain untuk mencapai sesuatu seperti ini. Secara khusus, saya ingin menerapkan pengali dengan jumlah poin yang diterima pemain untuk setiap pertandingan, dan memiliki peningkatan pengganda dengan setiap pertandingan berturut-turut yang dibuat.

Cara Kerjanya

Untuk membuat sistem ini berfungsi, kita akan membuat variabel baru yang disebut Chain, dan kemudian membuat beberapa modifikasi kecil pada fungsi yang ada. Jadi, pertama-tama buat Variabel Global baru:

Variabel Anda akan terlihat seperti ini:

Match-3 Construct 2 tutorial

Variabel ini akan bertindak sebagai pengali untuk poin untuk memberi tahu berapa lama sebuah rantai telah berjalan.

Sekarang pergi ke Acara yang menyebabkan blok jatuh, dan hapus Kejadian Lain yang memanggil fungsi FindMatches.

Sekarang, masuklah ke FindMatches sendiri dan temukan lokasi tempat Anda membuat objek FloatingPointsText. Ubah pernyataan Tetapkan Teks sehingga mereka menggunakan rumus baru:

Perubahan ini membuat teks mengambang dimodifikasi dengan cara yang sama seperti Poin itu sendiri nantinya.

Selanjutnya, buka bagian FindMatches mana Anda memanggil FindMatches lagi di akhir Acara, dan hapus panggilan fungsi ini dan pernyataan Tunggu. Mengapa? Karena, jika kami tidak menghapus ini, maka FindMatches akan berakhir dipanggil terlalu banyak dan rantai tidak akan pernah dimulai dengan benar.

(Karena perubahan yang kami buat sebelumnya dalam artikel ini, FindMatches akan dipanggil setiap kali semua Blok berada di grid dan tidak ada yang jatuh. Memiliki beberapa area di mana kami memanggil FindMatches hanya akan menyebabkan beberapa contoh dari fungsi untuk berjalan pada saat yang sama, dan bisa mengacaukan sistem poin.)

Akhirnya, kita akan membuat satu perubahan lain ke fungsi ini. Pergi ke akhir fungsi dan tambahkan Aksi ini setelah Anda mengatur PointsGiven ke 0:

Sekarang, setiap kali pertandingan menemukan kecocokan, itu memberikan poin pemain, menghancurkan blok, dan kemudian tingkatkan nilai Rantai.

Versi baru FindMatches akan terlihat seperti ini:

Match-3 Construct 2 tutorial

Selanjutnya, buka fungsi GivePoints dan modifikasi kedua Tindakan yang meningkatkan nilai Skor sehingga mereka memperhitungkan nilai Rantai:

Dengan perubahan ini, GivePoints seharusnya sekarang terlihat seperti ini:

Match-3 Construct 2 tutorial

Mengatur Ulang Rantai

Kami telah menerapkan Rantai variabel sebagai pengali untuk poin yang diterima pemain (dan jumlah poin yang ditampilkan di objek teks mengambang), tetapi masih ada satu hal yang perlu kita lakukan: kita perlu menambahkan dalam pernyataan yang me-reset nilai Chain sehingga tidak akan bertambah tak terbatas.

Kami akan menambahkan pernyataan ini ke Acara On DragDrop Start sehingga, setiap kali pemain mulai menyeret Blok baru, itu dianggap sebagai Rantai baru. Alasan lain yang kami lakukan di sini adalah karena itu mencegah nilai Rantai dari direset sebelum waktunya, sehingga membuat semua pertandingan di bagian akhir dari Rantai kurang berharga.

Buka Acara On DragDrop Start dan tambahkan Aksi ini ke daftar Tindakan:

Acara Anda seharusnya sekarang terlihat seperti ini:

Match-3 Construct 2 tutorial

Jika Anda menguji permainan pada titik ini Anda akan melihat bahwa jika Anda membuat rantai seperti yang saya tunjukkan di gif sebelumnya, Anda menerima 90 poin, bukan 60 poin.

Dengan itu bekerja, sistem chaining selesai dan Anda harus dapat membuat sebagai rantai rumit yang Anda inginkan tanpa masalah.


Memperbaiki yang Jatuh

Hal berikutnya yang ingin saya bahas adalah masalah yang saya temukan dengan sistem Block falling.Jika Anda menghabiskan banyak waktu memainkan game Match-3 dalam kondisi saat ini, Anda mungkin telah memperhatikan masalah di mana, setiap sekarang dan kemudian, Blok akan gagal jatuh meskipun tidak ada Blok di bawahnya.

Anda dapat melihat apa yang saya maksud pada gambar di bawah ini:

Match-3_Game_Construct-2_BrokenFalling

Meskipun tidak ada Blok di bawah Blok kuning, itu masih gagal jatuh ke ruang kosong. Ini adalah masalah yang langka, tetapi jika tidak ditangani, itu masih bisa mengacaukan skor seseorang dan mencegah mereka menerima rantai yang mereka atur, atau bahkan menyebabkan mereka kalah begitu kita menambahkan fitur Game Over.

Masalah ini berasal dari variabel BlockBeingMoved, yang digunakan oleh Peristiwa yang menentukan kapan Blok harus jatuh untuk memastikan bahwa tidak ada Blok yang dipindahkan ketika ia memberitahukan Blok untuk mengisi ruang kosong. Dalam beberapa skenario, ketika pemain memindahkan Blok, variabel ini tidak pernah diatur ulang, dan Blok tidak jatuh sampai Blok lain dipindahkan dan disetel ulang dengan benar. Untuk memperbaiki ini, kita akan menambahkan sepasang Peristiwa yang akan mengatur dan mereset variabel ini dengan benar, dan kami akan menghapus Actions saat ini yang mengatur variabel, karena mereka tidak bekerja dengan benar.

Pertama, buka OnDragDrop Start dan On DragDrop Drop Events, dan hapus semua Tindakan yang berhubungan dengan variabel BlockBeingMoved dari Peristiwa ini. Harus ada satu Aksi di setiap Peristiwa yang perlu dihapus.

Selanjutnya, buka Acara yang mendeteksi saat ada ruang kosong di bawah Blok. Kami akan mengubah Ketentuan Acara ini. Pertama pastikan bahwa Condition yang memeriksa apakah BlockBeingMoved sama dengan 0 di awal. Kemudian, tambahkan kondisi lain ke akhir Acara yang memeriksa untuk memastikan tidak ada Blok yang dipindahkan.

Ini adalah kondisi yang akan Anda tambahkan:

Acara Anda seharusnya sekarang terlihat seperti ini:

Match-3_Game_Construct-2_ModifiedBlockFalling

Akhirnya, kita akan menambahkan dua Peristiwa lagi di akhir Lembar Acara yang akan menangani variabel BlockBeingMoved. Pergi ke akhir Lembar Acara Anda dan tambahkan Peristiwa ini:

Acara baru Anda akan terlihat seperti ini:

Match-3_Game_Construct-2_BlockBeingMovedEvent

Peristiwa ini akan secara efektif mengubah BlockBeingMoved dari 0 ke 1 dan dari 1 ke 0 setiap kali Blok dipindahkan, atau tidak dipindahkan, masing-masing. Jika Anda menguji permainan pada titik ini, Anda harus dapat bermain sebanyak yang Anda mau tanpa menghadapi masalah dengan Blok jatuh.


Game Over

Sekarang sistem chaining kami sudah siap, kami akan menambahkan skenario kerugian dan layar Game Over.

Hal pertama yang perlu kita lakukan adalah menambahkan Layout baru yang akan bertindak sebagai Game Over Screen kami:

  1. Di sisi kanan layar, klik kanan folder Layouts, dan pilih folder Add Layout.
  2. Pilih Add Event Sheet.
  3. Pergi ke Layout baru dan buat objek BG Tile baru.
    1. Pilih gambar GameOverBGTile.png dari folder Gambar BG dalam paket grafis yang Anda unduh selama tutorial pertama.
    2. Atur Posisi ke -6, -7.
    3. Atur Ukuran menjadi 613, 619.
  4. Buat objek Sprite baru.
    1. Pilih gambar GameOverText.png dari paket grafis.
    2. Setel Posisi ke 303, 200.
  5. Buat objek Tombol baru.
    1. Setel Nama menjadi RestartButton.
    2. Atur Posisi ke 262, 410.
    3. Setel Ukuran menjadi 100, 30.
    4. Setel Teks untuk Restart.

Sekarang setelah Anda menyiapkan layar Game Over, kembali ke Tata Letak awal Anda, Tata Letak 1, dan tambahkan satu item baru ke layar itu:

  1. Pada Tata Letak 1, buat objek Sprite baru.
  2. Gunakan alat Paint Bucket untuk melukis sprite ini seluruhnya merah.
  3. Tutup editor animasinya.
  4. Tetapkan Nama untuk GameOverArea.
  5. Atur Posisi ke 196, -30.
  6. Setel Ukuran menjadi 344, 150.
  7. Setel Opacity ke 0.

Anda harus memperhatikan bahwa sprite ini pada posisi yang sama, dan ukuran yang sama, sebagai bagian atas dari bidang game. Kita akan menggunakan objek sprite ini untuk mendeteksi ketika pemain telah hilang dengan mendeteksi ketika sebuah blok bertabrakan dengan itu. Buka Lembar Acara 1 sehingga kami dapat mulai menerapkan ini.

Menghentikan Blok di Atas

Sebelum kita mulai mendeteksi skenario kerugian, kita perlu menambahkan variabel baru yang akan kita gunakan untuk menghentikan blok ketika mereka memukul objek GameOverArea sehingga mereka tidak akan lagi bergerak. Ini akan membuatnya jelas bagi pemain yang mereka telah kehilangan.

Sekarang, buka Acara tempat Anda memindahkan blok dan tambahkan ketentuan ini:

Pergerakan Peristiwa Anda seharusnya sekarang terlihat seperti ini:

Match-3 Construct 2 tutorial

Sekarang gerakan ini menggunakan variabel baru kami, kami akan menambahkan Peristiwa yang mendeteksi kondisi kerugian:

Acara yang baru saja kita buat akan memanggil fungsi Game Over setelah Blok tumpang tindih dengan GameOverArea. Sekarang kita akan benar-benar membuat fungsi GameOver.

Dua Acara baru Anda seharusnya terlihat seperti ini:

Match-3_Game_Construct-2_GameOverEvents

Alasan mengapa kami membuat fungsi terpisah daripada melakukan tindakan ini dalam Peristiwa yang benar-benar mendeteksi gim, adalah bahwa Peristiwa ini hanya melihat Blok tertentu karena Peristiwa yang memicunya. Seperti yang Anda lihat dalam fungsi yang kami buat, kami menonaktifkan fitur menyeret Blok untuk mencegah pemain terus membuat pertandingan setelah pertandingan selesai terdeteksi. Jika kita melakukan ini dalam acara yang mendeteksi permainan berakhir, itu hanya akan menonaktifkan Blok yang menyebabkan permainan berakhir, dan setiap Blok lainnya masih dapat diseret.

Sekarang, pergi ke Event Sheet 2; kita akan menambahkan beberapa fungsi ke objek RestartButton yang kita buat sebelumnya. Tambahkan Event baru ke Event Sheet 2:

Acara Anda akan terlihat seperti ini:

Match-3 Construct 2 tutorial

Mengatur ulang Nilai-Nilai

Jika Anda bermain game sekarang, menyelesaikan permainan, dan kemudian restart, Anda akan melihat bahwa itu kembali ke Tata Letak asli, tetapi blok tidak bergerak. Alasannya adalah karena semua variabel yang kami gunakan adalah Variabel Global, sehingga beberapa di antaranya tidak disetel ulang secara otomatis saat kami memulai ulang Tata Letak.

Untuk meresetnya, kita perlu menambahkan Action ke On Start of Layout Event yang akan meresetnya secara manual untuk kami.

Pergi ke On Start of Layout Event dan tambahkan Action ini ke Event awal sebelum loop For dipanggil:

Acara Anda seharusnya sekarang terlihat seperti ini:

Match-3 Construct 2 tutorial

Jika Anda menguji lagi, Anda seharusnya tidak lagi memiliki masalah ini.


Apa yang Harus Anda Lakukan Selanjutnya?

Pada titik ini, kami telah membahas setiap fitur yang ingin saya bahas dalam lingkup tutorial ini.

Anda akan melihat bahwa game Anda masih tidak persis sama dengan yang ada di demo di atas, dengan perbedaan terbesar adalah game Anda tidak memiliki layar Mulai. Saya memilih untuk tidak membahas pembuatan layar Mulai, karena hampir sama dengan membuat layar Game Over - saya membiarkan ini sebagai latihan untuk Anda.

Sebaliknya, saya akan membahas beberapa fitur yang dapat Anda pertimbangkan untuk ditambahkan ke permainan Anda yang dapat membuatnya lebih baik atau lebih menarik.


Blok Khusus

Hal pertama yang saya ingin bahas adalah blok khusus - blok yang memberikan bonus pemain atau melakukan beberapa fungsi unik.

Kebanyakan pertandingan-3 termasuk blok khusus untuk membantu memecah aksi dan membuat permainan lebih menarik. Seperti berdiri, permainan secara teoritis bisa berlangsung selamanya, tetapi gameplay tidak pernah berubah. Memperkenalkan tipe blok khusus setiap sekarang dan kemudian dapat membantu membuat game lebih menarik ketika telah berjalan untuk sementara waktu.

Untuk mengintegrasikan blok khusus, Anda perlu mengubah cara pemblokiran dihasilkan, sehingga setiap kali blok dibuat, ada peluang acak yang akan menjadi blok khusus. Ada sejumlah cara untuk melakukan ini, tetapi umumnya yang terbaik adalah hanya menghasilkan nomor acak antara 1 dan 100 dan hanya menghasilkan blok khusus ketika nilai acaknya antara 95 dan 100, atau beberapa rentang lain yang Anda putuskan.

Tujuan Anda adalah membuat Blok khusus langka, tetapi tidak terlalu langka. Dengan cara ini, pemain akan mendapatkan mereka secara teratur cukup untuk membuat permainan lebih menyenangkan, tetapi tidak terlalu sering sehingga merusak keseimbangan permainan.

Blok Bom

Ketika datang ke blok khusus Anda memiliki banyak pilihan; salah satu yang paling umum adalah blok bom.

Blok bom menyebabkan blok tambahan dihancurkan ketika mereka hancur. Mereka berbeda di setiap gim: di beberapa gim, mereka menghancurkan semua Blok yang mengelilinginya; di lain, mereka menghancurkan seluruh baris atau kolom Blok.

Pada gambar di bawah, Anda dapat melihat dua jenis blok bom dari game populer Candy Crush Saga:

Match-3 Construct 2 tutorial

Blok bom biasanya cukup sederhana untuk diintegrasikan:

  • Mulai dengan Acara yang mendengarkan penghancuran blok bom apa pun.
  • Setiap kali seseorang dihancurkan, ia harus melewati posisinya menjadi sebuah fungsi yang kemudian akan menemukan dan menghancurkan semua blok yang juga akan dihancurkan oleh blok bom itu.
  • Misalnya, jika blok bom Anda seharusnya menghancurkan semua blok di sekitarnya, Anda akan melewati posisi blok bom ke fungsi yang akan melihat setiap posisi di sekitarnya untuk melihat apakah ada blok di sana.
  • Jika menemukan blok di posisi ini, maka ia akan menghancurkannya.

Blok Waktu-Lambat atau Waktu-Berhenti

Tipe blok khusus lainnya yang akan Anda temukan di banyak permainan adalah salah satu yang memperlambat seberapa cepat Blok bergerak, atau menghentikan mereka sepenuhnya.

Blok seperti ini sangat mudah dibuat.

  • Sama seperti dengan blok bom, Anda akan membutuhkan acara yang mendengarkan ketika salah satu Blok ini dihancurkan.
  • Setiap kali ini terjadi, Anda harus mengubah MovementsPossible ke 1 sehingga blok akan berhenti, atau mengubah speed sehingga blok bergerak sangat lambat.
  • Kemudian, Anda harus memulai pengatur waktu yang berlangsung untuk jangka waktu singkat, mungkin 10 - 15 detik. Setelah pengatur waktu itu berakhir, Anda akan mengatur ulang kecepatan blok dan melanjutkannya secara normal.

Anda harus ingat untuk memperhitungkan pemain yang mengaktifkan blok waktu-berhenti sementara blok waktu-henti yang lain sudah aktif. Dalam skenario ini, Anda harus memulai ulang timer atau menambahkan panjang standar pengatur waktu ke pengatur waktu yang ada dan melanjutkannya secara normal.


Mode Game Lainnya

Anda juga dapat mempertimbangkan untuk menambahkan mode permainan lainnya ketika pemain bosan dengan mode Tanpa Akhir yang kami buat.

Mode Waktu

Modus gim yang paling mudah untuk ditambahkan adalah di mana pemain memiliki batas waktu, dengan sasaran mereka adalah mendapatkan poin sebanyak mungkin sebelum waktu habis.

Dalam skenario ini, Anda akan membiarkan semua kode permainan tidak tersentuh kecuali menambahkan kondisi kerugian kedua ke gim, di mana gim berakhir saat pewaktu habis (serta ketika Blok mencapai bagian atas layar).

Ketika permainan dimulai, Anda akan memulai penghitung waktu untuk jumlah waktu mode berlangsung, dan ketika timer berakhir, Anda akan mengakhiri permainan dengan cara yang sama seperti yang Anda lakukan sekarang.

Mode Teka-Teki

Dalam mode permainan ini Anda akan memberi pemain papan permainan yang sangat spesifik yang Anda rancang sebelumnya dan meminta mereka untuk menghilangkan semua blok dalam beberapa swap sesedikit mungkin.

(Anda mungkin akan ingin mematikan gerakan blok, karena jika blok bergerak di sana juga akan ada blok baru yang ditambahkan dari waktu ke waktu.)

Mode ini akan mengharuskan Anda untuk dapat mengatur kisi-kisi blok tertentu, jadi Anda harus memiliki sistem yang memungkinkan Anda untuk lulus dalam penyiapan blok tertentu ketika gim dimulai daripada menghasilkan satu secara acak seperti yang kita lakukan sekarang.

Selain itu, meskipun mode permainan ini relatif mudah diterapkan, Anda perlu melakukan banyak desain teka-teki manual sehingga Anda dapat menciptakan banyak teka-teki unik untuk pemain untuk dicoba dan dipecahkan.

Menambahkan mode gim seperti ini bisa sangat memakan waktu karena semua kreasi konten diperlukan, tetapi ada banyak pemain yang akan menikmatinya. Itu benar-benar dapat membayar dengan baik jika Anda memasukkan waktu.


Kesimpulan

Selama rangkaian tutorial ini, kami membuat game pertandingan-3 dari awal hingga selesai. Ada banyak hal yang dapat Anda lakukan dengan gim ini jika Anda meluangkan waktu dan memiliki imajinasi, tetapi ada banyak cara Anda dapat menggunakan ide yang saya sajikan untuk membantu Anda dengan proyek game lainnya.

Terus garap gim Anda, dan terus jelajahi ide-ide baru, karena Anda tidak pernah tahu ketika sesuatu yang Anda pelajari di sini mungkin berguna nantinya.

Saya harap, apakah Anda melalui seluruh rangkaian atau hanya melewatkan bagian-bagian yang tidak dapat Anda lakukan sendiri, Anda belajar sesuatu dari ini. Jika Anda memiliki masalah atau komentar, beri tahu kami dalam diskusi di bawah setiap artikel - Saya ingin mendengar dari Anda dan melihat tikungan apa yang akan Anda tambahkan. Bagaimanapun, terima kasih untuk membaca dan semoga sukses dengan game Anda!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.