Sumber artikel: csdn Penulis: Chen Wanfei
Tentang penulis
Chen Wanfei, pria, meraih gelar sarjana di bidang matematika dan perangkat lunak dari Central South University. Dia adalah seorang programmer senior dan analis sistem di Beijing Great Wall Software. Dia memiliki pengalaman luas dalam pengembangan j2se dan j2ee. Saat ini sedang mengerjakan penelitian j2me. Dia dapat dihubungi di [email protected]
ringkasan
Artikel ini memberikan rencana desain untuk game Tetris berdasarkan MIDP1.0, dan memberikan kode sumber implementasi lengkap. Fitur terbesar dari game ini adalah kemampuan beradaptasi layar. Tidak peduli berapa pun ukuran layar berbagai ponsel dan PDA, game selalu bisa mendapatkan efek tampilan terbaik. Game ini telah diuji pada empat emulator J2me wireless toolkit 2.1.
Penafian: Kode permainan ini awalnya berasal dari proyek sumber terbuka Jepang (lihat referensi 1), dan telah dimodifikasi secara signifikan oleh penulis.
Berikut beberapa screenshot permainannya:
desain
1. Proses operasi
Proses pengoperasian game ini sangat sederhana. Setelah pengguna memulai MIDlet, dia memasuki layar utama game dan layar mulai menampilkan layar selamat datang. Setelah pengguna menekan tombol [Start], dia dapat mulai memainkan permainan. Ketika pengguna ingin menjeda, dia menekan tombol [Start] lagi, dan permainan dihentikan sementara dijeda, permainan terus berjalan. Setiap kali tombol [Exit] ditekan, MIDlet permainan akan dihentikan.
Diagram alur layar permainan adalah sebagai berikut:
2. Algoritma
Desain game MIDP pada dasarnya menggunakan thread atau timer untuk menghasilkan peristiwa menggambar ulang, dan menggunakan thread dan input pengguna untuk mengubah status game. Game ini tidak terkecuali. Setelah memulai MIDlet, thread redraw segera dibuat, yang menggambar layar setiap 50ms. Tentu saja ada beberapa langkah optimasi saat menggambar ulang. Tidak semua piksel di layar perlu digambar ulang, tapi ada pilihan, seperti benda jatuh yang sudah diperbaiki di kanvas permainan (total ada 7 jenis benda jatuh). , terdiri dari 4 buah bata kecil yang setiap benda jatuh mempunyai warna tetap dan dapat diputar ke atas, bawah, kiri, dan kanan, sehingga tidak perlu digambar ulang. Kanvas permainan adalah CommandListener yang dapat menerima perintah keyboard pengguna dan mengontrol tindakan kiri, kanan, bawah, dan rotasi objek yang jatuh. Kontrol aliran keseluruhan game tercermin dalam metode paint() pada objek kanvas game. paint() menggambar layar game saat ini berdasarkan status game saat ini. Layar selamat datang dan layar Game Over cukup mudah untuk digambar. Menggambar layar jeda permainan juga cukup mudah, cukup atur flag sehingga ketika paint() dijalankan, tidak perlu melakukan tindakan menggambar ulang. Untuk penggambaran layar saat permainan sedang berjalan, benda jatuh perlu digambar pada posisi benda jatuh saat ini. Sebelum menggambar benda yang jatuh, tentukan apakah benda yang jatuh itu masih bisa jatuh. Jika benda yang jatuh itu masih bisa jatuh, biarkan jatuh satu spasi lalu gambarlah. Jika benda yang jatuh itu tidak bisa jatuh lagi, tentukan apakah permainan dalam keadaan Game Over berada dalam status Game Over, atur status game ke status Game over, sehingga kanvas akan menggambar gambar Game Over saat digambar ulang lagi , perbaiki objek yang jatuh dan periksa objek yang jatuh di kanvas game secara bersamaan. Periksa semua baris di bawah baris saat ini untuk melihat apakah penghapusan baris diperlukan. Jika penghapusan baris diperlukan, hapus data baris yang dihapus pada game peta, lalu gambar baris yang dihapus dengan warna latar belakang. Kemudian inisialisasi objek jatuh baru dan gambar objek jatuh baru tersebut. Diagram alir metode pengecatan adalah sebagai berikut:
3.Struktur data
Game ini melibatkan struktur data berikut.
daerah permainan
Area permainan adalah bagian dari layar ponsel atau PDA. Luasnya berbentuk persegi, dan panjang sisinya harus habis dibagi 16 (karena area permainan Rusia berbentuk persegi yaitu panjang 16 batu bata kecil dan 16 batu bata kecil. lebar). Area ini harus berada di tengah layar, baik secara horizontal maupun vertikal. Area permainan dibagi menjadi 2 bagian secara horizontal, satu bagian lebarnya 12 batu bata kecil untuk memajang wadah permainan, dan bagian lainnya lebarnya 4 batu bata kecil untuk memajang benda jatuh berikutnya dan mencetak skor.
batu bata kecil
Batu bata kecil adalah bagian dari wadah drop dan game. Bentuknya persegi, panjang sisinya 1/16 panjang sisi lapangan permainan. Ketika setiap bata kecil digambar, akan tersisa 1 piksel di keempat sisinya dan digambar dengan warna putih atau abu-abu sehingga ada celah di antara bata tersebut. Setiap bata kecil juga memiliki ID, mulai dari 1 hingga 8. Kita dapat menggunakan susunan warna (disebut BRICK_COLORS dalam program) untuk menyimpan 8 warna ini. Jika id bata kecil tertentu adalah 3, maka warna bata kecil tersebut adalah BRICK_COLORS[3-1].
benda jatuh
Tetesannya pada dasarnya adalah sebuah persegi yang terbuat dari 16 batu bata kecil. Total ada 7 macam benda jatuh, misalnya yang berbentuk "bidang", yang berbentuk "L", dan seterusnya. Terdapat 4 variasi putaran untuk setiap benda jatuh. Setiap benda yang jatuh memiliki ID, mulai dari 1 hingga 7. Karena pada benda yang jatuh warnanya tetap. Kita juga bisa menggunakan nilai subskrip warna tersebut dalam array BRICK_COLORS ditambah 1 sebagai id objek yang jatuh.
Misalnya benda jatuh berbentuk "L" mempunyai ID 3, dan variasinya adalah:
Jadi struktur data apa yang digunakan untuk menyimpan benda jatuh? Mari kita ambil contoh benda jatuh berbentuk "L" sebagai contoh:
Karena setiap benda jatuh memiliki empat keadaan, kita dapat mempertimbangkan penggunaan array dengan panjang 4 untuk menyimpan empat keadaan benda jatuh. Setiap elemen dalam larik mewakili keadaan benda jatuh. Jadi apa yang harus digunakan untuk merepresentasikan keadaan tertentu dari benda jatuh? Seperti terlihat pada gambar di atas, array dua dimensi 4X4 paling tepat digunakan untuk menyimpan keadaan benda jatuh. Jika muncul batu bata berwarna, nilainya 1, dan jika hanya ada warna latar belakang dan tidak perlu digambar, nilainya 0. Oleh karena itu, empat keadaan seluruh benda jatuh berbentuk "L" dapat direpresentasikan dengan larik 3 dimensi:
dilindungi int blockpattern3[][][] = {
{{0, 1, 0, 0}, {0, 1, 0, 0}, {0, 1, 1, 0}, {0, 0, 0, 0}},
{{0, 0, 0, 0}, {0, 1, 1, 1}, {0, 1, 0, 0}, {0, 0, 0, 0}},
{{0, 0, 0, 0}, {0, 1, 1, 0}, {0, 0, 1, 0}, {0, 0, 1, 0}},
{{0, 0, 0, 0}, {0, 0, 1, 0}, {1, 1, 1, 0}, {0, 0, 0, 0}}
};
peta permainan
Peta permainan digunakan untuk menyimpan ubin tetap pada wadah permainan. Wadah permainan berukuran lebar 12 unit bata kecil dan tinggi 16 unit bata kecil, termasuk dua dinding kiri dan kanan serta bagian bawah wadah di bawahnya. Jadi array dua dimensi 16X12 (disebut mapdata dalam program) digunakan untuk menyimpan batu bata tetap. Jika mapdata[i][j]=k(k!=0). Berarti ada batu bata kecil tetap pada baris i dan kolom j wadah permainan, dan nilai warna batu bata kecil tersebut adalah BRICK_COLORS[k -1]. Jika k=0, berarti tidak ada batu bata pada baris i dan kolom j.
Oleh karena itu, untuk waktu berjalan game berikut, nilai mapdata adalah {{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0 , 0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0 , 0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0 , 0,0,0,0,0,0,8}
{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8} {}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0, 8}
{8,0,0,0,0,0,0,0,0,1,1,8}{8,0,0,0,0,0,0,0,0,1,1,8} {8,0,0,0,0,0,7,7,5,1,1,8}{8,0,5,0,0,7,2,5,5,1,1,8}
{8,8,8,8,8,8,8,8,8,8,8,8}}
Kode sumber dan kode yang dapat dieksekusi
Total ada 3 file: src.rar, ketrisgame.jad, ketrisgame.jar Catatan: src.rar berisi semua kode sumber. Ada juga file sumber daya yang diperlukan untuk program yang berjalan di ketrisgame.jar. Setelah menginstal wtk2.1, letakkan ketrisgame.jad dan ketrisgame.jar di direktori yang sama (perhatikan bahwa jalur direktori tidak boleh berisi karakter dan spasi Cina), klik dua kali pada file ketrisgame.jad, Anda dapat menjalankan game di emulator.
Referensi
http://www.javadrive.jp/j2me/game/3/index.html
<j2me singkatnya>
<Pengenalan pemrograman ponsel/PDA java>