Tic-Tac-Toe žaidimo kūrimas C++

Tic Tac Toe Zaidimo Kurimas C



Tic-tac-toe yra įdomus, senas ir klasikinis žaidimas, kuris linksmino kartas. „Tic-tac-toe“ žaidime du žaidėjai varžosi ant 9 kvadratų tinklelio, pažymėto maišos raštu. Kiekvienas žaidėjas pasiima savo eilę ir įdeda simbolį (O arba X) į vieną iš tuščių laukelių. Šiame straipsnyje mes išnagrinėsime, kaip sukurti „tic-tac-toe“ žaidimą C++ programavimo kalba. Šis pavyzdys padės jums sukurti paprastą, bet patrauklų „tic-tac-toe“ žaidimą, apžvelgdamas pagrindines sąvokas, kodų suskirstymus ir svarstymus, kaip sukurti interaktyvią žaidimų patirtį.

Sukurkite „Tic-Tac-Toe“ žaidimą C++

Šiame pavyzdyje pateikiami šio interaktyvaus dviejų žaidėjų „tic-tac-toe“ žaidimo pagrindai. Jame demonstruojamas paprastas ir lengvas programavimo būdas naudojant C++ ir pateikiamas gerai dokumentuotas šaltinio kodas, leidžiantis iš naujo išgyventi vaikystės iššūkius su draugais nauju skaitmeniniu formatu. Pažiūrėkime šį kodą.

Pavyzdys: pagrindinė konsolės pagrindu veikianti „Tic-Tac-Toe“ nenaudojant 2D masyvo

Šiame pavyzdyje mes naudosime 2D masyvą, funkcijas ir if-else sąlygas, kad sukurtume „tic-tac-toe“ žaidimą C++. Šiame žaidime du žaidėjai gali pakaitomis įvesti savo judesius, o tai nustato žaidimo būseną, patikrindamas, ar yra nugalėtojas arba lygiosios. Žiūrėkite toliau pateiktą kodą:







#include

naudojant vardų sritį std ;

tuštuma piešimo lenta ( char lenta [ 3 ] [ 3 ] ) ;

bool isMoveValid ( char lenta [ 3 ] [ 3 ] , tarpt eilė , tarpt plk ) ;

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

char čekis Laimėtojas ( char lenta [ 3 ] [ 3 ] ) ;

tarpt pagrindinis ( ) {

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

tarpt eilė , plk ;

char currentPlayer = 'X' ;

kol ( tiesa ) {

piešimo lenta ( lenta ) ;

cout << 'Žaidėjas' << currentPlayer << ' eilė. Įveskite eilutę (1-3) ir stulpelį (1-3): ' ;

valgymas >> eilė >> plk ;

eilė --;

plk --;

jeigu ( isMoveValid ( lenta , eilė , plk ) ) {

lenta [ eilė ] [ plk ] = currentPlayer ;

char nugalėtojas = čekis Laimėtojas ( lenta ) ;

jeigu ( nugalėtojas != '' ) {

piešimo lenta ( lenta ) ;

cout << 'Žaidėjas' << nugalėtojas << 'yra nugalėtojas! \n ;

pertrauka ;

}

jeigu ( isBoardFull ( lenta ) ) {

piešimo lenta ( lenta ) ;

cout << „Tai kaklaraištis! \n ;

pertrauka ;

}

currentPlayer = ( currentPlayer == 'X' ) ? 'o' : 'X' ;

} Kitas {

cout << 'Neteisingas perkėlimas. Pasirinkite kitą langelį. \n ;

} }

grąžinti 0 ;

}

tuštuma piešimo lenta ( char lenta [ 3 ] [ 3 ] ) {

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

cout << '___________________________ \n ;

dėl ( tarpt m = 0 ; m < 3 ; m ++ ) {

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

dėl ( tarpt t = 0 ; t < 3 ; t ++ ) {

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

jeigu ( t < 2 ) cout << \t | \t ;

}

cout << \t | \n ;

jeigu ( m < 2 ) cout << '___________________________ \n ;

}

cout << \n ; }

bool isMoveValid ( char lenta [ 3 ] [ 3 ] , tarpt eilė , tarpt plk ) {

grąžinti ( eilė >= 0 && eilė < 3 && plk >= 0 && plk < 3 && lenta [ eilė ] [ plk ] == '' ) ;

}

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

dėl ( tarpt m = 0 ; m < 3 ; m ++ ) {

dėl ( tarpt t = 0 ; t < 3 ; t ++ ) {

jeigu ( lenta [ m ] [ t ] == '' ) {

grąžinti klaidinga ;

} } }

grąžinti tiesa ; }

char čekis Laimėtojas ( char lenta [ 3 ] [ 3 ] ) {

dėl ( tarpt m = 0 ; m < 3 ; m ++ ) {

jeigu ( lenta [ m ] [ 0 ] == lenta [ m ] [ 1 ] && lenta [ m ] [ 1 ] == lenta [ m ] [ 2 ] && lenta [ m ] [ 0 ] != '' ) {

grąžinti lenta [ m ] [ 0 ] ;

}

jeigu ( lenta [ 0 ] [ m ] == lenta [ 1 ] [ m ] && lenta [ 1 ] [ m ] == lenta [ 2 ] [ m ] && lenta [ 0 ] [ m ] != '' ) {

grąžinti lenta [ 0 ] [ m ] ;

} }

jeigu ( lenta [ 0 ] [ 0 ] == lenta [ 1 ] [ 1 ] && lenta [ 1 ] [ 1 ] == lenta [ 2 ] [ 2 ] && lenta [ 0 ] [ 0 ] != '' ) {

grąžinti lenta [ 0 ] [ 0 ] ;

}

jeigu ( lenta [ 0 ] [ 2 ] == lenta [ 1 ] [ 1 ] && lenta [ 1 ] [ 1 ] == lenta [ 2 ] [ 0 ] && lenta [ 0 ] [ 2 ] != '' ) {

grąžinti lenta [ 0 ] [ 2 ] ;

}

grąžinti '' ;

}

Štai jo funkcijų suskirstymas:



„#include “ yra išankstinio procesoriaus direktyva, apimanti įvesties / išvesties srauto biblioteką įvesties / išvesties operacijoms. Naudojant vardų sritį std, C++ programoje galima tiesiogiai naudoti cout, cin ir kt. funkcijas, nereikalaujant „std:: priešdėlio“.



Šioje programoje yra keturi funkcijų prototipai – tai drawBoard(), isMoveValid(), isBoardFull() ir checkWinner(). Funkcijos deklaracija yra žinoma kaip funkcijos prototipas. Nors jis pateikiamas po pagrindinės programos funkcijos, jis bus naudojamas. Pagrindinė funkcija yra žaidimo kilpa ir logika, skirta valdyti žaidėjų eiles ir judesius. Pagal pagrindinę funkciją žaidimo lenta inicijuojama tarpais.





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

Po to apibrėžiami du eilučių ir stulpelių kintamieji, kurie saugo žaidėjo judėjimo įvestį. „char currentPlayer = „X“;“ apibrėžia, kad „X“ žaidėjas eina pirmas.

Dabar prasideda while (tikrasis) žaidimo ciklas ir jis tęsiasi tol, kol paaiškėja nugalėtojas arba lygiosios. Ši „while“ kilpa iškviečia „drawBoard ();“ rodyti lentą. Parodžius plokštę konsolėje, vartotojo prašoma pasirinkti langelį, kurį norite pažymėti šiame kodo sakinyje:



cout << 'Žaidėjas' << currentPlayer << ' eilė. Įveskite eilutę ir stulpelį (1-3): ' ;

Žaidėjas įveda savo ėjimą į „cin >> row >> col;“.

Pasirinkusi žymėjimui skirtą langelį, programa pirmiausia patikrins įvesties galiojimą ir įsitikins, kad langelis dar neužpildytas, iškviesdama funkciją isMoveValid().

lenta [ eilė ] [ plk ] = currentPlayer ;

Šis teiginys uždeda žaidėjo ženklą ant lentos.

char nugalėtojas = čekis Laimėtojas ( lenta ) ;

jeigu ( nugalėtojas != '' ) {

piešimo lenta ( lenta ) ;

cout << 'Žaidėjas' << nugalėtojas << 'laimi! \n ;

Šie teiginiai tikrina laimėtoją kiekvieną kartą, kai žaidėjas pažymi įrašą lentoje. Nugalėtojo vardas bus paskelbtas, jei bus laimėtojas, o programa išeis iš žaidimo ciklo.

jeigu ( isBoardFull ( lenta ) ) {

Šis teiginys patikrina, ar nėra lygių. Lygiosios sąlyga atsiranda tuo atveju, kai lenta yra pilna ir nėra nugalėtojo. Šiuo atveju: 'Tai kaklaraištis!' yra atspausdintas ekrane.

currentPlayer = ( currentPlayer == 'X' ) ? 'o' : 'X' ;

Šis teiginys perjungia žaidėjus, kad kiekvienas žaidėjas turėtų galimybę žaisti savo eilę.

cout << 'Neteisingas perkėlimas. Pasirinkite kitą langelį. \n ;

Jei perkėlimas negalioja, vartotojas raginamas dar kartą įvesti ir pasirinkti bet kurį kitą langelį.

Po „pagrindinės“ funkcijos prasidės anksčiau deklaruotų funkcijų prototipų funkcijų apibrėžimai. Pirmoji čia apibrėžta funkcija yra drawBoard(), kuri naudojama nubrėžti „tic-tac-toe“ lentą prie konsolės. Funkcija drawBoard() išspausdina esamą lentos būseną, įskaitant tinklelio linijas.

Kita čia apibrėžta funkcija yra isMoveValid(). Ši funkcija naudojama norint nustatyti, ar judėjimas leidžiamas tiek lentos viduje, tiek tuščiame langelyje. Funkcija isBoardFull() naudojama patikrinti, ar lenta dar pilna. Tai sąlyga lygioms situacijoms, kai nėra nugalėtojo. „isBoardFull()“ patikrina, ar visos lentos pozicijos yra užimtos, o tai rodo lygiąsias, jei nugalėtojo nėra. Jei yra laimėtojas, jį galima nustatyti naudojant funkciją checkWinner(). CheckWinner() patikrina visas galimas laimėjimo eilutes, ar nėra to paties žaidėjo ženklo („X“ arba „O“) ir grąžina laimėjusio žaidėjo ženklą, jei jis rastas, arba tarpo simbolį „ “, jei laimėtojo dar nėra. Toliau pateikiama programos išvestis. Tai rodo kiekvieną kiekvieno žaidėjo posūkį.

Pirma, lenta yra aiški; žaidėjas „X“ raginamas pasirinkti langelį, kurį norite pažymėti. Čia žaidėjas „X“ įveda 2 ir 2. 2 eilutės ir 2 stulpelio langeliai yra pažymėti. Žr. toliau pateiktą pažymėtą lentą:

Dabar žaidėjo O eilė. Žaidėjas raginamas pasirinkti langelį, kurį norite pažymėti. Žaidėjas „O“ pasirenka 1 eilutei ir 1 stulpeliui. Pasirinktas langelis pažymėtas grotuvui „O“, kaip parodyta šiame išvesties fragmente:

Visi kiekvieno žaidėjo posūkiai vyks pagal tą patį modelį. Ateina žaidėjo X eilė, o žaidėjas pasirenka 1 eilutei ir 2 stulpeliui. Žr. toliau pateiktas išvesties momentines nuotraukas:

Dabar eilė priklauso žaidėjui „O“. Žaidėjas pasirenka 1 eilutei ir 3 stulpeliui.

Kitas ėjimas vėl yra žaidėjui „X“. Žaidėjas pasirenka 3 eilutei ir 1 stulpeliui.

Žaidėjas „O“ pasirenka 3 eilutei ir 2 stulpeliui.

Žaidėjas „X“ pasirenka antrą eilutę ir trečią stulpelį.

Žaidėjas „O“ dabar pasirenka antrą eilutę ir pirmąjį stulpelį.

Žaidėjas „X“ šį kartą pasirenka trečią eilutę ir trečią stulpelį.

Nė vienas žaidėjas negalėjo padaryti jokios linijos horizontaliai, vertikaliai ar įstrižai, todėl tai yra lygioji. Pasirinktos įvesties masyvo nugalėtojo nėra.

Apskritai, kodą sudaro pagrindinė žaidimo kilpa, atsakinga už žaidimo būsenos ir vartotojo įvesties valdymą, taip pat kelios naudingos funkcijos, kurios naudojamos norint nupiešti lentą, patvirtinti ėjimus, patikrinti, ar pilna lenta, ir nustatyti, ar yra laimėtojas. .

Išvada

„Tic-tac-toe“ žaidimo kūrimas naudojant C++ yra puikus praktinis pratimas, skirtas sustiprinti jūsų programavimo įgūdžius. Straipsnyje tiksliai paaiškinama, kaip sukurti tic-tac-toe C++. Šiame straipsnyje pateikiamos nuoseklios gairės apėmė 2D masyvą, funkcijas ir sąlygas, skirtas skaitytojams suprasti žaidimo mechaniką, vartotojo sąveiką ir efektyvų kodo struktūrizavimą. Išsamus kodo aprašymas ir pagrindinių žaidimo funkcijų paaiškinimai suteikia skaitytojams neįkainojamų įžvalgų tiek apie C++ programavimo praktiką, tiek apie paprasto žaidimo kūrimo subtilybes.