Isi kandungan:

Program 2048 Permainan Sendiri W / Java !: 8 Langkah
Program 2048 Permainan Sendiri W / Java !: 8 Langkah

Video: Program 2048 Permainan Sendiri W / Java !: 8 Langkah

Video: Program 2048 Permainan Sendiri W / Java !: 8 Langkah
Video: How to make 2048 Game with Javascript HTML CSS 2024, November
Anonim

Oleh Laman Web PranP1My (Tidak Lengkap) Ikuti Lagi oleh pengarang:

Mesin CNC Arduino Dari Bahagian PC yang Diselamatkan
Mesin CNC Arduino Dari Bahagian PC yang Diselamatkan
Mesin CNC Arduino Dari Bahagian PC yang Diselamatkan
Mesin CNC Arduino Dari Bahagian PC yang Diselamatkan
Bangku Kayu Moden DIY
Bangku Kayu Moden DIY
Bangku Kayu Moden DIY
Bangku Kayu Moden DIY
Pembuka Pintu Tanpa Sentuhan (vSTEM)
Pembuka Pintu Tanpa Sentuhan (vSTEM)
Pembuka Pintu Tanpa Sentuhan (vSTEM)
Pembuka Pintu Tanpa Sentuhan (vSTEM)

Saya suka permainan 2048. Oleh itu, saya memutuskan untuk memprogram versi saya sendiri.

Ia sangat mirip dengan permainan yang sebenarnya, tetapi memprogramnya sendiri memberi saya kebebasan untuk mengubah apa sahaja yang saya mahukan kapan pun saya mahu. Sekiranya saya mahukan permainan 5x5 dan bukannya 4x4 biasa, perubahan sederhana menggunakan pembina 'Board' akan membolehkan saya melakukannya. Katakanlah saya mahu menjadikan permainan lebih sukar, menambah potongan pada kedudukan yang akan menjadikannya paling rumit untuk pemain dan bukannya secara rawak. Dengan menggunakan algoritma yang mudah, saya boleh melakukannya. Walaupun saya tidak akan merangkumi semua pengubahsuaian ini dalam Instructable ini, saya merancang untuk menambahkan lagi semasa saya pergi.

Namun, buat masa ini, kami akan memprogram permainan khas tahun 2048 anda.

Mari kita mulakan!

(Catatan sampingan: Instructable ini memerlukan pengetahuan pengaturcaraan yang sederhana - khusus dengan Java)

Langkah 1: Bahan

Bahan
Bahan

Anda tidak akan memerlukan banyak projek ini kerana ini hanyalah panduan pengaturcaraan.

Bahan:

  • Komputer riba
  • Gerhana (atau IDE pilihan anda)

Yup. Itu sahaja.

Langkah 2: Kenali Program - Papan

Saya memuat naik semua kod saya ke GitHub - lihat di sini:

Saya membahagikan permainan kepada 3 kelas: Board, Tile dan Game.

Papan:

Penerangan: Kelas Papan berurusan dengan papan permainan, mengatur susunan elemen 'Tile', mendapatkan skor semasa dan jubin tertinggi, dan meletakkan array dalam rentetan (akan digunakan kemudian di 'Game'). Sebilangan besar logiknya juga ada di sini, kelas menyediakan kaedah untuk melahirkan 2 dan 4 di lokasi rawak, bergerak ke atas, bawah, kiri dan kanan, dan memberi tahu pemain apabila permainan sudah berakhir.

Pembina:

/ * Pembina lalai untuk Board - menyediakan matriks 4x4 * /

Lembaga awam () {…}

/ * Konstruktor untuk Papan - siapkan matriks dengan ukuran grid yang ditentukan * /

Lembaga awam (int grid) {…}

Kaedah:

/ * Kaedah getter yang mengembalikan papan * /

jubin awam getBoard () {…}

/ * Kaedah mendapatkan yang mengembalikan skor * /

penilaian int awam () {…}

/ * Mencari jubin tertinggi di papan dan mengembalikannya * /

public int getHighTile () {…}

/ * Mencetak papan ke konsol - untuk tujuan ujian * /

cetakan tidak sah awam () {…}

/ * Mengembalikan papan sebagai String - digunakan dalam GUI * /

String toString awam () {…}

/ * Menelurkan 2 (atau 4) di tempat kosong pada masa gerakan dibuat * /

kekosongan awam () {…}

/ * Memeriksa untuk memastikan sama ada papan hitam sepenuhnya dan jika ada, ia akan mendorong pemain untuk memulakan semula * /

blackOut awam boolean () {…}

/ * Memeriksa untuk mengetahui apakah permainan sudah berakhir - ketika papan dihitamkan dan tidak ada jubin yang dapat bergabung * /

permainan boolean awamLebih () {…}

/ * Dipanggil ketika 'w' atau panah atas ditekan - memanggil 'verticalMove' untuk setiap jubin di papan dengan parameter 'up' * /

kekosongan awam () {…}

/ * Dipanggil ketika panah 's' atau panah bawah ditekan - memanggil 'verticalMove' untuk setiap jubin di papan dengan parameter 'down' * / public void down () {…}

/ * Dipanggil ketika 'd' atau anak panah kanan ditekan - memanggil 'horizontalMove' untuk setiap jubin di papan dengan parameter 'right' * / public void right () {…}

/ * Dipanggil ketika 'a' atau anak panah kiri ditekan - memanggil 'horizontalMove' untuk setiap jubin di papan dengan parameter 'kiri' * /

kekosongan awam kiri () {…}

/ * Membandingkan dua nilai jubin bersama-sama dan jika ia sama atau jika satu sama dengan 0 (jubin biasa) - nilainya ditambahkan (dengan syarat jubin yang kita bandingkan adalah dua jubin yang berbeza dan mereka bergerak ke arah yang sesuai) - bergerak secara berulang secara berturut-turut * /

public void horizontalMove (int baris, int col, String direction) {…}

/ * Membandingkan dua nilai jubin bersama-sama dan jika ia sama atau jika satu sama dengan 0 (jubin biasa) - nilainya ditambahkan (dengan syarat jubin yang kita bandingkan adalah dua jubin yang berbeza dan mereka bergerak ke arah yang sesuai) - bergerak secara berkala melalui lajur * /

public void verticalMove (int baris, int col, String direction) {…}

Ya, itu banyak kaedah - tetapi jangan risau, kebanyakan sangat mudah difahami. Selain itu, kelas 'Board' adalah yang paling kompleks, jadi segala sesuatu selepas ini akan menjadi agak mudah.

Langkah 3: Kenali Program - Jubin

Jubin:

Penerangan: Kelas Tile berkaitan dengan jubin individu, dan merupakan kelas terkecil dari semua kelas. Setiap jubin mempunyai nilai integer dan warna. Ia mempunyai dua pembina yang membuat Tiles dengan nilai 0 (default) atau nilai #. Kaedah ini kebanyakannya dapat dijelaskan sendiri, dengan kaedah 'getter' dan 'setter' membentuk sebahagian besar daripada jumlah keseluruhan.

Pembina:

/ * Membina jubin asas dengan nilai 0 * /

Jubin awam () {…}

/ * Membina jubin dengan nilai nombor * /

jubin awam (nombor int) {…}

Kaedah:

/ * Mendapat nilai jubin * /

public int getValue () {…}

/ * Menetapkan nilai jubin - digunakan semasa menambahkan dua jubin bersama * /

public void setValue (nilai int) {…}

/ * Mewakili jubin sebagai String - digunakan dalam GUI * /

String toString awam () {…}

/ * Menetapkan warna jubin berdasarkan nilainya * /

public void setColor () {…}

/ * Mendapatkan warna jubin * /

getColor tidak sah awam () {…}

Langkah 4: Kenali Program - Permainan

Permainan

Penerangan: Kelas Permainan merangkumi kaedah utama, kebanyakan kaedah GUI dan interaksi Utama. Ia memerlukan kelas Tile dan Board, dan membolehkan mereka bekerjasama.

Pembina:

Tiada

Kaedah:

/ * menyiapkan GUI dengan ukuran yang sesuai dan menambahkan Pendengar Utama * /

himpunan kekosongan statik awamUpGUI () {…}

/ * Memeriksa untuk melihat sama ada tombol wasd atau anak panah ditekan dan melakukan tindakan yang sesuai - mengemas kini JFrame dengan setiap pergerakan * /

kekunci kekosongan awam Ditekan (KeyEvent e) {…}

/ * Warnakan GUI dengan rangkaian rentetan, papan, jubin dan pastikan ia dicat semula ketika permainan berakhir * /

cat kosong awam (Grafik g) {…}

/ * melukis jubin individu - dipanggil dari kaedah cat * /

undian kekosongan awam (Grafik g, Jubin jubin, int x, int y) {…}

/ * Kaedah utama - menyiapkan GUI dan memulakan permainan * /

utama kekosongan statik awam (String args) {…}

Langkah 5: Kaedah Penting - Pergerakan

Kaedah pergerakan adalah yang paling penting untuk difahami, tetapi berita baiknya adalah apabila anda memahami pergerakan menegak, anda dapat menerapkan pemahaman itu pada pergerakan mendatar. Sebenarnya, tiga kaedah pergerakan menegak sama persis dengan tiga pergerakan kaedah mendatar, kecuali satu bergerak melintasi baris dan yang lain merentasi lajur. Untuk itu, mari kita fokus hanya pada kaedah pergerakan menegak.

private void verticalMove (int baris, int col, String arah)

{Permulaan jubin = papan [sempadan] [col]; Jubin membandingkan = papan [baris] [col]; if (initial.getValue () == 0 || initial.getValue () == membandingkan.getValue ()) {if (baris> sempadan || (arah.sama ("bawah") && (baris <sempadan))) {int addScore = initial.getValue () + membandingkan.getValue (); if (initial.getValue ()! = 0) {skor + = addScore; } permulaan.setValue (addScore); membandingkan.setValue (0); }} lain {if (direction.equals ("down")) {border--; } lain {sempadan ++; } verticalMove (baris, kol, arah); }}

Kaedah di atas, verticalMove, dipanggil dengan kaedah 'up' dan 'down'. Mari kita lihat kaedah 'up'.

kekosongan awam ()

{untuk (int i = 0; i <grids; i ++) {border = 0; untuk (int j = 0; j <grids; j ++) {if (papan [j] .getValue ()! = 0) {if (sempadan <= j) {verticalMove (j, i, "atas"); }}}}}

Kaedah ini melalui seluruh papan dan memanggil verticalMove untuk setiap jubin dengan parameter "naik". verticalMove kemudian membandingkan jubin pada kedudukan 'j' dan 'i' dengan jubin di kedudukan 'border' dan 'i'. Sekiranya keduanya sama, mereka digabungkan. Sekiranya tidak, jubin sempadan dinaikkan sebanyak 1 (kerana parameter di tempatnya 'naik'), dan verticalMove dipanggil lagi.

Disyorkan: