Mencipta Permainan Tic-Tac-Toe dalam C++

Mencipta Permainan Tic Tac Toe Dalam C



Tic-tac-toe ialah permainan yang menarik, lama dan klasik yang telah menghiburkan generasi. Dalam tic-tac-toe, dua pemain bersaing pada grid 9 persegi yang ditandakan dengan corak cincang. Setiap pemain mengambil giliran mereka dan meletakkan simbol (O atau X) di salah satu petak kosong. Dalam artikel ini, kami akan meneroka cara mencipta permainan tic-tac-toe dalam bahasa pengaturcaraan C++. Contoh berikut akan membimbing anda membina permainan tic-tac-toe yang ringkas tetapi menarik, merangkumi konsep penting, pecahan kod dan pertimbangan untuk mencipta pengalaman permainan interaktif.

Cipta Permainan Tic-Tac-Toe dalam C++

Contoh berikut menyediakan asas untuk membuat permainan tic-tac-toe interaktif dua pemain ini. Ia mempamerkan pendekatan yang mudah dan mudah untuk memprogramkannya dengan C++ dan menyediakan kod sumber yang didokumentasikan dengan baik untuk menghidupkan semula cabaran zaman kanak-kanak tersebut dengan rakan dalam format digital baharu. Mari kita lihat kod berikut.

Contoh: Tic-Tac-Toe Asas Berasaskan Konsol tanpa Menggunakan Tatasusunan 2D

Dalam contoh ini, kami akan menggunakan tatasusunan 2D, fungsi dan syarat if-else untuk membuat permainan tic-tac-toe dalam C++. Dalam permainan ini, dua pemain dibenarkan bergilir-gilir dalam memasukkan pergerakan mereka, dan ia menentukan keadaan permainan dengan menyemak pemenang atau seri. Lihat kod yang diberikan berikut:







#include

menggunakan ruang nama std ;

batal drawBoard ( char papan [ 3 ] [ 3 ] ) ;

bool isMoveValid ( char papan [ 3 ] [ 3 ] , int barisan , int kol ) ;

bool isBoardFull ( char papan [ 3 ] [ 3 ] ) ;

char semakPemenang ( char papan [ 3 ] [ 3 ] ) ;

int utama ( ) {

char papan [ 3 ] [ 3 ] = { { '' , '' , '' } , { '' , '' , '' } , { '' , '' , '' } } ;

int barisan , kol ;

char Pemain semasa = 'X' ;

sementara ( benar ) {

drawBoard ( papan ) ;

cout << 'Pemain' << Pemain semasa << Giliran '. Masukkan baris (1-3) dan lajur (1-3): ' ;

makan >> barisan >> kol ;

barisan --;

kol --;

jika ( isMoveValid ( papan , barisan , kol ) ) {

papan [ barisan ] [ kol ] = Pemain semasa ;

char pemenang = semakPemenang ( papan ) ;

jika ( pemenang != '' ) {

drawBoard ( papan ) ;

cout << 'Pemain' << pemenang << 'adalah pemenang! \n ' ;

rehat ;

}

jika ( isBoardFull ( papan ) ) {

drawBoard ( papan ) ;

cout << 'Ia adalah seri! \n ' ;

rehat ;

}

Pemain semasa = ( Pemain semasa == 'X' ) ? 'O' : 'X' ;

} lain {

cout << 'Pergerakan tidak sah. Pilih sel lain. \n ' ;

} }

kembali 0 ;

}

batal drawBoard ( char papan [ 3 ] [ 3 ] ) {

cout << 'b| \t 1 \t | \t 2 \t | \t 3 \t | \n ' ;

cout << ' ____________________ \n ' ;

untuk ( int m = 0 ; m < 3 ; m ++ ) {

cout << m + 1 << '| ' ;

untuk ( int t = 0 ; t < 3 ; t ++ ) {

cout << '' << papan [ m ] [ t ] ;

jika ( t < 2 ) cout << ' \t | \t ' ;

}

cout << ' \t | \n ' ;

jika ( m < 2 ) cout << ' ____________________ \n ' ;

}

cout << ' \n ' ; }

bool isMoveValid ( char papan [ 3 ] [ 3 ] , int barisan , int kol ) {

kembali ( barisan >= 0 && barisan < 3 && kol >= 0 && kol < 3 && papan [ barisan ] [ kol ] == '' ) ;

}

bool isBoardFull ( char papan [ 3 ] [ 3 ] ) {

untuk ( int m = 0 ; m < 3 ; m ++ ) {

untuk ( int t = 0 ; t < 3 ; t ++ ) {

jika ( papan [ m ] [ t ] == '' ) {

kembali salah ;

} } }

kembali benar ; }

char semakPemenang ( char papan [ 3 ] [ 3 ] ) {

untuk ( int m = 0 ; m < 3 ; m ++ ) {

jika ( papan [ m ] [ 0 ] == papan [ m ] [ 1 ] && papan [ m ] [ 1 ] == papan [ m ] [ 2 ] && papan [ m ] [ 0 ] != '' ) {

kembali papan [ m ] [ 0 ] ;

}

jika ( papan [ 0 ] [ m ] == papan [ 1 ] [ m ] && papan [ 1 ] [ m ] == papan [ 2 ] [ m ] && papan [ 0 ] [ m ] != '' ) {

kembali papan [ 0 ] [ m ] ;

} }

jika ( papan [ 0 ] [ 0 ] == papan [ 1 ] [ 1 ] && papan [ 1 ] [ 1 ] == papan [ 2 ] [ 2 ] && papan [ 0 ] [ 0 ] != '' ) {

kembali papan [ 0 ] [ 0 ] ;

}

jika ( papan [ 0 ] [ 2 ] == papan [ 1 ] [ 1 ] && papan [ 1 ] [ 1 ] == papan [ 2 ] [ 0 ] && papan [ 0 ] [ 2 ] != '' ) {

kembali papan [ 0 ] [ 2 ] ;

}

kembali '' ;

}

Berikut ialah pecahan fungsinya:



“#include ” ialah arahan prapemproses yang merangkumi perpustakaan aliran I/O untuk operasi input/output. Menggunakan 'ruang nama std' membenarkan penggunaan langsung fungsi cout, cin, dsb. dalam program C++, tanpa memerlukan 'std:: awalan'.



Terdapat empat prototaip fungsi dalam program ini – ia adalah drawBoard(), isMoveValid(), isBoardFull(), dan checkWinner(). Pengisytiharan fungsi dikenali sebagai prototaip fungsi. Walaupun ia datang selepas fungsi utama dalam program, ia akan digunakan. Fungsi utama mengandungi gelung permainan dan logik untuk menguruskan giliran dan pergerakan pemain. Dalam fungsi utama, papan permainan dimulakan dengan ruang.





char papan [ 3 ] [ 3 ] = { { '' , '' , '' } , { '' , '' , '' } , { '' , '' , '' } } ;

Selepas ini, dua pembolehubah baris dan kol ditakrifkan untuk menyimpan input pergerakan pemain. 'Pemain semasa char = 'X';' mentakrifkan bahawa pemain 'X' pergi dahulu.

Kini, gelung permainan sementara (benar) bermula, dan ia berjalan sehingga ada pemenang atau seri. Gelung 'semasa' ini memanggil 'Papan lukisan();' untuk memaparkan papan. Selepas memaparkan papan pada konsol, pengguna diminta memilih sel untuk ditanda dalam pernyataan kod berikut:



cout << 'Pemain' << Pemain semasa << Giliran '. Masukkan baris dan lajur (1-3): ' ;

Pemain memasukkan langkah mereka dalam 'cin >> row >> col;'.

Apabila memilih sel untuk penandaan, program akan mengesahkan kesahihan input terlebih dahulu, memastikan sel itu belum diisi dengan memanggil fungsi isMoveValid().

papan [ barisan ] [ kol ] = Pemain semasa ;

Kenyataan ini meletakkan tanda pemain di papan.

char pemenang = semakPemenang ( papan ) ;

jika ( pemenang != '' ) {

drawBoard ( papan ) ;

cout << 'Pemain' << pemenang << 'menang! \n ' ;

Penyata ini menyemak pemenang setiap kali pemain menandakan penyertaan di papan. Nama pemenang akan diumumkan jika ada pemenang, dan program akan keluar dari gelung permainan.

jika ( isBoardFull ( papan ) ) {

Kenyataan ini menyemak untuk seri. Keadaan seri berlaku dalam kes apabila papan penuh dan tiada pemenang. Dalam kes ini, 'Ia adalah seri!' dicetak pada skrin.

Pemain semasa = ( Pemain semasa == 'X' ) ? 'O' : 'X' ;

Kenyataan ini menukar pemain untuk memberi setiap pemain peluang untuk bermain giliran mereka.

cout << 'Pergerakan tidak sah. Pilih sel lain. \n ' ;

Jika langkah itu tidak sah, pengguna digesa untuk memasukkan semula dan memilih mana-mana sel lain.

Selepas fungsi 'utama', definisi fungsi untuk prototaip fungsi yang diisytiharkan sebelum ini akan bermula. Fungsi pertama yang ditakrifkan di sini ialah drawBoard() yang digunakan untuk melukis papan tic-tac-toe ke konsol. Fungsi drawBoard() mencetak keadaan semasa papan, termasuk garisan grid.

Fungsi seterusnya yang ditakrifkan di sini ialah isMoveValid(). Fungsi ini digunakan untuk menentukan sama ada pergerakan dibenarkan di dalam papan dan pada sel kosong. Fungsi isBoardFull() digunakan untuk menyemak sama ada papan tersebut masih penuh. Ini adalah syarat untuk situasi seri apabila tiada pemenang. isBoardFull() menyemak sama ada semua jawatan di papan telah diisi yang menunjukkan seri jika tiada pemenang. Jika ada pemenang, ia boleh dipastikan menggunakan fungsi checkWinner(). CheckWinner() menyemak semua baris kemenangan yang berpotensi untuk tanda pemain yang sama (“X” atau “O”) dan mengembalikan tanda pemain yang menang jika ditemui atau aksara ruang “ “ jika belum ada pemenang. Berikut ialah output program. Ia menunjukkan setiap pusingan daripada setiap pemain.

Pertama, papan itu jelas; pemain 'X' digesa untuk memilih sel untuk ditanda. Di sini, pemain 'X' memasuki 2 dan 2. Sel baris 2 dan lajur 2 ditanda. Rujuk papan bertanda dalam perkara berikut:

Kini, giliran pemain O. Pemain digesa untuk memilih sel untuk ditanda. Pemain 'O' memilih 1 untuk baris dan 1 untuk lajur. Sel yang dipilih ditandakan untuk pemain 'O' seperti yang ditunjukkan dalam coretan output berikut:

Semua giliran untuk setiap pemain akan mengikut corak yang sama. Giliran pemain X pula, dan pemain memilih 1 untuk baris dan 2 untuk lajur. Rujuk kepada petikan keluaran berikut yang diberikan:

Kini, giliran untuk pemain 'O'. Pemain memilih 1 untuk baris dan 3 untuk lajur.

Giliran seterusnya sekali lagi pada pemain 'X'. Pemain memilih 3 untuk baris dan 1 untuk lajur.

Pemain 'O' memilih 3 untuk baris dan 2 untuk lajur.

Pemain 'X' memilih baris kedua dan lajur ketiga.

Pemain 'O' kini memilih baris kedua dan lajur pertama.

Pemain 'X' memilih baris ketiga dan lajur ketiga kali ini.

Tiada pemain boleh membuat sebarang garisan secara mendatar, menegak atau menyerong, jadi ia adalah seri. Tiada pemenang untuk tatasusunan input yang dipilih.

Secara keseluruhan, kod tersebut terdiri daripada gelung permainan utama yang bertanggungjawab untuk mengendalikan keadaan permainan dan input pengguna, bersama dengan beberapa fungsi utiliti yang digunakan untuk melukis papan, mengesahkan pergerakan, menyemak papan penuh dan menentukan sama ada terdapat pemenang. .

Kesimpulan

Membangunkan permainan tic-tac-toe menggunakan C++ ialah latihan praktikal yang sangat baik untuk mengukuhkan kemahiran pengaturcaraan anda. Artikel itu menerangkan dengan tepat cara membuat tic-tac-toe dalam C++. Panduan langkah demi langkah yang disediakan dalam artikel ini merangkumi tatasusunan 2D, fungsi dan syarat lain untuk pembaca memahami mekanik permainan, interaksi pengguna dan penstrukturan kod yang cekap. Panduan terperinci kod dan penjelasan fungsi yang penting untuk permainan teras melengkapkan pembaca dengan pandangan yang tidak ternilai tentang kedua-dua amalan pengaturcaraan C++ dan selok-belok pembangunan permainan yang mudah.