Bagaimana Menulis Program Tic-Tac-Toe di Jawa

Pengenalan:

Tic-Tac-Toe adalah permainan yang sangat umum yang cukup mudah dimainkan. Peraturan permainan adalah mudah dan terkenal. Kerana perkara-perkara ini, Tic-Tac-Toe agak mudah dikodekan. Dalam tutorial ini, kita akan melihat cara untuk mengodkan permainan kerja Tic-Tac-Toe di Jawa. Tutorial ini menganggap bahawa anda mempunyai pengetahuan mengenai sintaks dasar Java, dan akses kepada compiler Java yang berfungsi. Tutorial ini akan menggunakan Eclipse IDE.

Garis Besar Umum:

Terdapat banyak cara untuk melaksanakan permainan Tic-Tac-Toe di Jawa, jadi sebelum kita memulakan pengekodan, kita mesti memikirkan bagaimana kita akan melaksanakan permainan secara khusus. Untuk tutorial ini, kami akan mengarang versi berasaskan teks Tic-Tac-Toe. Tic-Tac-Toe kami akan bermula dengan mencetak papan, dan kemudian meminta masukan dari pemain pertama yang akan menentukan di mana di papan untuk meletakkan tanda pemain itu. Selepas meletakkan tanda, kami akan mencetak semula papan lembaga dan kemudian meminta pemain lain untuk bergerak. Proses itu akan diteruskan sehingga satu pemain menang atau papan dipenuhi (menandakan bahawa hubungan berlaku). Input yang akan diambil untuk menentukan tempat untuk meletakkan tanda akan berada dalam format dua bulat, yang menyatakan baris dan lajur di mana tanda tersebut akan diletakkan. Berikut adalah contoh permainan yang akan dimainkan seperti.

Langkah 1: Mewujudkan Projek Anda

Langkah pertama dalam pengkodan apa-apa adalah untuk membuat projek baru! Dalam IDE anda, buat projek Java yang baru bernama TicTacToe. Dalam Pengajaran ini, pakej lalai adalah apa yang akan digunakan. Di dalam pakej projek anda, buat dua kelas: Main.java, dan TTT.java. Main.java akan menjadi tuan rumah kaedah utama dan akan digunakan untuk menjalankan kod dalam TTT.java. TTT.java akan mengandungi objek Tic-Tac-Toe yang mengandungi keadaan lembaga dan kaedah untuk memanipulasi permainan.

Langkah 2: Memulakan Kelas TTT

Sebelum kita dapat membuat kod untuk menjalankan objek TTT kita, kita perlu membuat objek TTT yang bekerja. Oleh kerana objek TTT mewakili satu permainan Tic-Tac-Toe, ia mesti mengandungi dua pemboleh ubah ahli. Di bawah adalah pembolehubah ahli yang perlu dimasukkan ke dalam kelas TTT diikuti dengan deskripsi mengapa ia diperlukan.

papan persendirian [] [];

Pembolehubah ini adalah pelbagai watak 2D yang akan mewakili tiga tiga papan permainan Tic-Tac-Toe. Ia akan memegang keadaan permainan dalam objek TTT pada bila-bila masa.

char semasa currentPlayerMark;

Pembolehubah ini akan memegang sama ada 'x' atau 'o', yang mewakili pemain mana ia berada pada bila-bila masa. Kaedah kelas TTT akan menggunakan ini apabila menandakan papan untuk menentukan jenis tanda yang akan diletakkan.

Langkah 3: Inisialisasi Kaedah Prototaip dalam Kelas TTT

Berikut adalah persediaan umum program. Di bawah adalah semua tajuk kaedah untuk kaedah yang berada di dalam kelas TTT. Kaedah ini akan bertindak ke atas pembolehubah anggota kelas TTT untuk membuat permainan Tic-Tac-Toe boleh berubah. Setiap orang mempunyai penerangan ringkas mengenai kaedah yang akan dilakukan di bawahnya. Tingkah laku ini diperlukan untuk bermain permainan penuh Tic-Tac-Toe.

TTT awam ()

Inilah pembina. Ia akan bertanggungjawab untuk memastikan lembaga mendapat permulaan yang betul, dan untuk menetapkan siapa pemain pertama akan.

void inisial publicizeBoard ()

Kaedah ini akan memulakan pembolehubah papan supaya semua slot kosong.

printBoard void awam ()

Kaedah ini akan mencetak papan Tic-Tac-Toe ke output standard.

boolean awam isBoardFull ()

Kaedah ini akan memeriksa sama ada atau tidak papan itu penuh. Ia akan kembali benar jika lembaga itu penuh dan palsu sebaliknya.

pemeriksaan boolean awam checkForWin ()

Kaedah ini akan memeriksa untuk melihat apakah pemain telah menang, dan jika ya, ia akan kembali benar.

boolean cek checkRowsForWin ()

Kaedah ini secara khusus akan menyemak baris bagi kemenangan.

cek boolean swastaColumnsForWin ()

Kaedah ini secara khusus akan menyemak lajur untuk kemenangan.

cek boolean swastaDiagonalsForWin ()

Kaedah ini secara khusus akan memeriksa pepenjuru untuk menang.

cek boolean swastaRodCol (char c1, char c2, char c3)

Kaedah ini akan menyemak tiga aksara yang ditentukan untuk melihat sama ada ketiga-tiga huruf 'x' atau 'o' sama. Jika ya, ia akan kembali benar.

Nota : Jika anda mengetuk stub kaedah untuk semua pengepala kaedah ke dalam kelas TTT anda, pengkompil anda mungkin akan memberitahu anda bahawa kod anda mempunyai ralat. Ini adalah biasa. Pengkompil hanya mengharapkan nilai yang akan dikembalikan untuk semua kaedah yang tidak sah.

Langkah 4: Mulakan Inisiatif Lembaga

void inisial publicizeBoard ()

Ini akan menetapkan papan kepada semua nilai kosong. Di dalam kaedah ini, anda mesti membuat 2 untuk gelung di antara satu sama lain yang akan melengkung melalui semua baris dan lajur yang menetapkan setiap ruang kepada '-'. Untuk gelung melalui baris, buat gelung dan integer, dalam kes ini bernama i, untuk mewakili baris mana yang sedang kita amati.

untuk (int i = 0; i <3; i ++) {}

Di dalam ini untuk gelung, kita akan membuat gelung kedua dengan integer j untuk mewakili lajur yang sedang kita amati.

untuk (int j = 0; j <3; j ++) {}

Di dalam gelung kedua, kami menetapkan lokasi papan untuk '-'. Dengan kedua-dua gelung selesai dan bersarang dengan betul, kita boleh melelet melalui setiap tempat di dalam papan 2D array.

papan [i] [j] = '-';

Dilampirkan ke langkah ini ialah imej yang menunjukkan satu kemungkinan pelaksanaan kaedah initializeBoard ().

Langkah 5: Mencetak Papan

Papan bercetak awal akan kelihatan seperti imej pertama.

Ia akan ditangani dalam kaedah public void printBoard (), yang terletak di kelas TTT. Untuk mencetak papan, kita mesti mengakses setiap tempat dalam pelbagai 2D bernama papan dalam kelas TTT kami. Kerana kita berurusan dengan pelbagai 2D, ini akan ditangani dengan bersarang untuk gelung.

Mula-mula, kita hanya perlu mencetak garis putaran (13 daripadanya dalam kes ini) yang menetapkan bahagian atas papan. Di bawah itu, kita memerlukan gelung untuk gelung yang akan melalui setiap tiga baris. Gelung ini akan mengandungi panggilan untuk mencetak '|' aksara, satu lagi untuk gelung ke gelung melalui lajur, dan panggilan ke fungsi System.out.println () untuk mencetak barisan baru dan 13 baris seterusnya ke skrin.

Pusingan dalaman kita juga akan hanya melalui tiga tiang. Sejak luar kami untuk gelung sudah mencetak yang pertama | watak setiap baris papan, kita boleh teruskan untuk mencetak watak yang dimiliki dalam kotak. Untuk melakukan ini, kami akan mencetak watak pada baris dan lajur yang menggunakan papan [i] [j] (i ialah pemboleh ubah yang digunakan untuk luar untuk gelung, yang merupakan baris, dan j ialah pemboleh ubah yang digunakan untuk gelung batin, yang merupakan lajur.) Pernyataan cetak ini juga mengandungi yang digabungkan | watak, untuk memisahkan kotak.

Satu-satunya perkara yang tinggal ialah mencetak panggilan terakhir untuk mencetak barisan baru untuk memisahkan setiap baris, diikuti dengan 13 garis. Imej yang dilampirkan kedua menunjukkan contoh fungsi cetakan yang diterangkan.

Langkah 6: Memeriksa Pemenang (Bahagian 1)

Terdapat tiga fungsi yang berbeza untuk menyemak kemenangan: baris, lajur, dan pepenjuru. Komputer perlu memisahkannya ke dalam keadaan yang berbeza kerana mereka semua berbeza dari segi tatasusunan. checkForWin () akan menjadi fungsi utama kami untuk menguji semua 3 fungsi ini untuk setiap senario yang dimasukkan input pengguna.

Untuk kaedah checkForWin (): Anda hanya memerlukan kenyataan penyata yang memanggil tiga fungsi yang berlainan. Jika menyemak baris untuk menang tidak kembali benar kemudian periksa lajur untuk menang, dan lain-lain. Di dalam penyata pulangan hendaklah kelihatan seperti: checkRowsForWin () || checkColumnsForWin () || checkDiagonalsForWin ()

Untuk kaedah checkRowsForWin (): Kami melengkapkan melalui baris untuk melihat sama ada terdapat sebarang pemenang. Ini akan memerlukan satu untuk gelung dengan pernyataan jika di dalamnya. The for loop akan bertambah melalui integer i untuk memeriksa setiap baris. untuk (int i = 0; i <3; i ++) Pernyataan jika membandingkan setiap ruang dalam baris antara satu sama lain dan memberikan nilai 'benar' jika semuanya sama. Sebagai contoh jika baris mempunyai tiga x berturut-turut, kaedah itu akan kembali benar. jika (checkRowCol (papan [i] [0], papan [i] [1], papan [i] [2]) == benar) Jadi, dalam pernyataan ini jika ada, Dan selepas gelung, jika kaedah tidak pernah dihentikan, maka kaedah tersebut perlu kembali bahawa baris ini tidak mempunyai tiga simbol yang sesuai. Oleh itu, sebelum menutup kaedah dengan akhir '}', kami akan menulis: kembali palsu; Memuaskan keperluan untuk mengembalikan boolean.

Untuk kaedah checkColumnsForWin (): Salin dan tampal kandungan kaedah checkRowsForWin (). Satu-satunya perubahan akan berada di dalam pernyataan jika. Daripada kenaikan melalui baris, kita akan bertambah melalui lajur. Jadi semasa checkRowsForWin mempunyai pernyataan jika berkata: jika (checkRowCol (papan [i] [0], papan [i] [1], papan [i] [2]) == benar) checkColumnsForWin () pernyataan yang mengatakan: jika (checkRowCol (papan [0] [i], papan [1] [i], papan [2] [i]) == benar) Selain itu, semua yang lain dalam kaedah tetap sama.

Untuk kaedah checkDiagonalsForWin (): Semua perkara yang ditulis boleh terkandung di dalam kurungan penyata kembali (). Pemeriksaan pertama yang akan kami lakukan adalah pada pepenjuru dari sudut kiri atas ke sudut kanan bawah. Untuk melakukan ini, kami semak semua ruang yang akan dimasukkan ke dalam bahagian ini. checkRowCol (papan [0] [0], papan [1] [1], papan [2] [2]) == benar) Kemudian kita akan mempunyai satu lagi pernyataan, tetapi kita akan memisahkan kedua- || ' Pernyataan kedua akan memeriksa dari sudut kanan atas ke sudut kiri bawah. checkRowCol (papan [0] [2], papan [1] [1], papan [2] [0]) == benar) Jadi produk akhir kaedah checkDiagonalsForWin () harus mengandungi pernyataan pertama ATAU pernyataan kedua.

Langkah 7: Semak Pemenang (Bahagian 2)

Sekarang kita perlu pastikan jika pemain mendapat tiga berturut-turut, dia menang. checkRowCol () akan menjadi fungsi yang akan membandingkan semua tiga huruf antara satu sama lain, dan jika mereka berpadanan, maka kembali benar.

Untuk kaedah checkRowCol (): Kaedah ini digunakan oleh kaedah lain untuk menghantar tiga nilai. Kami mula-mula semak untuk memastikan nilai pertama bukan satu kosong seperti '-'. Kemudian kita bandingkan nilai pertama kepada yang kedua, dan yang kedua kepada yang ketiga, dan jika dan hanya jika ketiga-tiga nilai adalah sama DAN mereka bukan kenyataan kosong, maka kaedah ini akan kembali benar. Jadi di dalam satu penyata () pernyataan, pernyataan pertama kami akan memeriksa ini bukan '-'. (c1! = '-') Pisahkan penyataan pertama dan kedua dengan '&&' Pernyataan kedua akan melihat sama ada nilai pertama bersamaan dengan nilai kedua. (c1 == c2) Pisahkan penyataan kedua dan ketiga dengan '&&' Pernyataan ketiga akan melihat sama ada nilai kedua bersamaan dengan yang ketiga. (c2 == c3) Jadi kaedah pemeriksaan akhirRowCol () anda akan menjadi satu penyata () yang mengandungi pernyataan pertama && pernyataan kedua && pernyataan ketiga.

Langkah 8: Menukar Antara Pemain (x dan O)

void public changePlayer ()

Kaedah changePlayer () akan menukar aliran semasaPlayerMark antara x dan o. Untuk melakukan ini, semak periksa pembolehubah yang ada pada masa ini. Jika pemboleh ubah memegang 'x', maka ubahnya ke 'o'. Jika tidak, ubahnya ke 'x'.

public boolean placeMark (int row, int col)

Kaedah placeMark () akan meletakkan huruf yang betul pada baris yang ditentukan dan col dalam pemboleh ubah papan (diambil sebagai parameter). Ia akan kembali benar jika ia merupakan penempatan yang sah. Jika tidak, pengubahsuaian kepada pemboleh ubah papan akan dibuat, dan pemain perlu mencuba dan meletakkan surat mereka di tempat yang berbeza, sebagai tempat yang tidak sah dipilih atau tempat di mana pemain sudah meletakkan surat mereka dipilih. Untuk mencapai tingkah laku ini, beberapa perkara mesti diperiksa. Pertama, pastikan (menggunakan pernyataan jika) bahawa hujah baris adalah antara 0 dan 2. Seterusnya, semak untuk memastikan bahawa hujah kol adalah antara 0 dan 2. Akhirnya, semak untuk memastikan bahawa tempat yang pada masa ini mengandungi '- ', menandakan bahawa tiada pembayar telah menandakan tempat itu lagi. Sekiranya ketiga-tiga keadaan tersebut menyemak, kemudian letakkan tanda (jenis yang ditentukan oleh pembolehubah kelas currentPlayerMark) di lokasi yang ditentukan oleh baris dan col dan kemudian kembali benar. Sekiranya salah satu daripada tiga syarat tersebut tidak dipenuhi, maka perlu diketahui dan salah akan dikembalikan.

Dilampirkan ke langkah ini adalah imej yang menunjukkan kemungkinan pelaksanaan kaedah-kaedah yang disebutkan di atas.

Langkah 9: Input Pemain dan Bermain Permainan

Sekarang kelas TTT dan semua kaedahnya selesai, kaedah utama yang menggunakan keseluruhan permainan Tic-Tac-Toe menggunakan objek TTT mesti dibuat. Kaedah utama mesti dilakukan beberapa perkara untuk menjalankan permainan penuh Tic-Tac-Toe.

Pertama, ia mesti membuat objek Pengimbas untuk mengambil input dari System.in. Juga, ia mesti menyenaraikan objek TTT untuk memainkan permainan Tic-Tac-Toe dengan. Selepas perkara ini, ia mesti memulakan papan objek TTT dengan memanggilnya menginisialisasiBoard () kaedah.

Selepas langkah-langkah ini selesai, permainan sebenar harus dipertimbangkan. Untuk melangkah, giliran diperlukan semasa gelung. Gelung harus keluar apabila permainan selesai, yang bermaksud apabila papan objek TTT penuh atau mempunyai pemenang. Di dalam gelung, keadaan papan semasa harus dicetak sebelum setiap giliran sehingga menunjukkan pemain apa ruang yang tersedia dan ruang apa yang diambil. Kemudian, dua input harus diambil dalam menandakan baris dan lajur untuk meletakkan tanda untuk gilirannya. Selepas input ini diambil, tanda hendaklah diletakkan menggunakan kaedah objek TTT, dan pemain perlu diubah dengan menggunakan kaedah objek TTT.

Di bawah gelung sementara yang mengendalikan semua giliran sehingga akhir permainan, adalah perlu untuk mengisytiharkan siapa pemenang permainan itu (atau jika permainan itu terikat). Untuk melakukan ini, semak apakah permainan itu adalah pertandingan pertama dengan memeriksa sama ada kedua papan itu penuh dan tidak ada pemenang. Sekiranya perkara-perkara ini berlaku, cetaklah bahawa permainan itu adalah seri. Jika tidak, cetak siapa yang menang dengan mencetak sebaliknya keadaan semasa objek semasa TTT pemboleh ubah. Ini boleh dicapai dengan terlebih dahulu memanggil kaedah changePlayer () objek TTT dan kemudian menggunakan kaedah getCurrentPlayerMark () objek TTT untuk mendapatkan keadaan pembolehubah currentPlayerMark. Ia juga mungkin bagus untuk mencetak papan sekali lagi untuk menunjukkan keadaan akhir lembaga.

Kaedah utama contoh telah dilampirkan sebagai imej.

Langkah 10: Gunakan Kelas, Menyusun dan Main

Sebaik sahaja anda sampai ke tahap ini, projek anda perlu lengkap untuk dijalankan. Jika ada ralat atau kurungan yang hilang atau titik koma, kini sudah menjadi waktunya untuk mencari dan memperbaikinya. Sekiranya anda terlepas bagaimana projek anda kelihatan, kami telah memasukkan fail yang boleh dimuat turun untuk anda membandingkan kod anda ke produk akhir yang berfungsi. Teruskan dan menyusun projek anda. Di Eclipse terdapat butang main yang kelihatan seperti gambar yang dilampirkan pada langkah ini.

Lampiran

  • Muat turun Produk Akhir.zip Akhir

Artikel Berkaitan