Video: Coding Challenge #31: Flappy Bird 2024
Ini Tantangan pemrograman Java didasarkan pada tantangan sebelumnya dalam seri Tic-Tac-Toe ini dan menguji kemampuan Anda untuk menggunakan array - dua di antaranya sebenarnya.
Dalam Tantangan Pemrograman Java: Game Tic-Tac-Toe yang Sederhana dan Tantangan Pemrograman Java: Menambahkan Kelas ke Program Tic-Tac-Toe yang Sederhana Anda ditantang untuk menulis sebuah program untuk memainkan permainan sederhana Tic-Tac-Toe.
Sebagai permainan, Tic-Tac-Toe berseru untuk penggunaan sebuah array untuk mewakili status permainan. Tanpa array, Anda harus menggunakan variabel terpisah untuk mewakili setiap kuadrat dewan. Dengan array, Anda bisa menggunakan satu variabel untuk mewakili semua sembilan kotak.
Tantangan pemrograman ini sederhana: Tuliskan versi perbaikan dari program yang menggunakan array. Anda harus menggunakan setidaknya dua array dalam solusi Anda:
-
Anda harus menggunakan array untuk mewakili papan tulis. Kemungkinan besar, Anda akan ingin menggunakan array satu dimensi dengan sembilan elemen, sebagai berikut:
0 | 1 | 2 --- | --- | --- 3 | 4 | 5 --- | --- | --- 6 | 7 | 8
Dengan kata lain, kotak kiri atas (A1) disimpan dalam elemen array 0, dan kanan bawah persegi (C3) disimpan dalam elemen array 8.
-
Anda juga harus menggunakan sebuah array untuk mewakili delapan kemungkinan vektor tiga-dalam-satu baris.
Anda kemudian dapat menggunakan array ini untuk menentukan apakah pemain telah memenangkan permainan. Kemungkinan besar, Anda akan ingin menggunakan array dua dimensi untuk tugas ini. Array akan menampung delapan, tiga elemen array, masing-masing mewakili tiga indeks dari vektor tiga baris tertentu.
Kumpulan lengkap berisi data berikut:
0 1 2 3 4 5 6 7 8 0 3 6 1 4 7 2 5 8 0 4 8 2 4 6
Satu persyaratan tambahan dari program ini adalah kelas TicTacToeBoard yang Anda buat untuk tantangan ini harus benar-benar sesuai dengan kelas yang Anda buat untuk tantangan sebelumnya. Dengan kata lain, ia harus menerapkan metode yang sama persis. Demi kenyamanan Anda, metode ini diulang pada tabel berikut.
Karena metode ini mengacu pada kuadrat dewan tic-tac-toe menggunakan penandaan kolom-kolom seperti A1 atau B2, penerapan Anda perlu memetakan peruntukan ini ke nomor indeks. Misalnya, jika string A1 dilewatkan ke metode playAt, program harus menandai permainan di indeks 0 pada array.
Konstruktor | Deskripsi |
---|---|
TicTacToeBoard | Membuat TicTacToeBoard baru dengan semua kotak kosong. |
Metode | Deskripsi |
void reset () | Menyetel ulang status setiap kotak menjadi kosong. Menandai kotak yang ditentukan (A1, A2, A3, B1, B2, B3, C1, C2, atau C3) untuk pemain yang ditentukan (1 untuk X, 2 untuk HAI). Melempar IllegalArgumentException jika kotak bukan salah satu nilai yang diijinkan, pemain tidak 1 atau 2, atau kotak yang ditentukan tidak kosong. |
int isGameOver () | Menentukan apakah permainan telah selesai. Mengembalikan 0 jika permainan belum berakhir, 1 jika X telah memenangkan pertandingan, 2 jika O telah memenangkan pertandingan, dan 3 jika permainan itu imbang. Kondisi akhir permainan adalah sebagai berikut: |
1: Jika ada baris, kolom, atau diagonal berisi semua X's. | 2: Jika ada baris, kolom, atau diagonal berisi semua huruf O.
3: Jika tidak ada kotak kosong dan X maupun O tidak pernah menang. int getNextMove () Mengembalikan bilangan bulat yang mewakili langkah selanjutnya untuk lawan komputer. Metode ini harus membuat usaha yang tidak tepat untuk memilih langkah yang baik, sesuai dengan strategi berikut: |
* Jika pusat (B2 persegi) kosong, mainkan kotak tengah. | Jika pusatnya tidak kosong, namun ada empat sudutnya (kotak A1, A3, C1, atau C3) kosong, putar salah satu sudutnya (tidak masalah).
* Jika bagian tengahnya tidak kosong dan tidak ada sudut yang kosong, putar salah satu ujungnya (kotak A2, B1, B3, atau C2). String toString () Mengembalikan string yang mewakili status papan saat ini. String mencakup karakter baris baru untuk menampilkan baris serta garis pemisah pada garis konsol terpisah, seperti pada contoh ini: |
O | | O | - | - | -
| X | - | - | - | X | Sebagai tantangan lebih lanjut, untuk tantangan TicTacToeBoard versi ini, pemain komputer harus menggunakan strategi yang lebih cerdas melawan lawan manusia. Tentukan permainan komputer sebagai berikut: Jika komputer Anda bisa menang dalam permainan berikutnya, komputer harus diputar di kotak kemenangan. |
Jika lawan lawannya bisa menang dalam permainan berikutnya, komputer harus bermain di kotak lawan lawan lawan untuk menghalangi kemenangan.
-
Jika kotak tengahnya tersedia, komputer harus berada di tengah lapangan.
-
Jika ada kotak pojok yang tersedia, komputer harus diputar di salah satu sudut yang tersedia.
-
Komputer harus diputar di tepi tepi yang tersedia.
-
Perhatikan bahwa untuk menerapkan strategi ini, Anda perlu mengembangkan rutinitas yang dapat menentukan apakah pemain dapat menang dalam langkah berikutnya. Untuk melakukannya, Anda harus melihat masing-masing dari delapan vektor tiga-dalam-satu baris untuk menentukan apakah vektor berisi satu kotak kosong dan jika masing-masing dari dua kotak lainnya berisi tanda untuk lawan yang sama (itu adalah, dua X atau dua O's).
-
Anda dapat melakukannya dengan menggunakan 0 untuk mewakili kuadrat kosong, 1 untuk mewakili X, dan 2 untuk mewakili O. Tetapi itu memerlukan logika yang cukup rumit - hal seperti ini diperlukan, dengan asumsi bahwa s1, s2, dan s3 adalah bilangan bulat yang berisi isi dari tiga kotak dari salah satu dari delapan vektor tiga-dalam-satu:
jika (s1 == 0 & s2 == 1 & s3 == 1) // X dapat menang dengan bermain di s1 jika (s2 == 0 & s1 == 1 & s3 == 1) // X bisa menang dengan bermain di s2 if (s3 == 0 & s1 == 1 & s2 == 1) // X bisa menang dengan bermain di s3
Jadi inilah tipnya: Alih-alih menggunakan 0, 1, dan 2 untuk mewakili kotak kosong, X, dan O, gunakan bilangan prima 2, 3, dan 5 sebagai gantinya.Kemudian, untuk menentukan apakah pemain bisa menang pada vektor tertentu, cukup kalikan tiga nilai untuk vektor itu. Jika hasilnya 18, X bisa menang (233 = 18). Jika hasilnya 50, O bisa menang (255 = 50).
Perhatikan juga bahwa walaupun strategi ini merupakan perbaikan dari strategi yang digunakan untuk versi program sebelumnya, strategi ini tetap bukan strategi yang sempurna: Anda masih dapat mengalahkan komputer dengan urutan permainan yang benar. Jika Anda menginginkan tantangan tambahan, pertimbangkan strategi tambahan apa yang diperlukan untuk membuat permainan tidak dapat dimodifikasi, dan kemudian tentukan cara untuk menerapkan strategi baru ini.
Anda dapat menemukan solusi untuk tantangan ini di tab Unduhan halaman produk
Java All-in-One For Dummies, ke-4. semoga berhasil!