Sumber artikel: Penggemar Komputer Penulis: Zhang Jian
Masih ingat Minicooper yang melintasi lalu lintas Hollywood seperti peri di "The Last Day"? Mark Wahlberg dan Sally Theron mengendarainya untuk mengangkut emas senilai puluhan juta di bawah hidung musuh-musuh mereka. Namun, jika sekarang ada badan Minicooper yang tidak bisa berlari cepat di hadapan Anda, bagaimana pendapat Anda? Apakah masih peri pengembara? Hari ini, mari kita merakit bagian-bagian Minicooper ini sepotong demi sepotong dan membiarkannya berjalan.
Kata pengantar
Mulai dari edisi ini, kami memberi Anda kode sumber game lengkap (klik untuk mengunduh). Java Cafe menganjurkan agar setiap orang memberikan perhatian yang sama terhadap teori dan praktik. Kami akan memperkenalkan teknologi utama dan ide implementasi kepada Anda dalam seri ini. Teman-teman dapat membaca kode sumber bersamaan dengan artikel, seperti membaca koran dan minum kopi di waktu yang sama Di sinilah keharuman Didi tak habis-habisnya.
tata letak permainan
"Lianliankan" adalah permainan catur dua dimensi. Jika Anda ingin mendesain permainan catur, GridLayout harus menjadi pilihan terbaik. Sekarang mari kita lihat konstruktor GridLayout:
・GridLayout(): Secara default, area tata letak dibagi menjadi ukuran 1*1
・GridLayout(int baris, int cols): Menentukan jumlah grid horizontal dan vertikal di area tata letak
・GridLayout(int baris, int cols, int hgap, int vgap): Sama seperti di atas, dan juga menentukan hgap jarak horizontal dan vgap jarak vertikal antara setiap grid
Jangan biarkan ketiga konstruktor ini membuat Anda takut. Faktanya, selama Anda menyukainya, Anda dapat menggunakan salah satu dari mereka dengan percaya diri. Bahkan jika Anda tidak sengaja menggunakan yang "salah", ada cara untuk menyesuaikannya di masa depan. Satu-satunya hal yang perlu diperhatikan adalah ketika menambahkan kontrol ke GridLayout, urutan defaultnya adalah dari kiri atas ke kanan bawah.
Sekarang mari kita tentukan jumlah grid untuk permainan tersebut. Berapa banyak grid yang sesuai? Terlalu sedikit akan membuat permainan menjadi lebih mudah, terlalu banyak akan menimbulkan dampak visual. Oleh karena itu, kita harus mengungkapkannya melalui sepasang konstanta. Bahkan jika kita ingin mengubahnya di masa depan, itu akan sangat mudah.
Di Java, definisi konstanta perlu ditulis dalam bentuk public final static. Jika kita menetapkan bahwa papan permainan memiliki 8 grid secara horizontal dan 8 grid secara vertikal, maka kita harus mendefinisikannya seperti ini:
BARIS int statis akhir publik = 8;
KOLOM int statis akhir publik = 8;
Lalu, kita menggunakan konstruktor kedua GridLayout untuk membuat layout:
GridLayout gridLayout = GridLayout baru(ROW, COLUMN);
Terakhir, kita juga perlu mengubah layout area permainan (contentPanel) ke layout di atas:
contentPanel.setLayout(gridLayout);
Jika Anda mengkompilasi dan menjalankan program saat ini, Anda mungkin bertanya-tanya: Mengapa tidak ada perubahan pada antarmuka? Meskipun kami telah menentukan tata letaknya, tidak ada kontrol yang ditambahkan, jadi tentu saja tidak ada perubahan yang terlihat. Sekarang mari tambahkan tombol ke tata letak:
for (int i = 0; i < BARIS * KOLOM; i++) {
Tombol JButton = JButton baru("Kyodai");
contentPanel.add(tombol);
}
Coba jalankan kembali programnya. Apakah sama dengan milik saya (lihat Gambar 1)?
Pandai menggunakan JButton untuk membuat keributan
JButton adalah kontrol tombol. Ini juga merupakan kontrol yang sangat umum di Swing. Namun, kita masih perlu sedikit usaha untuk memahami dan menggunakannya, karena ketika Anda dapat menggunakan JButton dengan mahir, Anda akan menemukan kontrol Swing lainnya juga sangat mirip.
Jika Anda menjalankan program yang baru saja Anda tulis, Anda akan menemukan bahwa tombol-tombol di area permainan selalu penuh, yang sangat merepotkan untuk pengoperasian game yang sebenarnya, oleh karena itu, kami harus menemukan cara untuk mengosongkan beberapa grid. Tata letak GridLayout semuanya baik, tetapi Anda tidak dapat melewati kisi tertentu saat menambahkan kontrol. Apa yang harus saya lakukan sekarang?
Sebenarnya, ini tidak sulit. Karena GridLayout tidak mengizinkan skipping, jika kita mengintegrasikan kontrol yang ditambahkan dalam grid tertentu dengan latar belakang layout GridLayout, kita akan mendapatkan efek visual yang konsisten. Selain itu, jika orang lain mengklik grid ini secara tidak sengaja, tombol tersebut akan tetap terlihat. Kita harus menemukan cara untuk mencegah tombol tersebut diklik, yang memerlukan penggunaan metode setEnabled() JButton. Terakhir, untuk tombol yang dapat diklik, ketika diklik, kita harus membedakan tombol mana yang diklik.
Saat kami menerapkan fungsi "Tentang" terakhir kali, kami menggunakan metode e.getSource() untuk menentukan sumber peristiwa klik mouse. Namun, itu hanya efektif untuk kontrol bernama. Di sini, menggunakan array untuk mewakili tombol tidak diragukan lagi merupakan cara terbaik. Pertama, mari kita ubah kode di atas:
JButton[] titik = JButton baru[ROW * COLUMN];
for (int i = 0; i < BARIS * KOLOM; i++) {
titik[i] = JButton baru("Kyodai");
titik[i].setActionCommand("" + i);
contentPanel.tambahkan(titik[i]);
titik[i].addActionListener(ini);
}
Jangan lupa untuk menulis dot[i] = new JButton("Kyodai") di badan perulangan. Meskipun nomor grup titik telah ditentukan dan digunakan sebelumnya, ini hanya memberitahu program bahwa kita perlu menggunakan beberapa JButton, namun, Ini JButtons masih belum diinisialisasi. Pada saat yang sama, kami tidak hanya menggunakan setActionCommand() untuk menentukan nama peristiwa untuk tombol, namun juga menggunakan metode addActionListener() untuk menambahkan pemrosesan respons peristiwa ke setiap tombol.
Mengenai kode respon event, kita dapat menambahkannya setelah kode event actionPerformed() yang asli:
if (e.getSource() contoh JButton) {
Tombol JButton = (JButton) e.getSource();
int offset = Integer.parseInt(button.getActionCommand());
ke dalam baris, kolom;
baris = Matematika.bulat(offset / KOLOM);
col = offset - baris * KOLOM;
JOptionPane.showMessageDialog(ini, "ROW="+baris+", COL="
+ kolom, "Tombol", JOptionPane.INFORMATION_MESSAGE);
}
Dalam kode di atas, e.getSource() instanceof JButton digunakan untuk menentukan apakah peristiwa yang dihasilkan dihasilkan oleh kontrol tipe JButton, dan kemudian melakukan konversi kelas paksa pada kontrol yang menghasilkan sumber peristiwa, dan kemudian menggunakan Integer.parseInt( tombol Metode .getActionCommand()) mengubah nama peristiwa yang diperoleh menjadi bilangan bulat, dan kode berikut mengembalikan bilangan bulat ini ke informasi baris dan kolom.
Oke, sekarang jalankan programnya dan klik setiap tombol untuk melihat apakah akan muncul kotak dialog seperti di sebelah kanan?
Perhatikan bahwa langganan kami dimulai dari 0. Kode sumber program terbitan ini (klik untuk mengunduh).
Menggunakan gambar di Swing
Saat ini, kami telah memecahkan masalah operasi pengguna. Untuk membuat antarmuka menjadi indah, kita perlu menggunakan gambar, bukan teks. Teman-teman yang punya waktu dan kesabaran bisa membuat sendiri gambar yang dipersonalisasi, tapi hati-hati untuk menjaga ukuran setiap gambar tetap konsisten, jika tidak maka akan terlalu jelek. Jika ingin menghemat masalah, Anda juga bisa langsung menggunakan gambar yang disediakan dalam paket download.
Di Swing, Anda dapat menggunakan metode setIcon(Image image) untuk mengatur gambar untuk JButton. Parameter image adalah objek gambar yang ingin kita atur.
・Gunakan kelas Toolkit untuk mendapatkan:
gambar = Toolkit.getDefaultToolkit().getImage(url);
・Gunakan metode getImage() kelas ImageIcon untuk memperoleh:
gambar = ImageIcon baru(getClass().getResource(nama file)).getImage();
Kami memilih metode pertama di sini. Untuk memudahkan mendapatkan kembali objek Gambar di masa mendatang, kita dapat menulis ini sebagai fungsi:
Gambar getImage(Nama file string){
URLClassLoader urlLoader = (URLClassLoader) this.getClass().getClassLoader();
URL url = nol;
Gambar gambar = null;
url = urlLoader.findResource(nama file);
gambar = Toolkit.getDefaultToolkit().getImage(url);
mengembalikan gambar;
}
Dengan fungsi ini, akan lebih nyaman menggunakan gambar di kemudian hari, bukan?
Sekarang gambar sudah tersedia, kita dapat mengungkapkan informasi peta di Map.Java dalam paket kode sumber dalam bentuk gambar. Karena kode ini adalah tentang kode algoritme permainan, saya tidak akan mencantumkan kodenya lagi. Mari kita jelaskan secara singkat cara melakukannya di sini! Di Map.Java, kami menggunakan array dua dimensi map[][] untuk menyimpan informasi gambar. Pada saat yang sama, kami juga menggunakan array satu dimensi images[] untuk menyimpan setiap objek gambar sebuah nilai. Nilai ini tidak hanya menunjukkan nilai yang sesuai dengan tombol di antarmuka permainan, tetapi juga menunjukkan jumlah gambar dalam array gambar[] yang digunakan oleh tombol ini. Antarmuka yang berjalan akan jauh lebih indah.
ringkasan
Hari ini kami memperkenalkan kontrol JButton di Swing. Untuk sebagian besar kontrol Swing, penggunaan JButton dapat disalin. Jangan remehkan JButton ini, ketika kamu sudah bisa menguasainya dengan baik maka skill Swing kamu akan ditingkatkan ke level yang lebih tinggi. Selain itu, kita juga mempelajari dua metode memuat file gambar di Java. Terakhir, kami menggabungkan dua bagian di atas untuk membuat antarmuka game yang indah. Meskipun saya belum menulis kode lengkapnya di sini, saya yakin setiap orang akan dapat mencapai tujuan tersebut dengan mengacu pada program sumber saya dan melalui upaya Anda sendiri. Jika Anda menemui masalah yang tidak dapat diselesaikan, Anda dapat menghubungi saya melalui [email protected].
Saya ingin tahu apakah Anda puas dengan konten hari ini? Kegembiraannya belum datang, semua orang harus terus mengunjungi kafe kami!