Daftar Isi:

Program Game 2048 Anda Sendiri dengan Java!: 8 Langkah
Program Game 2048 Anda Sendiri dengan Java!: 8 Langkah

Video: Program Game 2048 Anda Sendiri dengan Java!: 8 Langkah

Video: Program Game 2048 Anda Sendiri dengan Java!: 8 Langkah
Video: How to Make a Game like 2048 - Part 1 - Setup 2024, Juli
Anonim

Oleh PranP1My (Tidak Lengkap) SiteFollow More by the author:

Mesin CNC Arduino Dari Suku Cadang PC yang Diselamatkan
Mesin CNC Arduino Dari Suku Cadang PC yang Diselamatkan
Mesin CNC Arduino Dari Suku Cadang PC yang Diselamatkan
Mesin CNC Arduino Dari Suku Cadang PC yang Diselamatkan
Bangku Kayu Modern DIY
Bangku Kayu Modern DIY
Bangku Kayu Modern DIY
Bangku Kayu Modern DIY
Pembuka Pintu Tanpa Kontak (vSTEM)
Pembuka Pintu Tanpa Kontak (vSTEM)
Pembuka Pintu Tanpa Kontak (vSTEM)
Pembuka Pintu Tanpa Kontak (vSTEM)

Saya suka game 2048. Jadi saya memutuskan untuk memprogram versi saya sendiri.

Ini sangat mirip dengan permainan yang sebenarnya, tetapi memprogramnya sendiri memberi saya kebebasan untuk mengubah apa pun yang saya inginkan kapan pun saya mau. Jika saya menginginkan game 5x5 alih-alih 4x4, perubahan sederhana menggunakan konstruktor 'Papan' akan memungkinkan saya melakukannya. Katakanlah saya ingin membuat permainan lebih sulit, menambahkan potongan pada posisi yang akan membuatnya paling rumit bagi pemain daripada secara acak. Menggunakan algoritma sederhana, saya bisa melakukan hal itu. Meskipun saya tidak akan membahas semua modifikasi ini di Instructable ini, saya berencana untuk menambahkan lebih banyak saat saya pergi.

Namun, untuk saat ini, kami akan memprogram game khas Anda di tahun 2048.

Mari kita mulai!

(Catatan tambahan: Instruksi ini membutuhkan pengetahuan pemrograman yang moderat - khususnya dengan Java)

Langkah 1: Bahan

Bahan
Bahan

Anda tidak perlu banyak untuk proyek ini karena ini hanya panduan pemrograman.

Bahan:

  • Laptop
  • Eclipse (atau IDE apa pun pilihan Anda)

Ya. Itu dia.

Langkah 2: Kenali Programnya - Papan

Saya mengunggah semua kode saya ke GitHub - lihat di sini:

Saya membagi game menjadi 3 kelas: Board, Tile, dan Game.

Papan:

Deskripsi: Kelas Board berurusan dengan gameboard, menyiapkan larik elemen 'Ubin', mendapatkan skor saat ini dan ubin tertinggi, dan menempatkan larik dalam string (untuk digunakan nanti di 'Game'). Sebagian besar logika juga ada di sini, kelas menyediakan metode untuk memunculkan 2 dan 4 di lokasi acak, bergerak ke atas, bawah, kiri dan kanan, dan memberi tahu pemain saat permainan selesai.

Konstruktor:

/* Konstruktor default untuk Board - menyiapkan matriks 4x4 */

Dewan publik() {…}

/* Konstruktor untuk Board - menyiapkan matriks dengan ukuran grid yang ditentukan */

Papan publik (int grid) {…}

Metode:

/* Metode pengambil yang mengembalikan papan */

Ubin publik getBoard() {…}

/* Metode pengambil yang mengembalikan skor */

publik int getScore() {…}

/* Menemukan ubin tertinggi di papan dan mengembalikannya */

publik int getHighTile() {…}

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

cetak batal publik() {…}

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

String publik toString() {…}

/* Memunculkan 2 (atau 4) di ruang kosong saat gerakan dilakukan */

kekosongan publik spawn() {…}

/* Memeriksa untuk melihat apakah papan benar-benar gelap dan jika ya, itu akan mendorong pemain untuk memulai kembali */

blackOut boolean publik() {…}

/* Memeriksa apakah permainan sudah selesai - saat papan menjadi gelap dan tidak ada ubin yang dapat digabungkan */

gameOver boolean publik() {…}

/* Dipanggil saat 'w' atau panah atas ditekan - memanggil 'vertikalMove' untuk setiap ubin di papan dengan parameter 'naik' */

kekosongan publik atas() {…}

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

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

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

kekosongan publik kiri() {…}

/* Membandingkan dua nilai ubin bersama-sama dan jika keduanya sama atau jika satu sama dengan 0 (ubin polos) - nilainya ditambahkan (asalkan ubin yang kita bandingkan adalah dua ubin berbeda dan bergerak ke arah yang sesuai) - bergerak secara rekursif melalui baris */

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

/* Membandingkan dua nilai ubin bersama-sama dan jika keduanya sama atau jika satu sama dengan 0 (ubin polos) - nilainya ditambahkan (asalkan ubin yang kita bandingkan adalah dua ubin berbeda dan bergerak ke arah yang sesuai) - bergerak secara rekursif melalui kolom */

public void verticalMove (int baris, int col, Arah string) {…}

Ya, itu banyak metode - tapi jangan khawatir, sebagian besar sangat mudah dimengerti. Selain itu, kelas 'Papan' adalah yang paling kompleks, jadi semuanya setelah ini akan relatif sederhana.

Langkah 3: Kenali Programnya - Tile

Ubin:

Deskripsi: Kelas Tile berhubungan dengan ubin individu, dan merupakan yang terkecil dari semua kelas. Setiap ubin memiliki nilai integer dan warna. Ini memiliki dua konstruktor yang membuat Ubin nilai 0 (default) atau nilai #. Metode-metodenya sebagian besar cukup jelas, dengan metode 'pengambil' dan 'penyetel' merupakan sebagian besar dari total.

Konstruktor:

/* Membangun ubin dasar dengan nilai 0 */

Ubin publik() {…}

/* Membuat petak dengan nilai angka */

Ubin publik (nomor int) {…}

Metode:

/* Mendapatkan nilai ubin */

publik int getValue() {…}

/* Menetapkan nilai ubin - digunakan saat menambahkan dua ubin bersama */

public void setValue (nilai int) {…}

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

String publik toString() {…}

/* Mengatur warna ubin berdasarkan nilainya */

public void setColor() {…}

/* Mendapatkan warna ubin */

public void getColor() {…}

Langkah 4: Kenali Programnya - Game

Permainan

Deskripsi: Kelas Game menampung metode utama, sebagian besar metode GUI, dan interaksi Kunci. Dibutuhkan kelas Tile dan Board, dan memungkinkan mereka untuk bekerja bersama.

Konstruktor:

Tidak ada

Metode:

/* mengatur GUI dengan ukuran yang sesuai dan menambahkan Pendengar Kunci */

public static void setUpGUI() {…}

/* Memeriksa untuk melihat apakah tombol wasd atau panah ditekan dan melakukan tindakan yang sesuai - memperbarui JFrame dengan setiap gerakan */

public void keyPressed (KeyEvent e) {…}

/* Melukis GUI dengan serangkaian string, papan, ubin dan memastikan mereka dicat ulang saat permainan selesai */

cat kekosongan publik (Grafik g) {…}

/* menggambar ubin individu - dipanggil dari metode cat */

public void drawTiles (Grafik g, Tile tile, int x, int y) {…}

/* Metode utama - mengatur GUI dan memulai permainan */

public static void main(String args) {…}

Langkah 5: Metode Penting - Gerakan

Metode gerakan adalah yang paling penting untuk dipahami, tetapi kabar baiknya adalah setelah Anda memahami gerakan vertikal, Anda dapat menerapkan pemahaman itu pada gerakan horizontal. Sebenarnya, ketiga metode gerakan vertikal ini sama persis dengan ketiga metode gerakan horizontal, kecuali satu gerakan melintasi baris dan yang lainnya melintasi kolom. Untuk alasan itu, mari kita fokus pada metode gerakan vertikal saja.

private void verticalMove(int baris, int col, Arah string)

{ Ubin awal = papan[batas][kol]; Perbandingan ubin = papan[baris][kol]; if (initial.getValue() == 0 || initial.getValue() == compare.getValue()) { if (row > border || (direction.equals("down") && (row < border))) { int addScore = initial.getValue() + compare.getValue(); if (initial.getValue() != 0) { skor += addScore; } initial.setValue(addScore); bandingkan.setValue(0); } } else { if (direction.equals("down")) { border--; } else { batas++; } verticalMove(baris, kolom, arah); } }

Metode di atas, verticalMove, disebut dengan metode 'naik' dan 'turun'. Mari kita lihat metode 'naik'.

publik batal ()

{ for (int i = 0; i < grid; i++) { batas = 0; for (int j = 0; j < grid; j++) { if (board[j].getValue() != 0) { if (border <= j) { verticalMove(j, i, "up"); } } } } }

Metode ini melewati seluruh papan dan memanggil verticalMove untuk setiap ubin dengan parameter "naik". verticalMove kemudian membandingkan tile pada posisi 'j' dan 'i' dengan tile pada posisi 'border' dan 'i'. Jika keduanya sama, mereka digabungkan. Jika tidak, ubin batas akan bertambah 1 (karena parameter yang ada adalah 'naik'), dan verticalMove dipanggil lagi.

Direkomendasikan: