Tic-Tac-Toe mängu loomine C++-s

Tic Tac Toe Mangu Loomine C S



Tic-tac-toe on huvitav, vana ja klassikaline mäng, mis on lõbustanud põlvkondi. Tic-tac-toe mängus võistlevad kaks mängijat 9-ruudulisel ruudustikul, mis on tähistatud räsimustriga. Iga mängija võtab oma käigu ja asetab sümboli (O või X) ühele tühjadest ruutudest. Selles artiklis uurime, kuidas luua C++ programmeerimiskeeles tic-tac-toe mängu. Järgmine näide juhendab teid lihtsa, kuid kaasahaarava tic-tac-toe mängu loomisel, hõlmates olulisi kontseptsioone, koodide jaotusi ja kaalutlusi interaktiivse mängukogemuse loomiseks.

Looge C++-s Tic-Tac-Toe mäng

Järgmises näites on toodud selle interaktiivse kahe mängijaga tic-tac-toe mängu tegemise põhitõed. See tutvustab lihtsat ja lihtsat lähenemist selle programmeerimiseks C++ abil ning pakub hästi dokumenteeritud lähtekoodi, et lapsepõlve väljakutseid koos sõpradega uues digitaalses vormingus uuesti läbi elada. Vaatame järgmist koodi.

Näide: põhikonsoolipõhine Tic-Tac-Toe ilma 2D-massiivi kasutamata

Selles näites kasutame C++-s tic-tac-toe mängu loomiseks 2D-massiivi, funktsioone ja if-else tingimusi. Selles mängus saavad kaks mängijat kordamööda oma käike sisestada ja see määrab mängu oleku, kontrollides võitjat või viiki. Vaadake järgmist antud koodi:







#include

kasutades nimeruumi std ;

tühine tõmbelaud ( char juhatus [ 3 ] [ 3 ] ) ;

bool isMoveValid ( char juhatus [ 3 ] [ 3 ] , int rida , int kol ) ;

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

char checkWinner ( char juhatus [ 3 ] [ 3 ] ) ;

int peamine ( ) {

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

int rida , kol ;

char praegune mängija = 'X' ;

samal ajal ( tõsi ) {

tõmbelaud ( juhatus ) ;

cout << 'Mängija' << praegune mängija << ' käik. Sisestage rida (1-3) ja veerg (1-3): ' ;

söömine >> rida >> kol ;

rida --;

kol --;

kui ( isMoveValid ( juhatus , rida , kol ) ) {

juhatus [ rida ] [ kol ] = praegune mängija ;

char võitja = checkWinner ( juhatus ) ;

kui ( võitja != '' ) {

tõmbelaud ( juhatus ) ;

cout << 'Mängija' << võitja << 'on võitja! \n ' ;

murda ;

}

kui ( isBoardFull ( juhatus ) ) {

tõmbelaud ( juhatus ) ;

cout << „See on lips! \n ' ;

murda ;

}

praegune mängija = ( praegune mängija == 'X' ) ? 'o' : 'X' ;

} muidu {

cout << 'Vigane liigutus. Valige teine ​​lahter. \n ' ;

} }

tagasi 0 ;

}

tühine tõmbelaud ( char juhatus [ 3 ] [ 3 ] ) {

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

cout << '____________________________ \n ' ;

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

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

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

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

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

}

cout << ' \t | \n ' ;

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

}

cout << ' \n ' ; }

bool isMoveValid ( char juhatus [ 3 ] [ 3 ] , int rida , int kol ) {

tagasi ( rida >= 0 && rida < 3 && kol >= 0 && kol < 3 && juhatus [ rida ] [ kol ] == '' ) ;

}

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

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

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

kui ( juhatus [ m ] [ t ] == '' ) {

tagasi vale ;

} } }

tagasi tõsi ; }

char checkWinner ( char juhatus [ 3 ] [ 3 ] ) {

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

kui ( juhatus [ m ] [ 0 ] == juhatus [ m ] [ 1 ] && juhatus [ m ] [ 1 ] == juhatus [ m ] [ 2 ] && juhatus [ m ] [ 0 ] != '' ) {

tagasi juhatus [ m ] [ 0 ] ;

}

kui ( juhatus [ 0 ] [ m ] == juhatus [ 1 ] [ m ] && juhatus [ 1 ] [ m ] == juhatus [ 2 ] [ m ] && juhatus [ 0 ] [ m ] != '' ) {

tagasi juhatus [ 0 ] [ m ] ;

} }

kui ( juhatus [ 0 ] [ 0 ] == juhatus [ 1 ] [ 1 ] && juhatus [ 1 ] [ 1 ] == juhatus [ 2 ] [ 2 ] && juhatus [ 0 ] [ 0 ] != '' ) {

tagasi juhatus [ 0 ] [ 0 ] ;

}

kui ( juhatus [ 0 ] [ 2 ] == juhatus [ 1 ] [ 1 ] && juhatus [ 1 ] [ 1 ] == juhatus [ 2 ] [ 0 ] && juhatus [ 0 ] [ 2 ] != '' ) {

tagasi juhatus [ 0 ] [ 2 ] ;

}

tagasi '' ;

}

Siin on selle funktsionaalsuse jaotus:



'#include ' on eelprotsessori direktiiv, mis sisaldab sisend- ja väljundtoimingute sisend-/väljundvoo teeki. 'Nimeruumi std' kasutamine võimaldab C++ programmis otse kasutada cout, cin jne funktsioone, ilma et oleks vaja 'std:: prefiksit'.



Selles programmis on neli funktsiooni prototüüpi – need on drawBoard(), isMoveValid(), isBoardFull() ja checkWinner(). Funktsiooni deklaratsiooni tuntakse funktsiooni prototüübina. Kuigi see tuleb pärast programmi põhifunktsiooni, kasutatakse seda. Põhifunktsioon sisaldab mängutsüklit ja loogikat, et hallata mängijate pöördeid ja käike. Põhifunktsiooni raames initsialiseeritakse mängulaud tühikutega.





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

Pärast seda määratakse mängija käigu sisendi salvestamiseks kaks rea- ja veergumuutujat. 'char currentPlayer = 'X';' määrab, et X-mängija läheb esimesena.

Nüüd algab while (tõeline) mängutsükkel ja see kestab kuni võitja või viigini. See 'while' tsükkel kutsub esile 'drawBoard();' tahvli kuvamiseks. Pärast tahvli kuvamist konsoolil palutakse kasutajal valida järgmises koodilauses märgitav lahter:



cout << 'Mängija' << praegune mängija << ' käik. Sisestage rida ja veerg (1-3): ' ;

Mängija sisestab oma käigu 'cin >> rida >> col;'.

Märgistamiseks lahtri valimisel kontrollib programm esmalt sisendi kehtivust, tagades funktsiooni isMoveValid() kutsumisega, et lahter poleks juba täidetud.

juhatus [ rida ] [ kol ] = praegune mängija ;

See avaldus paneb mängija märgi lauale.

char võitja = checkWinner ( juhatus ) ;

kui ( võitja != '' ) {

tõmbelaud ( juhatus ) ;

cout << 'Mängija' << võitja << 'võidab! \n ' ;

Need avaldused kontrollivad võitjat iga kord, kui mängija märgib lauale kirje. Võitja nimi kuulutatakse välja võitja olemasolul ja programm väljub mängutsüklist.

kui ( isBoardFull ( juhatus ) ) {

See avaldus kontrollib viigiseisu. Viigiseisund tekib juhul, kui laud on täis ja võitjat pole. Sel juhul 'See on lips!' trükitakse ekraanile.

praegune mängija = ( praegune mängija == 'X' ) ? 'o' : 'X' ;

See avaldus muudab mängijad ümber, et anda igale mängijale võimalus mängida oma korda.

cout << 'Vigane liigutus. Valige teine ​​lahter. \n ' ;

Kui liigutus ei kehti, palutakse kasutajal uuesti sisestada ja valida mõni muu lahter.

Pärast funktsiooni 'peamine' algavad funktsioonide definitsioonid eelnevalt deklareeritud funktsioonide prototüüpidele. Esimene siin määratletud funktsioon on drawBoard(), mida kasutatakse tic-tac-toe plaadi konsooli tõmbamiseks. Funktsioon drawBoard() prindib välja tahvli hetkeseisu, sealhulgas ruudustiku jooned.

Järgmine siin määratletud funktsioon on isMoveValid(). Seda funktsiooni kasutatakse selleks, et määrata, kas liigutamine on lubatud nii laua sees kui ka tühjas lahtris. Funktsiooni isBoardFull() kasutatakse kontrollimaks, kas tahvel on ikka täis. See on viigiseisu tingimus, kui võitjat pole. IsBoardFull() kontrollib, kas kõik kohad laual on täidetud, mis näitab viigiseisu, kui võitjat pole. Kui võitja on olemas, saab selle kindlaks teha funktsiooni checkWinner() abil. CheckWinner() kontrollib kõiki potentsiaalseid võiduridu sama mängija märgi ('X' või 'O') suhtes ja tagastab võitnud mängija märgi, kui see on leitud, või tühikumärki ' ', kui võitjat veel pole. Järgmine on programmi väljund. See näitab iga mängija iga pööret.

Esiteks on tahvel selge; mängijal 'X' palutakse valida märgitav lahter. Siin sisestab mängija “X” 2 ja 2. 2. rea ja 2. veeru lahtrid on märgitud. Vaadake märgistatud tahvlit järgmiselt:

Nüüd on mängija O kord. Mängijal palutakse valida märgitav lahter. Mängija “O” valib rea jaoks 1 ja veeru jaoks 1. Valitud lahter on tähistatud mängija 'O' jaoks, nagu on näidatud järgmises väljundi katkendis:

Iga mängija kõik käigud järgivad sama mustrit. On mängija X kord ja mängija valib rea jaoks 1 ja veeru jaoks 2. Vaadake järgmisi antud väljundi hetktõmmiseid:

Nüüd on kord mängija 'O' käes. Mängija valib rea jaoks 1 ja veeru jaoks 3.

Järgmine kord on taas mängijal “X”. Mängija valib rea jaoks 3 ja veeru jaoks 1.

Mängija “O” valib rea jaoks 3 ja veeru jaoks 2.

Mängija “X” valib teise rea ja kolmanda veeru.

Mängija “O” valib nüüd teise rea ja esimese veeru.

Mängija “X” valib seekord kolmanda rea ​​ja kolmanda veeru.

Ükski mängija ei saanud teha ühtegi joont horisontaalselt, vertikaalselt või diagonaalselt, seega on tegemist viigiga. Valitud sisendite massiivi puhul võitjat pole.

Üldiselt sisaldab kood peamist mängutsüklit, mis vastutab mängu oleku ja kasutaja sisendi haldamise eest, ning mitmeid utiliidi funktsioone, mida kasutatakse laua joonistamiseks, käikude kinnitamiseks, täislaua kontrollimiseks ja võitja kindlaksmääramiseks. .

Järeldus

Tik-tac-toe mängu arendamine C++ abil on suurepärane praktiline harjutus teie programmeerimisoskuste tugevdamiseks. Artiklis selgitatakse täpselt, kuidas C++-s tic-tac-toe luua. Selles artiklis esitatud samm-sammulised juhised hõlmasid 2D-massiivi, funktsioone ja tingimusi, et lugejad saaksid mõista mängumehaanikat, kasutajate suhtlust ja tõhusat koodi struktureerimist. Koodi üksikasjalik ülevaade ja põhimängu jaoks ülioluliste funktsioonide selgitus annab lugejatele hindamatu ülevaate nii C++ programmeerimistavadest kui ka lihtsa mänguarenduse keerukusest.