Rumah Kewangan Peribadi : Menambahkan Array ke Program Mudah Tic-Tac-Toe

: Menambahkan Array ke Program Mudah Tic-Tac-Toe

Video: Coding Challenge #31: Flappy Bird 2024

Video: Coding Challenge #31: Flappy Bird 2024
Anonim

Ini Cabaran pengaturcaraan Java membina cabaran terdahulu dalam siri Tic-Tac-Toe ini dan menguji keupayaan anda untuk menggunakan tatasusunan - dua daripadanya, sebenarnya.

Dalam Cabaran Pemrograman Java: Permainan Tic-Tac-Toe Mudah dan Cabaran Pemrograman Java: Menambahkan Kelas ke Program Tic-Tac-Toe Mudah Anda dicabar untuk menulis program untuk memainkan permainan sederhana Tic-Tac-Toe.

Sebagai permainan, Tic-Tac-Toe menangis untuk menggunakan array untuk mewakili status permainan. Tanpa tatasusunan, anda mesti menggunakan pembolehubah berasingan untuk mewakili setiap persegi papan. Dengan tatasusunan, anda boleh menggunakan pembolehubah tunggal untuk mewakili kesemua sembilan petak.

Cabaran pengaturcaraan ini adalah mudah: Tuliskan versi program yang lebih baik yang menggunakan array. Anda mesti menggunakan sekurang-kurangnya dua baris dalam penyelesaian anda:

  1. Anda mesti menggunakan array untuk mewakili lembaga. Kemungkinan besar, anda akan menggunakan array satu dimensi dengan sembilan unsur, seperti berikut:

    0 | 1 | 2 --- | --- | --- 3 | 4 | 5 --- | --- | --- 6 | 7 | 8
    

    Dengan kata lain, bahagian kiri atas (A1) disimpan dalam elemen array 0, dan bahagian bawah kanan (C3) disimpan dalam elemen array 8.

  2. Anda juga mesti menggunakan array untuk mewakili lapan vektor tiga baris dalam satu baris.

    Anda boleh menggunakan array ini untuk menentukan sama ada pemain telah memenangi permainan. Kemungkinan besar, anda akan mahu menggunakan array dua dimensi untuk tugas ini. Array ini akan menampung aras lapan, tiga elemen, masing-masing mewakili tiga indeks vektor tiga-dalam-satu tertentu.

    Arahan lengkap akan mengandungi 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 keperluan tambahan bagi program ini ialah kelas TicTacToeBoard yang anda buat untuk cabaran ini mesti serasi sepenuhnya dengan kelas yang anda buat untuk cabaran terdahulu. Dalam erti kata lain, ia mesti melaksanakan kaedah yang sama. Untuk kemudahan anda, kaedah ini diulang dalam jadual berikut.

Oleh kerana kaedah ini merujuk kepada segiempat papan tic-tac-toe dengan menggunakan perincian baris lajur seperti A1 atau B2, pelaksanaan anda perlu memetakan penunjukan ini ke nombor indeks. Sebagai contoh, jika rentetan A1 diluluskan kepada kaedah playAt, program mesti menandakan permainan di indeks 0 dalam array.

Kelas TicTacToeBoard
Pembina Deskripsi
TicTacToeBoard

Mencipta TicTacToeBoard baru dengan semua kotak kosong.
Kaedah Deskripsi
void reset () Mengeset status setiap persegi ke kosong.
void playAt (String square, int player) Tandakan kotak yang ditentukan (A1, A2, A3, B1, B2, B3, C1, C2, atau C3) untuk pemain yang ditentukan (1 untuk X, 2 untuk O). Melemparkan IllegalArgumentException jika persegi bukan salah satu daripada nilai yang dibenarkan, pemain tidak 1 atau 2, atau persegi tertentu tidak kosong.
int isGameOver () Menentukan sama ada permainan berakhir. Mengembalikan 0 jika permainan tidak berakhir, 1 jika X telah memenangi permainan, 2 jika O telah memenangi permainan, dan 3 jika permainan itu menarik. Syarat permainan yang berakhir adalah seperti berikut:

1: Jika mana-mana baris, lajur, atau pepenjuru mengandungi semua X.

2: Jika mana-mana baris, lajur, atau pepenjuru mengandungi semua O.

3: Jika tiada kotak kosong dan X atau O tidak menang.

int getNextMove () Mengembalikan integer yang mewakili langkah seterusnya untuk lawan komputer. Kaedah ini harus membuat usaha utama untuk memilih langkah yang baik, mengikut strategi berikut:

* Jika pusat (persegi B2) kosong, mainkan pusat tengah.

* Jika pusat itu tidak kosong tetapi mana-mana empat sudut (dataran A1, A3, C1, atau C3) kosong, bermain salah satu sudut (tidak kira perkara itu).

* Jika pusat itu tidak kosong dan tiada sudut kosong, mainkan salah satu tepi (dataran A2, B1, B3, atau C2).

String toString () Mengembalikan rentetan yang mewakili status semasa papan. Rentetan itu merangkumi aksara barisan baru untuk memaparkan baris serta garisan pemisah pada garisan konsol berasingan, seperti dalam contoh ini:

O | | O

- | - | -

| X |

- | - | -

| X |

Sebagai cabaran selanjutnya, untuk versi cabaran TicTacToeToard ini, pemain komputer harus menggunakan strategi yang lebih pintar terhadap lawan manusia. Tentukan mainan komputer seperti berikut:

  1. Jika mungkin untuk komputer menang dalam permainan seterusnya, komputer harus bermain di kotak pemenang.

  2. Sekiranya lawan manusia boleh memenangi perlawanan seterusnya, komputer harus bermain dalam petak pemenang lawan manusia untuk menghalang kemenangan.

  3. Sekiranya medan tengah tersedia, komputer perlu mengambil medan tengah.

  4. Jika mana-mana sudut persegi tersedia, komputer perlu dimainkan di salah satu sudut yang tersedia.

  5. Komputer harus bermain dalam persegi kelebihan yang tersedia.

Perhatikan bahawa untuk melaksanakan strategi ini, anda perlu mengembangkan rutin yang dapat menentukan sama ada pemain boleh memenangi langkah seterusnya. Untuk berbuat demikian, anda perlu melihat masing-masing vektor lapan, tiga-dalam-baris untuk menentukan sama ada vektor mengandungi satu persegi kosong dan jika masing-masing dua kotak lain mengandungi tanda untuk lawan yang sama (itu adalah, dua X atau dua O).

Anda boleh melakukannya dengan menggunakan 0 untuk mewakili persegi kosong, 1 untuk mewakili X, dan 2 untuk mewakili O. Tetapi itu memerlukan logik yang cukup rumit - sesuatu seperti ini diperlukan, dengan mengandaikan bahawa s1, s2, dan s3 adalah bilangan bulat yang mengandungi kandungan tiga segi salah satu vektor lapan, tiga-dalam-satu baris:

jika (s1 == 0 & s2 == 1 & s3 == 1) // X boleh menang dengan bermain di s1 jika (s2 == 0 & s1 == 1 & s3 == 1) // X boleh menang dengan bermain di s2 jika (s3 == 0 & s1 == 1 & s2 == 1) // X boleh menang dengan bermain di s3

Jadi inilah tip: Daripada menggunakan 0, 1, dan 2 untuk mewakili persegi kosong, X, dan O, gunakan nombor perdana 2, 3, dan 5 sebaliknya.Kemudian, untuk menentukan sama ada pemain boleh memenangi pada vektor yang diberikan, cukup kalikan tiga nilai untuk vektor tersebut. Jika hasilnya adalah 18, X boleh menang (233 = 18). Sekiranya hasilnya adalah 50, O boleh menang (255 = 50).

Perhatikan juga bahawa walaupun strategi ini merupakan peningkatan terhadap strategi yang digunakan untuk versi program sebelumnya, masih belum menjadi strategi yang sempurna: Anda masih boleh mengalahkan komputer dengan urutan yang betul bermain. Jika anda mahukan cabaran tambahan, pertimbangkan strategi tambahan yang diperlukan untuk membuat permainan tidak dapat dielakkan, dan kemudian merancang cara untuk melaksanakan strategi baru.

Anda boleh mencari penyelesaian untuk cabaran ini pada tab Muat Turun dari halaman produk Java All-in-One Untuk Dummies, Edisi ke-4.

Nasib baik!

: Menambahkan Array ke Program Mudah Tic-Tac-Toe

Pilihan Editor

Cara Buat Outlet untuk Pengawal Peta di Apl iOS anda - dummies

Cara Buat Outlet untuk Pengawal Peta di Apl iOS anda - dummies

Jika anda mahu menggunakan MapController untuk apl iOS anda, anda memerlukan sebuah saluran keluar. Dengan Pemilih peta anda dijaga, tiba waktunya untuk mencipta saluran supaya MapController mempunyai akses ke paparan Peta untuk memusatkan peta dan mempunyai paparan anotasi. Ikuti langkah berikut:

Bagaimana Membuat Seni Bina Aplikasi iOS - manisan

Bagaimana Membuat Seni Bina Aplikasi iOS - manisan

Senibina aplikasi adalah di mana anda akan bermula dengan pembangunan aplikasi iOS anda. Pada tahap asas, kebanyakan apl terdiri daripada komponen asas yang sama. Kebanyakan aplikasi terdiri daripada yang berikut: Model: Objek model merangkumi logik dan kandungan (data) aplikasi. Views: Kandungan data tidak berguna jika pengguna anda ...

Protein Diet Paleo dan Mengapa Haiwan Matter - manik

Protein Diet Paleo dan Mengapa Haiwan Matter - manik

Manusia, manusia gua dan manusia moden, adalah omnivora . Gaya hidup Paleo membina warisan makan daging. Ahli antropologi bersetuju bahawa nenek moyang kita yang terdahulu adalah pemakan daging, dan saintis menganggarkan bahawa gen kita adalah 99. 9 peratus sama dengan mereka pada masa itu. Daging menyediakan kita dengan protein, asid lemak penting, dan vitamin - sama seperti ...

Pilihan Editor

Bersukacita dengan Perspektif Hak - monyet

Bersukacita dengan Perspektif Hak - monyet

Tidak seperti binatang lain, mengenai pilihan! Anda boleh memilih untuk berbahagia. Anda boleh memilih untuk melihat kehidupan sebagai kaca separuh penuh (optimistik) atau kaca setengah kosong (pesimis). Semuanya datang kepada sama ada anda menentukan masalah sebagai cabaran atau krisis. Mempunyai perspektif yang betul adalah ...

Kebahagiaan: Tahu Kapan Rencana dan Kapan Bukan Untuk - patung

Kebahagiaan: Tahu Kapan Rencana dan Kapan Bukan Untuk - patung

Akhir-akhir ini, manusia memerlukan rancangan untuk semuanya. Adakah rancangan ini menjadikan anda lebih bahagia? Lebih kurang dan lebih sedikit orang boleh melalui hari tanpa BlackBerry. Ibu bapa merancang untuk pendidikan kolej anak-anak mereka apabila anak-anak berada di tadika. Ada perancang persaraan, perancang perjalanan, perancang perkahwinan, dan bahkan ...

Memutuskan apa jenis orangtua yang anda inginkan untuk mencapai kebahagiaan

Memutuskan apa jenis orangtua yang anda inginkan untuk mencapai kebahagiaan

Bagaimana membesarkan anak-anak anda tidak hanya menjejaskan betapa gembiranya mereka; ia memberi kesan kepada bagaimana mereka melakukan persembahan di sekolah, sama ada mereka mengambil merokok, bagaimana mungkin mereka akan mengalami kemurungan, dan sama ada mereka terlibat dalam tingkah laku seksual yang berisiko. Menurut ahli psikologi yang mengkaji hal semacam ini, terdapat empat gaya utama ...

Pilihan Editor

Rakaman Excel Macros dengan Rujukan Mutlak - dummies

Rakaman Excel Macros dengan Rujukan Mutlak - dummies

Mod rakaman lalai excel adalah rujukan mutlak. Apabila rujukan sel dalam formula adalah rujukan mutlak, ia tidak menyesuaikan secara automatik apabila formula disisipkan ke lokasi baru. Cara terbaik untuk memahami bagaimana konsep ini digunakan untuk makro adalah mencuba. Catat makro yang mengira baris ...

Merujuk kepada Nilai atau Rumusan dalam Sel Lain dalam Excel 2007 Formula - dummies

Merujuk kepada Nilai atau Rumusan dalam Sel Lain dalam Excel 2007 Formula - dummies

Menghubungkan formula adalah formula dalam Excel 2007 yang merujuk lokasi dalam lembaran kerja yang sama, buku kerja sama, atau bahkan buku kerja yang berbeza. Apabila anda mencipta formula pautan, ia membawa formula rumit atau asal ke lokasi baru supaya hasil dalam formula pengaudan tetap terikat secara dinamik kepada asal. Jika ...

Rakaman Excel Macros dengan Rujukan Relatif - dummies

Rakaman Excel Macros dengan Rujukan Relatif - dummies

Rujukan relatif dalam makro Excel bermakna relatif kepada sel yang sedang aktif . Oleh itu, berhati-hati dengan pilihan sel aktif anda - kedua-duanya apabila anda merakam rujukan makro relatif dan apabila anda menjalankannya. Pertama, buka Sample File. xlsx boleh didapati dalam talian. Kemudian, gunakan langkah-langkah berikut untuk merakam makro rujukan relatif: Pada ...