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

Menciptakan Game Puzzle Berbasis Grid Seperti Minesweeper dengan Menggunakan Unity: Kemenangan

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called Build a Grid-Based Puzzle Game Like Minesweeper in Unity.
Build a Grid-Based Puzzle Game Like Minesweeper in Unity: Interaction

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

Di bagian akhir dari seri ini, kami menempatkan sentuhan akhir pada permainan puzzle Unity berbasis grid, dan membuatnya dapat dimainkan. Pada akhir bagian ini, pemain akan bisa menang atau kalah dalam permainan.

Sekarang setelah Anda menyelesaikan tutorial sebelumnya, permainan kami bisa menciptakan bidang tile, dan menetapkan ranjau secara acak ke mereka. Kami juga memiliki efek cahaya yang bagus saat pemain melayang di atas tile dengan mouse, dan mungkin juga untuk menempatkan dan melepaskan bendera.

Secara internal, setiap tile juga tahu tentang tile yang berdekatan, dan sudah bisa menghitung berapa banyak ranjau yang berada di dekatnya.

Mengungkap Ubin

Kami sudah menambahkan kemampuan untuk menempatkan bendera dengan klik kanan. Sekarang, mari tambahkan kemampuan untuk mengungkap tile dengan klik kiri.

Pada fungsi OnMouseOver (), di mana kita memiliki kode pengenal klik, kita perlu mengenali klik kiri. Sesuaikan fungsinya agar terlihat seperti ini:

Saat tombol kiri mouse ditekan, fungsi UncoverTile () akan dipanggil. Pastikan Anda membuat fungsi ini, sehingga hal ini tidak menyebabkan bug!

Untuk tahap ini, kita membutuhkan material baru. 

Buatlah sesuatu yang memiliki warna berbeda dari tile dasar-sehingga jika tile dasar Anda berwarna biru, Anda bisa memilih hijau untuk keadaan yang tidak terungkap. Tapi jangan gunakan warna merah; Kita akan membutuhkannya nanti untuk menunjukkan bahwa kita telah memicu janjau.

Saat memanggil fungsi itu, hal berikut akan terjadi:

  • Pertama, kita periksa apakah tile benar-benar diranjau.
  • Jika tidak, kami mengatur agar posisi tidak terungkap, mengaktifkan tampilan teks yang menunjukkan jumlah ranjau di dekatnya, dan mengatur materi ke materi yang tidak ditemukan.
  • Setelah itu, tile tidak bisa diklik lagi, dan juga tidak akan menyala lagi, yang berarti umpan balik pasif dari tile yang bereaksi terhadap kursor mouse hanya akan terjadi pada tile yang sebenarnya bisa kita klik.

Sebelum kita bisa mencoba ini, kita perlu memastikan bahwa materi tidak berubah saat kursor mouse keluar dari tile. Untuk ini, sesuaikan fungsi OnMouseExit () seperti dibawah ini:

Dengan cara ini, warnanya hanya akan dinyalakan kembali jika tile belum terbongkar.

Cobalah! Anda harus bisa membuka tile. Jika sebuah tile diranjau, maka tidak akan terjadi apa-apa sekarang.

Membuat tile Kosong Membuka Satu Sama Lain

Ini akan sedikit rumit. Di Minesweeper, saat Anda menemukan tile tanpa ranjau di sebelahnya, akan membuka semua ubin yang bersebelahan dengan itu yang juga tidak memiliki ranjau, dan tile yang berdekatan dengan mereka yang tidak memiliki ranjau, dan seterusnya.

Pertimbangkan bidang ini:

Kita tidak benar-benar melihat angka atau ranjau, hanya tile biasa.

Bila tile dengan nol di dekat ranjau ditemukan, semua tile di sampingnya harus secara otomatis terbuka juga. Tile yang tidak terbuka kemudian membuka semua tetangganya.

tile yang baru ditemukan ini kemudian akan memeriksa tetangga mereka juga, dan, jika tidak ada ranjau, maka bukalah semua.

Ini akan bergejolak melalui bidang sampai kita mencapai tile yang benar-benar memiliki ranjau yang berdekatan dengan mereka, di mana ia akan berhenti.

Ini menciptakan area kosong yang bisa kita lihat di Minesweeper.

Untuk membuat karya ini, kita memerlukan dua fungsi lagi, UncoverAdjacentTiles () dan UncoverTileExternal ():

Kita juga perlu melakukan modifikasi ini pada fungsi UncoverTile ():

Saat kita menemukan tile, dan tidak ada ranjau di sebelahnya, kita memanggil fungsi UncoverAdjacentTiles (). Ini kemudian memeriksa setiap tile didekatnya untuk melihat apakah ia memiliki ranjau atau tidak.  Jika tidak ada, ia juga akan menemukan tile ini, dan memulai pemeriksaan lainnya. Jika ada ranjau di dekatnya, itu akan membuka tile yang ditemukan saat itu.

Sekarang, cobalah. Untuk mendapatkan kesempatan yang baik dari sebuah bidang kosong yang muncul, buatlah bidang yang agak besar dengan beberapa ranjau - katakanlah, 81 tile, dengan sembilan tile per baris, dan 10 ranjau secara total.

Anda sebenarnya bisa memainkan ini sebagai permainan, kecuali bahwa Anda belum bisa memicu ranjau. Kami akan menambahkan fitur itu selanjutnya.

Memicu Ranjau

Saat kita menemukan tile yang diranjau, permainan berhenti dan pemainnya kalah. Selain itu, semua tile bekas lainnya terlihat. Agar hal ini terjadi, kita membutuhkan satu material lagi, untuk tile ranjau yang diledakkan:

Saya sarankan menggunakan sesuatu yang merah untuk ini.

Selain itu, kita perlu menambahkan dua fungsi lagi untuk menangani ledakan semua ranjau:

Kami memicu metode tersebut di fungsi UncoverTile ():

Jika tile diranjau, tilenya akan meledak. Fungsi Explode () kemudian mengirimkan perintah "meledak" ke semua tile lain dengan ranjau, membuka semuanya.

Memenangkan Game

Pertandingan dimenangkan begitu semua tile dengan ranjau telah ditandai dengan benar. Pada titik ini, semua tile yang tidak ditemukan juga terbongkar. Jadi bagaimana kita melacak itu?

Mari kita mulai dengan menambahkan variabel state ke Gridclass, sehingga kita bisa melacak bagian permainan mana yang sedang kita mainkan (masih diputar, hilang, atau dimenangkan).

Sementara kita melakukannya, kita juga bisa mulai menambahkan GUI sederhana, sehingga kita bisa menampilkan informasi yang diperlukan di layar. Unity hadir dengan sistem GUI tersendiri yang akan kita gunakan untuk ini.

Ini akan menunjukkan kepada kita posisi bagian mana kita berada saat ini. Kita akan memanggil posisi-posisi ini dalamGame, gameOver, dan gameWon.

Kita juga bisa menambahkan cek ke Tile, untuk memastikan kita hanya bisa berinteraksi dengantile ketika posisi permainan saat ini adalah inGame.

Pada fungsi OnMouseOver () dan OnMouseExit, pindahkan semua kode yang ada ke dalam sebuah blok untuk memeriksa apakah Grid.state saat ini adalah  inGame, seperti:

Sebenarnya ada dua cara untuk memeriksa apakah permainan telah dimenangkan: kita dapat menghitung berapa banyak tambang yang ditandai dengan benar, atau kita dapat memeriksa apakah semua tile yang bukan ranjau telah ditemukan. Untuk itu, kita membutuhkan variabel berikut; tambahkan mereka ke Gridclass:

Jangan lupa untuk mengatur minesRemaining  dalam fungsi Start () ke numberOfMines, dan variabel lainnya menjadi 0. Fungsi Start () sekarang seharusnya terlihat seperti ini:

Baris terakhir menetapkan status untuk permainan. (Ini akan menjadi penting saat kita ingin memperkenalkan fungsi "restart" nanti.)

Kita kemudian akan memeriksa kondisi akhir permainan di fungsi Update ():

Kitamenyelesaikan permainan dengan menetapkan status untuk gameWon, membuka semua tile yang tersisa, dan menandai semua tambang yang tersisa:

Agar semua ini berhasil, kita perlu meningkatkan variabel yang melacak kemajuan kita di tempat yang tepat. Adaptasikan fungsi UncoverTile () untuk melakukan itu:

Lakukan juga hal yang sama pada fungsi UncoverTileExternal() :

Kita juga perlu menaikkan dan menurunkan variabel minesMarkedCorrectly dan minesRemaining  tergantung pada apakah sebuah bendera telah ditetapkan:

Kekalahan pada Game

Dengan cara yang sama, kita perlu membuat kemungkinan kekalahan game. Kami melakukannya melalui fungsi Explode () di dalam tile.

Cukup tambahkan baris ini ke fungsi Explode ():

Begitu garis itu dijalankan, keadaan permainan beralih ke gameOver, dan tile tidak dapat lagi berinteraksi dengannya.

Menambahkan GUI yang Lebih Fungsional

Kami menggunakan GUI dari Unity untuk memberi tahu pemain mana status permainan yang sedang mereka masuki. Sekarang kami akan memperluasnya untuk menampilkan beberapa pesan aktual.

Kerangka untuk ini terlihat seperti berikut:

Bergantung pada posisi, pesan berbeda bisa ditampilkan di GUI. Jika permainan kalah atau menang, misalnya kita bisa menampilkan pesan yang mengatakan demikian:

Kita juga dapat menunjukkan jumlah ranjau yang ditemukan sejauh ini, atau menambahkan tombol yang memuat ulang level setelah permainan selesai:

Anda bisa mencobanya semuanya dalam tutorial terakhir ini!

Kesimpulan

itulah kuncinya! Kita telah menciptakan permainan puzzle sederhana dengan Unity, yang bisa Anda gunakan sebagai dasar untuk menciptakan milik Anda sendiri. Saya harap Anda menikmati serial ini; tolong ajukan pertanyaan yang anda punya di komentar!

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.