Tic-Tac-Toe spēles izveide programmā C++

Tic Tac Toe Speles Izveide Programma C



Tic-tac-toe ir interesanta, veca un klasiska spēle, kas ir izklaidējusi paaudzes. Tic-tac-toe spēlē divi spēlētāji sacenšas uz 9 kvadrātu režģa, kas ir apzīmēts ar jaucējrakstu. Katrs spēlētājs uzņem savu kārtu un novieto simbolu (O vai X) vienā no tukšajiem lauciņiem. Šajā rakstā mēs izpētīsim, kā izveidot tic-tac-toe spēli C++ programmēšanas valodā. Šis piemērs palīdzēs jums izveidot vienkāršu, bet aizraujošu tic-tac-toe spēli, aptverot būtiskos jēdzienus, kodu sadalījumu un apsvērumus, lai izveidotu interaktīvu spēļu pieredzi.

Izveidojiet Tic-Tac-Toe spēli programmā C++

Nākamajā piemērā ir sniegti šīs interaktīvās divu spēlētāju tic-tac-toe spēles izveides pamati. Tas demonstrē vienkāršu un vieglu pieeju tā programmēšanai ar C++ un nodrošina labi dokumentētu avota kodu, lai ar draugiem izdzīvotu bērnības izaicinājumus jaunā digitālā formātā. Ļaujiet mums redzēt šādu kodu.

Piemērs: pamata konsoles Tic-Tac-Toe, neizmantojot 2D masīvu

Šajā piemērā mēs izmantosim 2D masīvu, funkcijas un if-else nosacījumus, lai izveidotu tic-tac-toe spēli programmā C++. Šajā spēlē diviem spēlētājiem ir atļauts pārmaiņus ievadīt savus gājienus, un tas nosaka spēles stāvokli, pārbaudot uzvarētāju vai neizšķirtu. Skatiet tālāk norādīto kodu:







#include

izmantojot namespace std ;

nederīgs dēlis ( char dēlis [ 3 ] [ 3 ] ) ;

bool isMoveValid ( char dēlis [ 3 ] [ 3 ] , starpt rinda , starpt kol ) ;

bool isBoardFull ( char dēlis [ 3 ] [ 3 ] ) ;

char čeksUzvarētājs ( char dēlis [ 3 ] [ 3 ] ) ;

starpt galvenais ( ) {

char dēlis [ 3 ] [ 3 ] = { { '' , '' , '' } , { '' , '' , '' } , { '' , '' , '' } } ;

starpt rinda , kol ;

char pašreizējais atskaņotājs = 'X' ;

kamēr ( taisnība ) {

dēlis ( dēlis ) ;

cout << 'Spēlētājs' << pašreizējais atskaņotājs << ' kārta. Ievadiet rindu (1-3) un kolonnu (1-3): ' ;

ēšana >> rinda >> kol ;

rinda --;

kol --;

ja ( isMoveValid ( dēlis , rinda , kol ) ) {

dēlis [ rinda ] [ kol ] = pašreizējais atskaņotājs ;

char uzvarētājs = čeksUzvarētājs ( dēlis ) ;

ja ( uzvarētājs != '' ) {

dēlis ( dēlis ) ;

cout << 'Spēlētājs' << uzvarētājs << 'ir uzvarētājs! \n ' ;

pārtraukums ;

}

ja ( irBoardFull ( dēlis ) ) {

dēlis ( dēlis ) ;

cout << 'Tā ir kaklasaite! \n ' ;

pārtraukums ;

}

pašreizējais atskaņotājs = ( pašreizējais atskaņotājs == 'X' ) ? 'O' : 'X' ;

} cits {

cout << 'Nederīga pārvietošana. Izvēlieties citu šūnu. \n ' ;

} }

atgriezties 0 ;

}

nederīgs dēlis ( char dēlis [ 3 ] [ 3 ] ) {

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

cout << '____________________________ \n ' ;

priekš ( starpt m = 0 ; m < 3 ; m ++ ) {

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

priekš ( starpt t = 0 ; t < 3 ; t ++ ) {

cout << '' << dēlis [ m ] [ t ] ;

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

}

cout << ' \t | \n ' ;

ja ( m < 2 ) cout << '____________________________ \n ' ;

}

cout << ' \n ' ; }

bool isMoveValid ( char dēlis [ 3 ] [ 3 ] , starpt rinda , starpt kol ) {

atgriezties ( rinda >= 0 && rinda < 3 && kol >= 0 && kol < 3 && dēlis [ rinda ] [ kol ] == '' ) ;

}

bool isBoardFull ( char dēlis [ 3 ] [ 3 ] ) {

priekš ( starpt m = 0 ; m < 3 ; m ++ ) {

priekš ( starpt t = 0 ; t < 3 ; t ++ ) {

ja ( dēlis [ m ] [ t ] == '' ) {

atgriezties viltus ;

} } }

atgriezties taisnība ; }

char čeksUzvarētājs ( char dēlis [ 3 ] [ 3 ] ) {

priekš ( starpt m = 0 ; m < 3 ; m ++ ) {

ja ( dēlis [ m ] [ 0 ] == dēlis [ m ] [ 1 ] && dēlis [ m ] [ 1 ] == dēlis [ m ] [ 2 ] && dēlis [ m ] [ 0 ] != '' ) {

atgriezties dēlis [ m ] [ 0 ] ;

}

ja ( dēlis [ 0 ] [ m ] == dēlis [ 1 ] [ m ] && dēlis [ 1 ] [ m ] == dēlis [ 2 ] [ m ] && dēlis [ 0 ] [ m ] != '' ) {

atgriezties dēlis [ 0 ] [ m ] ;

} }

ja ( dēlis [ 0 ] [ 0 ] == dēlis [ 1 ] [ 1 ] && dēlis [ 1 ] [ 1 ] == dēlis [ 2 ] [ 2 ] && dēlis [ 0 ] [ 0 ] != '' ) {

atgriezties dēlis [ 0 ] [ 0 ] ;

}

ja ( dēlis [ 0 ] [ 2 ] == dēlis [ 1 ] [ 1 ] && dēlis [ 1 ] [ 1 ] == dēlis [ 2 ] [ 0 ] && dēlis [ 0 ] [ 2 ] != '' ) {

atgriezties dēlis [ 0 ] [ 2 ] ;

}

atgriezties '' ;

}

Tālāk ir sniegts tās funkcionalitātes sadalījums:



“#include ” ir priekšprocesora direktīva, kas ietver ievades/izvades straumes bibliotēku ievades/izvades darbībām. Izmantojot “namespace std”, C++ programmā var tieši izmantot cout, cin uc funkcijas, neprasot “std:: prefiksu”.



Šajā programmā ir četri funkciju prototipi – tie ir drawBoard(), isMoveValid(), isBoardFull() un checkWinner(). Funkcijas deklarācija ir pazīstama kā funkcijas prototips. Lai gan tas nāk pēc galvenās funkcijas programmā, tas tiks izmantots. Galvenā funkcija satur spēles cilpu un loģiku, lai pārvaldītu spēlētāju gājienus un gājienus. Galvenās funkcijas ietvaros spēles dēlis tiek inicializēts ar atstarpēm.





char dēlis [ 3 ] [ 3 ] = { { '' , '' , '' } , { '' , '' , '' } , { '' , '' , '' } } ;

Pēc tam tiek definēti divi rindu un kolu mainīgie, lai saglabātu spēlētāja kustības ievadi. 'char currentPlayer = 'X';' definē, ka “X” spēlētājs iet pirmais.

Tagad sākas kamēr (patiesā) spēles cikls, un tas turpinās līdz uzvarētājam vai neizšķirtam. Šī “while” cilpa izsauc “drawBoard ();” lai parādītu dēli. Pēc tāfeles parādīšanas konsolē lietotājam tiek lūgts izvēlēties šūnu, ko atzīmēt šādā koda priekšrakstā:



cout << 'Spēlētājs' << pašreizējais atskaņotājs << ' kārta. Ievadiet rindu un kolonnu (1-3): ' ;

Spēlētājs ievada savu gājienu “cin >> row >> col;”.

Atlasot šūnu atzīmēšanai, programma vispirms pārbaudīs ievades derīgumu, nodrošinot, ka šūna jau nav aizpildīta, izsaucot funkciju isMoveValid().

dēlis [ rinda ] [ kol ] = pašreizējais atskaņotājs ;

Šis paziņojums ievieto spēlētāja atzīmi uz galda.

char uzvarētājs = čeksUzvarētājs ( dēlis ) ;

ja ( uzvarētājs != '' ) {

dēlis ( dēlis ) ;

cout << 'Spēlētājs' << uzvarētājs << 'uzvar! \n ' ;

Šie apgalvojumi pārbauda uzvarētāju katru reizi, kad spēlētājs atzīmē ierakstu uz galda. Uzvarētāja vārds tiks paziņots, ja būs uzvarētājs, un programma izies no spēles cikla.

ja ( irBoardFull ( dēlis ) ) {

Šis paziņojums pārbauda neizšķirtu. Neizšķirts nosacījums rodas gadījumā, ja galds ir pilns un uzvarētāja nav. Šajā gadījumā: 'Tā ir neizšķirts!' ir uzdrukāts uz ekrāna.

pašreizējais atskaņotājs = ( pašreizējais atskaņotājs == 'X' ) ? 'O' : 'X' ;

Šis paziņojums pārslēdz spēlētājus, lai dotu katram spēlētājam iespēju spēlēt savu kārtu.

cout << 'Nederīga pārvietošana. Izvēlieties citu šūnu. \n ' ;

Ja pārvietošana nav derīga, lietotājam tiek piedāvāts ievadīt vēlreiz un izvēlēties jebkuru citu šūnu.

Pēc funkcijas “galvenā” sāksies funkciju definīcijas iepriekš deklarētajiem funkciju prototipiem. Pirmā funkcija, kas šeit ir definēta, ir drawBoard(), ko izmanto, lai zīmētu tic-tac-toe dēli uz konsoli. Funkcija drawBoard() izdrukā tāfeles pašreizējo stāvokli, ieskaitot režģa līnijas.

Nākamā šeit definētā funkcija ir isMoveValid(). Šo funkciju izmanto, lai noteiktu, vai kustība ir atļauta gan dēļa iekšpusē, gan tukšā šūnā. Funkciju isBoardFull() izmanto, lai pārbaudītu, vai tāfele vēl ir pilna. Tas ir nosacījums neizšķirtai situācijai, kad nav uzvarētāja. IsBoardFull() pārbauda, ​​vai visas pozīcijas uz galda ir aizpildītas, kas norāda uz neizšķirtu, ja nav uzvarētāja. Ja ir uzvarētājs, to var noskaidrot, izmantojot funkciju checkWinner(). CheckWinner() pārbauda visas iespējamās laimesta līnijas, lai atrastu viena un tā paša spēlētāja atzīmes (“X” vai “O”), un atgriež uzvarējušā spēlētāja atzīmi, ja tā ir atrasta, vai atstarpes simbolu “ “, ja vēl nav uzvarētāja. Tālāk ir norādīta programmas izvade. Tas parāda katru gājienu no katra spēlētāja.

Pirmkārt, dēlis ir skaidrs; Spēlētājam “X” tiek piedāvāts izvēlēties atzīmējamo šūnu. Šeit spēlētājs “X” ievada 2 un 2. 2. rindas un 2. kolonnas šūnas ir atzīmētas. Skatiet tālāk norādīto marķēto tāfeli:

Tagad ir spēlētāja O kārta. Spēlētājam tiek piedāvāts izvēlēties šūnu, kas jāatzīmē. Spēlētājs “O” izvēlas 1 rindai un 1 kolonnai. Izvēlētā šūna ir atzīmēta atskaņotājam “O”, kā parādīts šajā izvades fragmentā:

Visi katra spēlētāja gājieni notiks pēc tāda paša modeļa. Ir spēlētāja X kārta, un spēlētājs izvēlas 1 rindai un 2 kolonnai. Skatiet tālāk norādītos izvades momentuzņēmumus:

Tagad kārta ir spēlētājam “O”. Spēlētājs izvēlas 1 rindai un 3 kolonnai.

Nākamais gājiens atkal ir spēlētājam “X”. Spēlētājs izvēlas 3 rindai un 1 kolonnai.

Spēlētājs “O” izvēlas 3 rindai un 2 kolonnai.

Spēlētājs “X” izvēlas otro rindu un trešo kolonnu.

Spēlētājs “O” tagad izvēlas otro rindu un pirmo kolonnu.

Spēlētājs “X” šoreiz izvēlas trešo rindu un trešo kolonnu.

Neviens spēlētājs nevarēja izveidot līniju horizontāli, vertikāli vai pa diagonāli, tāpēc tas ir neizšķirts. Izvēlētajam ievades masīvam nav uzvarētāja.

Kopumā kodā ir galvenā spēles cilpa, kas ir atbildīga par spēles stāvokļa un lietotāja ievades apstrādi, kā arī vairākas utilīta funkcijas, kas tiek izmantotas, lai uzzīmētu dēli, apstiprinātu gājienus, pārbaudītu, vai ir pilns galds, un noteiktu, vai ir uzvarētājs. .

Secinājums

Tic-tac-toe spēles izstrāde, izmantojot C++, ir lielisks praktisks vingrinājums, lai nostiprinātu savas programmēšanas prasmes. Rakstā ir precīzi izskaidrots, kā izveidot tic-tac-toe programmā C++. Šajā rakstā sniegtie soli pa solim norādījumi ietvēra 2D masīvu, funkcijas un nosacījumus, kas ļauj lasītājiem izprast spēles mehāniku, lietotāju mijiedarbību un efektīvu koda strukturēšanu. Detalizēts koda apraksts un to funkciju skaidrojums, kurām ir izšķiroša nozīme spēles pamatā, sniedz lasītājiem nenovērtējamu ieskatu gan C++ programmēšanas praksē, gan vienkāršas spēles izstrādes sarežģītībā.