Kuidas luua põhilist tekstipõhist mängu C++-s

Kuidas Luua Pohilist Tekstipohist Mangu C S



Tekstipõhised mängud tuginevad mängijaga suhtlemiseks tekstimärkidele ja käsurea liidesele. Neil pole graafilisi pilte, helisid ega animatsioone. Kasutaja sisestab käsu konsooliakna kaudu.

Kuidas luua põhilist tekstipõhist mängu C++-s

Tekstipõhised mängud C++ keeles võimaldavad mängijal sisestada käske läbi konsooliakna ja programm töötleb mängija käike. Siin olen loonud tekstipõhise tic-tac-toe mängu, mis võimaldab kasutajal mängida kahte võimalust. Kasutaja saab mängida kas C++ kompilaatoriga või kaasinimesega. Sellel mängul on funktsioon, mis kogub võitnud mängija skoori kokku. Pärast esimese mängu tulemuse väljakuulutamist on saadaval korduskohtumise võimalus.

Mängu võitmise reeglid

Kaks mängijat mängivad tic-tac-toe mängu, asetades X ja 0 vaheldumisi ühte üheksast vabast ruudust kolm korda kolmel. Mängu võidab mängija, kes saab esimesena kolm oma järjestikust punkti vertikaalses, horisontaalses või diagonaalses suunas. Iga mängija peab mõtlema targalt ja vaatama ette teise mängija järgmist käiku.







Tekstipõhise tic-tac-toe mängu kujundamise koodis on erinevad jaotised, mis on funktsionaalsuse alusel jagatud. Esimeses osas otsustab kasutaja, kas ta mängib arvuti või kaasinimesega. Pärast võimendusrežiimi otsustamist küsib programm kasutajalt sisendit. Mõlemad mängijad sisestavad üksteise järel sisendi.



//Võtke mängijatelt sisend
tühine mängija sisend ( Mängija & mängija ) {
int pos ;
cout << endl ;
cout << ' \t ' << mängija. getName ( ) << 'Pöörake:' ;
cout << ' \t Sisesta positsioon ' <> pos ;
pos - = 1 ;
kui ( tühiIndeks [ pos ] == 1 ) {
cout << '-----Positsioon ei ole tühi -------' << endl ;
mängija sisend ( mängija ) ;
} muidu {
tühiIndeks [ pos ] = 1 ;
tühiArv - = 1 ;
mängija. getName ( ) . võrdlema ( 'Mängija I' ) == 0 ? juhatus [ pos ] = 'X' : juhatus [ pos ] = 'o' ;
}

}

Pärast kasutajalt sisendite võtmist kontrollib see võidureeglit. Funktsioonil checkWin() on kaks parameetrit p1 ja p2, et kontrollida, kas mängija on võitnud või mitte. Funktsioonis i, j ja k on deklareeritud erinevad muutujad, mis on tsükli jaoks deklareeritud täisarvulised muutujad ning lipp on Boole'i ​​funktsioon võidutingimuse kontrollimiseks. Silmus algab kõige esimesest positsioonist ja jätkab iteratsiooni kõigi üheksa positsiooni jooksul. Esimene_sümbol on märk, mis võib olla 0 või X, kui see on tõene, siis kontrollitakse võidureegli jaoks kõiki võimalikke kombinatsioone. Vastasel juhul liigub iteraator järgmisele positsioonile ja sama jätkub, kuni kõik võimalikud positsioonid on kontrollitud. Kui lipp on seatud tõeseks, kuulutatakse välja võitja ja programm palub valiku uuesti teha.



tühine checkWin ( Mängija & p1, mängija & p2 ) {
int mina, j, k ;
bool lipp = vale ;
char esimene_sümbol ;
jaoks ( i = 0 ; i < 8 ; i ++ ) {
esimene_sümbol = juhatus [ võidunimekiri [ i ] . rida [ 0 ] ] ;

kui ( ( esimene_sümbol ! = 'X' ) && ( esimene_sümbol ! = 'o' ) ) {
lipp = vale ;
jätka ;
}
lipp = tõsi ;
jaoks ( j = 0 ; j < 3 ; j ++ ) {
kui ( esimene_sümbol ! = juhatus [ võidunimekiri [ i ] . rida [ j ] ] ) {
lipp = vale ;
murda ;
}
}
kui ( lipp ) {
gameOn = 0 ;
kui ( esimene_sümbol == 'X' ) {
cout << '-----------------------' << endl ;
cout << ' \t Mängija, ma VÕITSIN' << endl ;
cout << '-----------------------' << endl ;
p1. võitis ( ) ;
} muidu {
p2. võitis ( ) ;
kui ( Arvuti vastu ) {
cout << '-----------------------' << endl ;
cout << ' \t Arvuti VÕITS' << endl ;
cout << '-----------------------' << endl ;
} muidu {
cout << '-----------------------' << endl ;
cout << ' \t Mängija II VÕITIS' << endl ;
cout << '-----------------------' << endl ;

}
}
displayScore ( p1, p2 ) ;
murda ;
}

See koodi osa näitab mängu tulemust. Kui mäng toimub arvuti vastu, siis kuvatakse mängija 1 ja arvuti tulemus, vastasel juhul kuvatakse mängija 1 ja mängija 2 skoor.





tühine displayScore ( Mängija & p1, mängija & p2 ) {
cout << endl ;
cout << ' \t Skoor: \t ' ;
kui ( Arvuti vastu )
cout << 'Mängija I:' << p1. getScore ( ) << ' \t Arvuti: ' << p2. getScore ( ) << endl ;
muidu
cout << 'Mängija I:' << p1. getScore ( ) << ' \t Mängija II: ' << p2. getScore ( ) << endl ;
}

See on põhikood kahele mängijale mõeldud tic-tac-toe mängu läbiviimiseks. Kasutaja saab valida mitmesuguste protseduuride hulgast, mida teha, kasutades lüliti juhtumi avaldust. See kood pakub kasutajasõbralikku liidest mängu mängimiseks C++ kompilaatoris ja koodi täitmine jätkub, kuni kasutaja valib väljumisvaliku.

int peamine ( )
{
int ptk ;

samal ajal ( 1 ) {
cout << '      ----------MENÜÜ----------' << endl ;
cout << ' \t 1. 1 mängija mäng' << endl ;
cout << ' \t 2. 2 mängijaga mäng' << endl ;
cout << ' \t 3. Väljumiseks ' << endl ;
cout << '      ----------' << endl ;
cout << endl ;
cout << ' \t Valige suvand' <> ptk ;
lüliti ( ptk ) {
juhtum 1 : {
Mäng * mängu = uus Mäng ;
mängu - > soojust ( ) ;
mängu - > onePlayerGame ( ) ;
}
murda ;
juhtum 2 : {
Mäng * mängu = uus Mäng ;
mängu - > soojust ( ) ;
mängu - > TwoPlayerGame ( ) ;
}
murda ;
juhtum 3 :
tagasi 0 ;
vaikimisi :
cout << 'OOP, vigane valik! PROOVI UUESTI' ;
}

}
tagasi 0 ;
}

Tekstipõhise Tic-Tac-Toc mängu täielik kood

See on täielik kood tekstipõhise tic-tac-toe mängu kujundamiseks ja teostamiseks.



#include
#include
#include
#include
#include
kasutades nimeruum std ;

typedef struktuur {
int * rida ;
} WinList ;


klass Mängija {
privaatne :
stringi nimi ;
int skoor ;
avalik :
Mängija ( ) : Mängija { '' } { }
Mängija ( string n ) : skoor { 0 } , nimi { n } { }

tühine võitis ( ) {
//skoori suurendamine
skoor ++ ;
}
int getScore ( ) { tagasi see - > skoor ; }

string getName ( ) { tagasi see - > nimi ; }
} ;

klass Mäng {
privaatne :
char juhatus [ 9 ] ;
int tühiIndeks [ 9 ] ;
int gameOn, arvuti vastu ;
int tühiArv ;
WinListi võidunimekiri [ 8 ] ;

tühine kuvalaud ( ) {
cout << endl ;
cout << '   |   |   ' << endl ;
cout << ' ' << juhatus [ 0 ] << ' | ' << juhatus [ 1 ] << ' | ' << juhatus [ 2 ] << endl ;
cout << '   |   |   ' << endl ;
cout << '-----------' << endl ;
cout << '   |   |   ' << endl ;
cout << ' ' << juhatus [ 3 ] << ' | ' << juhatus [ 4 ] << ' | ' << juhatus [ 5 ] << endl ;
cout << '   |   |   ' << endl ;
cout << '-----------' << endl ;
cout << '   |   |   ' << endl ;
cout << ' ' << juhatus [ 6 ] << ' | ' << juhatus [ 7 ] << ' | ' << juhatus [ 8 ] << endl ;
cout << '   |   |   ' << endl ;
cout << endl ;
}

tühine arvuti sisend ( ) {
int pos ;
pos = rand ( ) % 10 ;
kui ( tühiIndeks [ pos ] == 1 ) {
kui ( tühiArv < 0 )
tagasi ;
arvuti sisend ( ) ;
} muidu {
cout << 'Vali arvuti:' << pos + 1 << endl ;
tühiIndeks [ pos ] = 1 ;
tühiArv - = 1 ;
juhatus [ pos ] = 'o' ;
}

}

tühine mängija sisend ( Mängija & mängija ) {
int pos ;
cout << endl ;
cout << ' \t ' << mängija. getName ( ) << 'Pöörake:' ;
cout << ' \t Sisesta positsioon ' <> pos ;
pos - = 1 ;
kui ( tühiIndeks [ pos ] == 1 ) {
cout << '-----Positsioon ei ole tühi -------' << endl ;
mängija sisend ( mängija ) ;
} muidu {
tühiIndeks [ pos ] = 1 ;
tühiArv - = 1 ;
mängija. getName ( ) . võrdlema ( 'Mängija I' ) == 0 ? juhatus [ pos ] = 'X' : juhatus [ pos ] = 'o' ;
}

}

tühine checkWin ( Mängija & p1, mängija & p2 ) {
int mina, j, k ;
bool lipp = vale ;
char esimene_sümbol ;
jaoks ( i = 0 ; i < 8 ; i ++ ) {
esimene_sümbol = juhatus [ võidunimekiri [ i ] . rida [ 0 ] ] ;

kui ( ( esimene_sümbol ! = 'X' ) && ( esimene_sümbol ! = 'o' ) ) {
lipp = vale ;
jätka ;
}
lipp = tõsi ;
jaoks ( j = 0 ; j < 3 ; j ++ ) {
kui ( esimene_sümbol ! = juhatus [ võidunimekiri [ i ] . rida [ j ] ] ) {
lipp = vale ;
murda ;
}
}
kui ( lipp ) {
gameOn = 0 ;
kui ( esimene_sümbol == 'X' ) {
cout << '-----------------------' << endl ;
cout << ' \t Mängija, ma VÕITSIN' << endl ;
cout << '-----------------------' << endl ;
p1. võitis ( ) ;
} muidu {
p2. võitis ( ) ;
kui ( Arvuti vastu ) {
cout << '-----------------------' << endl ;
cout << ' \t Arvuti VÕITS' << endl ;
cout << '-----------------------' << endl ;
} muidu {
cout << '-----------------------' << endl ;
cout << ' \t Mängija II VÕITIS' << endl ;
cout << '-----------------------' < 0 ) && ( gameOn ! = 0 ) ) {

kui ( Arvuti vastu )
käsi == 1 ? arvuti sisend ( ) : mängija sisend ( p2 ) ;
muidu
käsi == 1 ? mängija sisend ( p1 ) : mängija sisend ( p2 ) ;
käsi = ! käsi ;
kuvalaud ( ) ;
checkWin ( p1, p2 ) ;
}
kui ( tühiArv <= 0 ) {
cout << '      -----------------------' << endl ;
cout << ' \t VÕITJA pole' << endl ;
cout << '      -----------------------' << endl ;
}
cout << endl ;
cout <> kordusmatš ;
kui ( ( kordusmatš == 'JA' ) || ( kordusmatš == 'ja' ) ) {
soojust ( ) ;
mängida ( p1, p2 ) ;
}

}
tühine displayScore ( Mängija & p1, mängija & p2 ) {
cout << endl ;
cout << ' \t Skoor: \t ' ;
kui ( Arvuti vastu )
cout << 'Mängija I:' << p1. getScore ( ) << ' \t Arvuti: ' << p2. getScore ( ) << endl ;
muidu
cout << 'Mängija I:' << p1. getScore ( ) << ' \t Mängija II: ' << p2. getScore ( ) << endl ;
}

avalik :
Mäng ( ) : tühiArv { 0 } , gameOn { 1 } , Arvuti vastu { 0 } {
soojust ( ) ;
võidunimekiri [ 0 ] . rida = uus int [ 3 ] { 0 , 1 , 2 } ;
võidunimekiri [ 1 ] . rida = uus int [ 3 ] { 3 , 4 , 5 } ;
võidunimekiri [ 2 ] . rida = uus int [ 3 ] { 6 , 7 , 8 } ;
võidunimekiri [ 3 ] . rida = uus int [ 3 ] { 0 , 3 , 6 } ;
võidunimekiri [ 4 ] . rida = uus int [ 3 ] { 1 , 4 , 7 } ;
võidunimekiri [ 5 ] . rida = uus int [ 3 ] { 2 , 5 , 8 } ;
võidunimekiri [ 6 ] . rida = uus int [ 3 ] { 0 , 4 , 8 } ;
võidunimekiri [ 7 ] . rida = uus int [ 3 ] { 2 , 4 , 6 } ;
}

tühine soojust ( ) {
gameOn = 1 ;

tühiArv = 0 ;
srand ( aega ( 0 ) ) ;
jaoks ( suurus_t i = 0 ; i < 10 ; i ++ ) {
tühiIndeks [ i ] = 0 ;
juhatus [ i ] = ( i + 1 ) + '0' ;
tühiArv ++ ;
}
tühiArv -- ;
}

tühine onePlayerGame ( ) {
//Pleieri loomine
Mängija lk ( 'Mängija I' ) ;
Mängija c ( 'Arvuti' ) ;
cout << '       -----------------------' << endl ;
cout << ' \t Mängija I: X \t Arvuti: O' << endl ;
cout << '       -----------------------' << endl ;
cout << endl ;
Arvuti vastu = 1 ;
mängida ( c, lk ) ;

}

tühine TwoPlayerGame ( ) {
//Pleieri loomine
Mängija lk ( 'Mängija I' ) ;
Mängija c ( 'Mängija II' ) ;
cout << '       -----------------------' << endl ;
cout << ' \t Mängija I: X \t Mängija II: O' << endl ;
cout << '       -----------------------' << endl ;
cout << endl ;
Arvuti vastu = 0 ;
mängida ( c, lk ) ;
}
} ;

int peamine ( )
{
int ptk ;

samas ( 1 ) {
cout << '      ----------MENÜÜ----------' << endl ;
cout << ' \t 1. 1 mängija mäng' << endl ;
cout << ' \t 2. 2 mängijaga mäng' << endl ;
cout << ' \t 3. Väljumiseks ' << endl ;
cout << '      ----------' << endl ;
cout << endl ;
cout << ' \t Valige suvand' <> ptk ;
lüliti ( ptk ) {
juhtum 1 : {
Mäng * mängu = uus Mäng ;
mängu - > soojust ( ) ;
mängu - > onePlayerGame ( ) ;
}
murda ;
juhtum 2 : {
Mäng * mängu = uus Mäng ;
mängu - > soojust ( ) ;
mängu - > twoPlayerGame ( ) ;
}
murda ;
juhtum 3 :
tagasi 0 ;
vaikimisi :
cout << 'OOP, vigane valik! PROOVI UUESTI' ;
}

}
tagasi 0 ;
}

See on täielik kood tic-tac-toe mängu läbiviimiseks, mida saab mängida kahes režiimis, kas arvuti või kaasinimesega. See on mitmekülgne kood, mis sisaldab kõiki võimalikke käske. Kui kasutaja sisestab juba täidetud positsiooni, ei kirjuta ta seda kohta üle ja loeb selle liigutuse kehtetuks.

Siiani on mängija esimene valinud esimese kasti ja siis järgmisel käigul märkis arvuti kuuenda kasti:

Mõlemad mängijad on seni valinud kaks kasti ja järgmisel käigul valib mängija I seitsmenda kasti, mille tulemuseks on järjestikune vertikaalne muster:

Kasutaja valib mängu mängimiseks arvuti kasutamise, nii et pärast kolme käigu sooritamist võitis kasutaja arvutist ja mängija 1 arvestusse lisatakse üks skoor. Pärast esimese matši lõppu küsib koostaja kordusmatši. Kasutaja otsustab valikute hulgast ja programm naaseb põhisektsiooni. Pärast kolme valiku valimist käivitab kompilaator koodi täitmise.

Järeldus

Tekstipõhised mängud tuginevad mängijaga suhtlemiseks tekstimärkidele ja käsurea liidesele. Neil pole graafilisi pilte, helisid ega animatsioone. Kasutaja sisestab käsu konsooliakna kaudu. Kasutajasõbralik tekstipõhine tic-tac-toe mäng on üles ehitatud C++ abil. See kasutab erinevaid käske, et luua mäng, mida saab mängida kas arvuti või mõne teise mängijaga.