Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Game Development
  2. From Scratch
Gamedevelopment

Buat Match-3 Game dalam Membina 2: Chaining and Overs Game

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

Malay (Melayu) translation by Fatimah (you can also view the original English article)

Masa telah tiba: kami hampir selesai dengan permainan kami, dan bersedia untuk melaksanakan mekanik permainan terakhir. Artikel ini akan memberi tumpuan kepada membuat sistem kombo yang memberi pemain lebih banyak mata untuk membuat rantai yang memusnahkan beberapa kumpulan blok selepas hanya satu swap. 

Di samping itu, kami akan melaksanakan senario kehilangan dan menambah skrin Game Over.  Akhirnya, saya akan membincangkan perkara-perkara yang boleh anda lakukan pada masa anda sendiri untuk memperbaiki dan memperluaskan permainan melebihi apa yang telah kita tutupi. Oleh itu, tanpa berlengah lagi, mari bermula ...


Demo Akhir Permainan

Berikut adalah demo permainan yang telah kami jalankan, dan yang akan kami bina pada akhir bahagian ini:




Mencari Perlawanan

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

Semasa bekerja pada artikel ini, saya dapati satu masalah yang dapat anda lihat dalam GIF di bawah:

Match-3 Construct 2 tutorial

Seperti yang dapat anda lihat dalam GIF yang pertama ini, apabila blok jatuh hanya satu jarak blok untuk mencuba dan membentuk satu perlawanan dengan sekumpulan blok di bahagian bawah kejatuhan, ia berfungsi dengan sempurna.

Match-3 Construct 2 tutorial

Dalam GIF kedua, bagaimanapun, menjadi jelas bahawa apabila blok dijatuhkan jarak yang lebih besar dalam senario yang sama, ia gagal untuk mengesan perlawanan sehingga kami melakukan pertukaran lain. Sebabnya ialah permainan ini tidak mencukupi untuk mencocokkan pertandingan.

Sekarang, permainan hanya mencari perlawanan selepas pertukaran, tetapi kerana jumlah masa yang diperlukan Blok untuk jatuh jarak ini, pengesanan perlawanan telah berakhir apabila Blok hits tanah dan sehingga perlawanan tidak dijumpai sampai ia dimulakan semula.

:Untuk membetulkannya, kami akan mengubah suai apabila kami melakukan pemeriksaan FindMatches .

Mula-mula pergi ke fungsi SwapBlocks dan keluarkan Peristiwa akhir dari fungsi supaya ia tidak memanggil FindMatches sama sekali.

SwapBlocks sepatutnya kelihatan seperti ini sekarang:

Match-3 Construct 2 tutorial

Pada ketika ini, tidak terdapat FindMatches panggilan Acara. Kami akan membetulkannya dengan menambah Tindakan baru ke Acara yang mengesan apabila Perlawanan mungkin. Cari Acara ini dan tambah Tindakan ini pada akhir Acara Lain:

Acara anda kini seharusnya kelihatan seperti ini:

Match-3 Construct 2 tutorial

Juga, ambil kesempatan ini untuk memindahkan kedua Peristiwa MatchesPossible ke akhir kod permainan, jika anda belum lagi. Melakukan ini akan memastikan bahawa mereka tidak dipanggil sama sekali sebelum kod yang menghapuskan pencocokan pra-dibuat.

Jika anda menjalankan permainan sekarang, anda sepatutnya dapat melaksanakan senario yang saya sampaikan di atas tanpa masalah.


Chaining

Dengan isu itu tetap, kami akan melaksanakan sistem chaining , yang memberikan pemain mata tambahan untuk perlawanan yang disebabkan oleh pemusnahan perlawanan lain.

Anda boleh melihat contoh keadaan yang saya maksudkan di bawah:

Match-3 Construct 2 tutorial

Dalam senario di atas, pemain bergerak blok hijau dan mencipta perlawanan.Kemudian, pemusnahan blok hijau menyebabkan blok biru jatuh dan mencipta satu lagi detik perlawanan kemudian.

Saya mahu memberi mata bonus pemain untuk mencapai sesuatu seperti ini.Khususnya, saya ingin memohon pengganda kepada jumlah mata pemain yang diterima untuk setiap perlawanan, dan meningkatkan multiplier dengan setiap perlawanan berturut-turut yang dibuat.

Membuatnya Bekerja

Untuk membuat sistem ini berfungsi, kami akan membuat pembolehubah baru yang dikenali sebagai Chain , dan kemudian membuat sedikit pengubahsuaian kepada fungsi yang sedia ada. Jadi, mula-mula buat Pembolehubah Global yang baru:

Pemboleh ubah anda sepatutnya kelihatan seperti berikut:

Match-3 Construct 2 tutorial

Pembolehubah ini akan bertindak sebagai pengganda bagi mata untuk memberitahu berapa lama rantaian telah berlaku.

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

Sekarang pergi ke FindMatches sendiri dan cari lokasi di mana anda membuat objek FloatingPointsText . Ubah suai penyataan teks Set supaya mereka menggunakan formula baru:

Perubahan ini menjadikan teks terapung diubah suai dengan cara yang sama bahawa Poin sendiri akhirnya akan.

Seterusnya, pergi ke bahagian FindMatches di mana anda menelefon FindMatches sekali lagi pada akhir Acara, dan hapuskan panggilan fungsi ini dan penyataan Tunggu. Mengapa? Kerana, jika kita tidak mengeluarkannya, maka FindMatches akan akhirnya dipanggil terlalu banyak dan rantai tidak akan dimulakan dengan betul.

(Oleh sebab perubahan yang telah dibuat sebelum ini dalam artikel ini,FindMatches akan dipanggil apabila semua Blok berada dalam grid dan tidak ada yang jatuh. Memandangkan beberapa kawasan di mana kita panggilFindMatches hanya akan menyebabkan banyak contoh fungsi yang akan berjalan pada masa yang sama , dan boleh merosakkan sistem mata.)

Akhir sekali, kami akan membuat satu perubahan lain untuk fungsi ini. Pergi ke hujung fungsi dan tambah Tindakan ini selepas anda menetapkan PointsGivenke 0 :

Sekarang, apabila permainan mendapati perlawanan, ia memberikan titik pemain, memusnahkan blok, dan kemudian meningkatkan nilai Rantai .

Versi baru FindMatches harus kelihatan seperti ini:

Match-3 Construct 2 tutorial

Seterusnya, pergi ke fungsi GivePoints dan ubahsuai kedua-dua Tindakan yang meningkatkan nilai Markah supaya mereka mengambil nilai Rantaian berkenaan:

Dengan perubahan ini, GivePoints kini seharusnya kelihatan seperti ini:

Match-3 Construct 2 tutorial

Menetapkan semula Rantai

Kami telah melaksanakan Rantaian berubah sebagai pengganda untuk mata yang diterima oleh pemain (dan bilangan mata yang dipaparkan dalam objek teks terapung), tetapi masih ada satu perkara yang perlu kita lakukan: kita perlu menambah satu pernyataan yang mengeset semula nilai Rantaian supaya ia tidak hanya akan meningkat secara tak terhingga.

Kami akan menambah pernyataan ini kepada Acara Mula Pada DragDrop supaya, apabila pemain mula menyeret Blok baru, ia dianggap sebagai Rantaian baru. Alasan lain yang kita lakukan di sini adalah kerana ia menghalang nilai Rantaian daripada ditetapkan semula secara awal, sehingga membuat semua pertandingan di bagian terakhir Rantaian kurang berharga.

Pergi ke Acara Mula Pada DragDrop dan tambahkan Tindakan ini ke senarai Tindakan:

Acara anda kini seharusnya kelihatan seperti ini:

Match-3 Construct 2 tutorial

Jika anda menguji permainan pada ketika ini, anda harus melihat bahawa jika anda membuat rantai seperti yang ditunjukkan dalam gif tadi, anda menerima 90 mata dan bukannya 60 mata.

Dengan kerja itu, sistem penalaan selesai dan anda sepatutnya dapat mencipta sebagai menghuraikan rantaian yang anda inginkan tanpa masalah.


Memperbaiki Kejatuhan

Perkara seterusnya yang saya ingin capai ialah masalah yang saya dapati dengan sistem Blok yang jatuh. Jika anda menghabiskan banyak masa bermain permainan Match-3 kami dalam keadaan semasa, anda mungkin menyedari masalah di mana, setiap sekarang dan kemudian, Blok akan gagal jatuh walaupun tidak ada Blok di bawahnya.

Anda boleh melihat apa yang saya maksud dalam imej di bawah:

Match-3_Game_Construct-2_BrokenFalling

Walaupun tidak terdapat Blok di bawah Blok kuning, ia masih gagal jatuh ke dalam ruang kosong. Ini adalah masalah yang jarang berlaku, tetapi jika ia tidak ditangani, ia masih boleh merosakkan skor seseorang dan menghalang mereka daripada menerima rantaian yang mereka tetapkan, atau bahkan menyebabkan mereka kehilangan sebaik sahaja kita menambah ciri Game Over.

Isu ini datang dari variable BlockBeingMoved , yang digunakan oleh Event yang menentukan ketika Blok harus jatuh untuk memastikan tidak ada Blok yang dipindahkan ketika memberitahu Blok untuk mengisi ruang kosong. Dalam sesetengah senario, apabila pemain memindahkan Blok, pembolehubah ini tidak akan ditetapkan semula, dan Blok tidak jatuh sehingga Blok lain dipindahkan dan ia diset semula dengan betul. Untuk membetulkan ini, kami akan menambah sepasang Peristiwa yang akan menetapkan dan menetapkan semula pembolehubah ini dengan betul, dan kami akan mengalih keluar Tindakan semasa yang menetapkan pemboleh ubah, kerana ia tidak berfungsi dengan betul. Untuk membetulkan ini, kami akan menambah sepasang Peristiwa yang akan menetapkan dan menetapkan semula pembolehubah ini dengan betul, dan kami akan mengalih keluar Tindakan semasa yang menetapkan pemboleh ubah, kerana ia tidak berfungsi dengan betul.

Pertama, pergi ke OnDragDrop Start dan On DragDrop Drop Events, dan keluarkan semua Tindakan yang berurusan dengan pembolehubah BlockBeingMoved dari Acara ini. Harus ada satu Tindakan dalam setiap Acara yang perlu dipadamkan.

Seterusnya, pergi ke Acara yang mengesan apabila ada ruang kosong di bawah Blok. Kami akan memodifikasi Syarat Acara ini.  Pertama pastikan bahawa Syarat yang memeriksa sama ada BlockBeingMoved bersamaan dengan 0 adalah pada permulaannya. Kemudian, tambahkan satu lagi keadaan pada akhir Acara yang menyemak untuk memastikan tiada Blok sedang dipindahkan.

Inilah syarat yang akan anda tambah:

Acara anda kini seharusnya kelihatan seperti ini:

Match-3_Game_Construct-2_ModifiedBlockFalling

Akhirnya, kami akan menambah dua lagi Peristiwa pada akhir Lembaran Event yang akan mengendalikan pemboleh ubah BlockBeingMoved . Pergi ke hujung Lembaran Acara anda dan tambah Peristiwa ini:

Peristiwa baru anda harus kelihatan seperti ini:

Match-3_Game_Construct-2_BlockBeingMovedEvent

Acara-acara ini secara berkesan akan mengubah BlockBeingMoved dari 0 hingga 1 dan dari 1 hingga 0 setiap kali Blok sedang dipindahkan, atau tidak dipindahkan, masing-masing. Jika anda menguji permainan pada ketika ini, anda sepatutnya dapat bermain seberapa banyak yang anda inginkan tanpa menghadapi masalah dengan Blok jatuh.


Permainan tamat

Sekarang bahawa sistem chaining kami ada, kami akan menambah senario kehilangan dan skrin Permainan Over.

Perkara pertama yang perlu kita lakukan ialah menambah Layout baru yang akan bertindak sebagai Skrin Permainan Kami:

  1. Di sebelah kanan skrin, klik kanan folder Layouts , dan pilih Tambah Layout .
  2. Pilih Tambah Lembaran Acara.
  3. Pergi ke Layout baru dan buat objek BG Tile yang baru.
    1. Pilih imej GameOverBGTile.png dari folder BG Images dalam pek grafik yang anda muat turun semasa tutorial pertama.
    2. Tetapkan Posisi ke -6, -7 .
    3. Tetapkan Saiz kepada 613, 619 .
  4. Buat objek Sprite baru.
    1. Pilih imej GameOverText.png dari pek grafik.
    2. Tetapkan Kedudukan kepada 303, 200 .
  5. Buat objek Butang baru.
    1. Tetapkan Nama untuk RestartButton .
    2. Tetapkan Kedudukan kepada 262, 410 .
    3. Tetapkan Saiz kepada 100, 30 .
    4. Tetapkan Teks untuk Restart .

Sekarang bahawa anda mempunyai set permainan Game Over anda, kembali ke Layout asal anda, Layout 1 , dan tambahkan satu item baru ke skrin itu:

  1. Pada Layout 1, buat objek Sprite baru.
  2. Gunakan alat Cat Bucket untuk cat coretan ini sepenuhnya merah.
  3. Tutup editor animasi.
  4. Tetapkan Nama ke GameOverArea .
  5. Tetapkan Kedudukan ke 196, -30 .
  6. Tetapkan Saiz menjadi 344, 150 .
  7. Tetapkan Opacity ke 0 .

Anda harus perhatikan bahawa sprit ini berada pada kedudukan yang sama, dan saiz yang sama, sebagai bahagian atas medan permainan.  Kami akan menggunakan objek sprit ini untuk mengesan apabila pemain telah hilang dengan mengesan apabila blok bertabrakan dengannya. Pergi ke Lembaran Acara 1 supaya kami dapat melaksanakannya.

Menghentikan Blok di Atas

Sebelum kita mula mengesan senario kehilangan, kita perlu menambah pemboleh ubah baru yang akan kita gunakan untuk menghentikan blok apabila mereka memukul objek GameOverArea supaya mereka tidak lagi bergerak. Ini akan menjelaskan kepada pemain bahawa mereka telah hilang.

Sekarang pergi ke Acara di mana anda menggerakkan blok dan menambah syarat ini:

Peristiwa pergerakan anda kini seharusnya kelihatan seperti ini:

Match-3 Construct 2 tutorial

Sekarang bahawa pergerakan menggunakan pemboleh ubah baru kami, kami akan menambah Acara yang mengesan keadaan kehilangan:

Acara yang kami buat akan memanggil fungsi Over Game sekali Blok bertindih di GameOverArea . Kini kita sebenarnya akan membuat fungsi GameOver .

Peristiwa baru dua anda sepatutnya kelihatan seperti ini:

Match-3_Game_Construct-2_GameOverEvents

Alasan bahawa kami mencipta fungsi berasingan dan bukan melakukan tindakan ini dalam Acara yang sebenarnya mengesan permainan, adalah bahawa Acara ini hanya melihat Blok tertentu kerana Acara yang mencetuskannya. Seperti yang anda dapat lihat dalam fungsi yang kami buat, kami melumpuhkan ciri-ciri Blok yang menyekat untuk mengelakkan pemain daripada terus membuat perlawanan selepas permainan lebih dikesan.  Jika kami melakukan ini dalam acara yang mengesan permainan, ia hanya akan melumpuhkan Blok yang menyebabkan permainan berakhir, dan setiap Blok yang lain masih dapat diseret.

Sekarang, pergi ke Event Sheet 2 ; kami akan menambah beberapa fungsi ke objek RestartButton yang kami buat sebelumnya. Tambah Acara baru ke Event Sheet 2 :

Acara anda sepatutnya kelihatan seperti ini:

Match-3 Construct 2 tutorial

Menetapkan semula Nilai

Jika anda bermain permainan sekarang, dapatkan permainan, dan kemudian mulakan semula, anda perlu perhatikan bahawa ia kembali ke Layout asal, tetapi blok tidak bergerak. Alasannya ialah semua pembolehubah yang kami gunakan adalah Pembolehubah Global, jadi sebahagian daripada mereka tidak ditetapkan semula secara automatik apabila kami memulakan semula Layout.

Untuk menetapkan semula mereka, kami perlu menambah Tindakan ke Acara Permulaan Layout kami yang akan menetapkan semula secara manual untuk kami.

Pergi ke Acara Permulaan Layout dan tambahkan Tindakan ini ke Peristiwa Awal sebelum Gelung Untuk dipanggil:

Acara anda kini seharusnya kelihatan seperti ini:

Match-3 Construct 2 tutorial

Sekiranya anda menguji lagi, anda tidak sepatutnya mempunyai masalah ini lagi.


Apa yang Harus Anda Lakukan Seterusnya?

Pada ketika ini, kami telah mencapai setiap ciri yang saya ingin capai dalam skop tutorial ini.

Anda akan perasan bahawa permainan anda masih tidak sama dengan yang ada dalam demo di atas, dengan perbezaan terbesar ialah permainan anda tidak mempunyai skrin Mula. Saya memilih untuk tidak melewati penciptaan skrin Mula, kerana ia hampir sama persis dengan membuat skrin Game Over - Saya meninggalkan ini sebagai latihan untuk anda.

Sebaliknya, saya akan membincangkan beberapa ciri yang boleh anda pertimbangkan untuk menambah permainan anda yang boleh menjadikannya lebih baik atau lebih menarik.


Blok Specialty

Perkara pertama yang saya ingin bincangkan adalah blok khusus - blok yang memberi bonus pemain atau melakukan beberapa fungsi unik.

Kebanyakan perlawanan Match-3 termasuk blok khusus untuk membantu memecahkan tindakan dan membuat permainan lebih menarik. Seperti yang dikatakan, permainan secara teorinya boleh berlangsung selama-lamanya, tetapi permainan tidak pernah berubah.  Memperkenalkan jenis blok khas setiap sekarang dan kemudian dapat membantu membuat permainan lebih menarik apabila ia telah berjalan beberapa lama.

Untuk mengintegrasikan blok khusus anda perlu mengubah cara blok dijana, supaya setiap blok dibuat, peluang rawak akan menjadi blok khusus. Terdapat beberapa cara untuk melakukan ini, tetapi secara amnya adalah yang terbaik untuk hanya menghasilkan nombor rawak antara 1 dan 100 dan hanya menghasilkan blok khusus apabila nilai rawak adalah antara 95 dan 100, atau beberapa julat lain yang anda pilih.

Matlamat anda adalah untuk membuat Blok khusus jarang, tetapi tidak terlalujarang. Dengan cara ini, pemain akan mendapatkannya secara berkala untuk membuat permainan lebih menyeronokkan, tetapi tidak begitu kerap bahawa ia memusnahkan keseimbangan permainan.

Blok Bom

Apabila ia datang kepada blok khusus anda mempunyai banyak pilihan; salah satu yang paling biasa adalah blok bom .

Blok bom menyebabkan blok tambahan dimusnahkan apabila ia dimusnahkan.Mereka berbeza dalam setiap permainan: dalam beberapa permainan, mereka memusnahkan semua Blok yang mengelilingi mereka; pada yang lain, mereka memusnahkan keseluruhan baris atau lajur Blok.

Dalam imej di bawah, anda dapat melihat dua jenis blok bom dari permainan Candy Crush Saga yang popular :

Match-3 Construct 2 tutorial

Blok bom biasanya cukup mudah untuk diintegrasikan:

  • Mulakan dengan Acara yang mendengar kemusnahan sebarang blok bom.
  • Apabila seseorang dimusnahkan, ia harus lulus kedudukannya menjadi satu fungsi yang kemudian akan mencari dan memusnahkan semua blok yang juga akan dimusnahkan oleh blok bom itu.
  • Contohnya, jika blok bom anda sepatutnya memusnahkan semua blok di sekeliling, anda akan lulus kedudukan blok bom ke fungsi yang akan melihat setiap kedudukan sekeliling untuk melihat sama ada terdapat sebarang blok di sana.
  • Jika ia mendapati apa-apa blok dalam kedudukan ini, maka ia akan memusnahkannya.

Blok Masa-Perlahan atau Blok Masa

Satu lagi jenis blok khusus yang anda akan dapati dalam banyak permainan adalah salah satu yang melambatkan seberapa cepat blok yang bergerak, atau menghentikannya sepenuhnya.

Blok seperti ini sangat mudah dibuat.

  • Sama seperti blok bom, anda memerlukan acara yang mendengarkan apabila salah satu Blok ini dimusnahkan.
  • Setiap kali ini berlaku, anda harus menukar MovementsPossible ke 1 supaya blok akan berhenti, atau mengubah speed supaya blok bergerak dengan perlahan.
  • Kemudian, anda perlu memulakan pemasa yang berlangsung selama tempoh masa yang singkat, mungkin 10 - 15 saat. Apabila pemasa itu berakhir, anda akan menetapkan semula kelajuan blok dan teruskan dengan normal.

Anda perlu ingat untuk memaklumkan pemain mengaktifkan blok perhentian sementara blok hentian lain sudah aktif. Dalam senario ini, anda perlu memulakan pemasa atau menambah panjang piawai pemasa kepada pemasa yang sedia ada dan teruskan secara normal.


Mod Permainan Lain

Anda juga boleh mempertimbangkan menambah mod permainan lain apabila pemain bosan dengan mod Endless yang kami buat.

Mod Masa

Mod permainan yang paling mudah untuk ditambah adalah di mana pemain mempunyai had masa, dengan matlamat mereka untuk mendapatkan mata sebanyak yang mereka boleh sebelum masa habis.

Dalam senario ini, anda akan meninggalkan semua kod permainan yang tidak disentuh kecuali untuk menambah keadaan kehilangan kedua ke permainan, di mana permainan berakhir apabila pemasa habis (serta ketika Blok melanda bahagian atas skrin).

Apabila permainan bermula, anda akan memulakan pemasa untuk jumlah masa mod berlangsung, dan apabila pemasa berakhir anda akan menamatkan permainan dengan cara yang sama seperti yang anda lakukan sekarang.

Mod Puzzle

Dalam mod permainan ini, anda akan memberi pemain papan permainan yang sangat spesifik yang anda reka terlebih dahulu dan meminta mereka untuk menghapuskan semua blok dalam sesetengah swap yang mungkin.

(Anda mungkin mahu mematikan pergerakan blok, kerana jika blok sedang bergerak, terdapat juga blok baru yang ditambahkan dari masa ke masa.)

Mod ini memerlukan anda untuk menyediakan grid blok tertentu, jadi anda perlu mempunyai sistem yang membolehkan anda melewati persediaan blok tertentu apabila permainan bermula dan bukannya menjana satu sepenuhnya secara rawak seperti yang kita buat sekarang.

Di samping itu, walaupun mod permainan ini agak mudah dilaksanakan, ia memerlukan anda melakukan banyak reka bentuk teka-teki manual supaya anda dapat membuat banyak teka-teki yang unik untuk pemain untuk mencuba dan menyelesaikannya.

Menambah mod permainan seperti ini boleh memakan masa yang cukup kerana semua penciptaan kandungan diperlukan, tetapi terdapat banyak pemain yang akan menikmatinya. Ia benar-benar boleh membayar dengan baik jika anda meletakkan pada masa itu.


Kesimpulannya

Sepanjang siri tutorial ini, kami membina keseluruhan pertandingan-3 permainan dari awal hingga akhir. Terdapat banyak lagi yang boleh anda lakukan dengan permainan ini jika anda meluangkan masa dan mempunyai imaginasi, tetapi terdapat juga banyak cara anda boleh menggunakan idea yang saya sampaikan untuk membantu anda dengan projek permainan lain.

Terus bekerja pada permainan anda, dan terus meneroka idea-idea baru, kerana anda tidak pernah tahu apabila sesuatu yang anda pelajari di sini mungkin berguna kemudian.

Saya berharap bahawa, sama ada anda melalui seluruh siri atau hanya melangkau ke bahagian-bahagian yang anda tidak dapat lakukan dengan sendiri, anda belajar sesuatu dari ini.  Jika anda mempunyai sebarang isu atau komen, beritahu kami dalam perbincangan di bawah setiap artikel - Saya ingin mendengar daripada anda dan melihat apa yang anda akan tambah. Dalam sebarang kes, terima kasih kerana membaca dan nasib baik dengan permainan anda!

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.