Kaip sukurti pagrindinį tekstinį žaidimą C++

Kaip Sukurti Pagrindini Tekstini Zaidima C



Teksto žaidimai pagrįsti teksto simboliais ir komandų eilutės sąsaja sąveikai su žaidėju. Juose nėra grafinių vaizdų, garsų ar animacijų. Vartotojas įveda komandą per konsolės langą.

Kaip sukurti pagrindinį tekstinį žaidimą C++

Tekstiniai žaidimai C++ leidžia žaidėjui įvesti komandas per konsolės langą, o programa apdoroja grotuvo judesius. Čia aš sukūriau tekstinį „tic-tac-toe“ žaidimą, kuris suteikia vartotojui dvi galimybes žaisti. Vartotojas gali žaisti su C++ kompiliatoriumi arba su kitais žmonėmis. Šiame žaidime yra funkcija, kuri nuolat sumuoja laimėjusio žaidėjo balą. Paskelbus pirmojo žaidimo baigtį, galima revanšo parinktis.

Žaidimo laimėjimo taisyklės

Du žaidėjai žaidžia „tic-tac-toe“ žaidimą, dėdami X ir 0 į vieną iš devynių galimų trijų taškų tinklelio laukelių. Žaidimą laimi pirmasis žaidėjas, surinkęs tris iš eilės taškus vertikalia, horizontalia arba įstriža kryptimi. Kiekvienas žaidėjas turi protingai mąstyti ir žiūrėti į kitą kito žaidėjo žingsnį.







Tekstinio žaidimo „tic-tac-toe“ kūrimo kodas turi skirtingus skyrius, suskirstytas pagal funkcionalumą. Pirmoje dalyje vartotojas nusprendžia, ar žaisti su kompiuteriu, ar su bendražmogumi. Nusprendusi stiprinimo režimą, programa paprašo vartotojo įvesti. Abu žaidėjai įveda įvestį vienas po kito.



//Priimkite žaidėjų indėlį
tuštuma žaidėjo įvestis ( Žaidėjas & žaidėjas ) {
tarpt poz ;
cout << endl ;
cout << \t << žaidėjas. getName ( ) << 'Pasukti:' ;
cout << \t Įveskite poziciją ' <> poz ;
poz - = 1 ;
jeigu ( tuščiasIndeksas [ poz ] == 1 ) {
cout << '-----Pozicija ne tuščia-------' << endl ;
žaidėjo įvestis ( žaidėjas ) ;
} Kitas {
tuščiasIndeksas [ poz ] = 1 ;
tuščiasCount - = 1 ;
žaidėjas. getName ( ) . palyginti ( „I žaidėjas“ ) == 0 ? lenta [ poz ] = 'X' : lenta [ poz ] = 'o' ;
}

}

Paėmusi įvestis iš vartotojo, ji patikrina laimėjimo taisyklę. Funkcija checkWin() turi du parametrus p1 ir p2, kad patikrintų, ar žaidėjas laimėjo, ar ne. Funkcijoje i, j ir k deklaruojami skirtingi kintamieji yra sveikieji kintamieji, deklaruoti ciklei, o vėliavėlė yra Būlio funkcija, skirta patikrinti laimėjimo sąlygą. Ciklas prasideda nuo pačios pirmosios pozicijos ir kartojasi visose devyniose pozicijose. Pirmasis_simbolis yra simbolis, kuris gali būti 0 arba X, jei tai tiesa, tada tikrinami visi galimi deriniai, kad laimėtų taisyklė. Priešingu atveju iteratorius pereina į kitą poziciją ir tęsiasi tol, kol bus patikrintos visos galimos pozicijos. Jei vėliava nustatyta kaip teisinga, tada paskelbiamas nugalėtojas, o programa prašo pasirinkti dar kartą.



tuštuma checkWin ( Žaidėjas & p1, grotuvas & p2 ) {
tarpt aš, j, k ;
bool vėliava = klaidinga ;
char pirmasis_simbolis ;
dėl ( i = 0 ; i < 8 ; i ++ ) {
pirmasis_simbolis = lenta [ laimėjimų sąrašas [ i ] . eilė [ 0 ] ] ;

jeigu ( ( pirmasis_simbolis ! = 'X' ) && ( pirmasis_simbolis ! = 'o' ) ) {
vėliava = klaidinga ;
Tęsti ;
}
vėliava = tiesa ;
dėl ( j = 0 ; j < 3 ; j ++ ) {
jeigu ( pirmasis_simbolis ! = lenta [ laimėjimų sąrašas [ i ] . eilė [ j ] ] ) {
vėliava = klaidinga ;
pertrauka ;
}
}
jeigu ( vėliava ) {
                gameOn = 0 ;
jeigu ( pirmasis_simbolis == 'X' ) {
cout << '-----------------------' << endl ;
cout << \t Žaidėjas aš laimėjau' << endl ;
cout << '-----------------------' << endl ;
p1. laimėjo ( ) ;
} Kitas {
p2. laimėjo ( ) ;
jeigu ( prieš Kompiuterį ) {
cout << '-----------------------' << endl ;
cout << \t Kompiuteris laimėjo' << endl ;
cout << '-----------------------' << endl ;
} Kitas {
cout << '-----------------------' << endl ;
cout << \t Žaidėjas II laimėjo' << endl ;
cout << '-----------------------' << endl ;

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

Ši kodo dalis rodo žaidimo rezultatą. Jei žaidžiama prieš kompiuterį, rodomas 1 žaidėjo ir kompiuterio rezultatas, kitu atveju rodomas 1 ir 2 žaidėjo rezultatas.





tuštuma displayScore ( Žaidėjas & p1, grotuvas & p2 ) {
cout << endl ;
cout << \t BALAI: \t ;
jeigu ( prieš Kompiuterį )
cout << 'I žaidėjas:' << p1. getScore ( ) << \t Kompiuteris: ' << p2. getScore ( ) << endl ;
Kitas
cout << 'I žaidėjas:' << p1. getScore ( ) << \t II žaidėjas: ' << p2. getScore ( ) << endl ;
}

Tai yra pagrindinis dviejų žaidėjų „tic-tac-toe“ žaidimo vykdymo kodas. Vartotojas gali pasirinkti iš įvairių procedūrų, kurias reikia atlikti, naudodamas perjungimo atvejo pareiškimą. Šis kodas suteikia patogią sąsają žaisti žaidimą C++ kompiliatoriuje, o kodas vykdomas tol, kol vartotojas pasirenka išėjimo parinktį.

tarpt pagrindinis ( )
{
tarpt sk ;

kol ( 1 ) {
cout << ' ----------MENIU----------' << endl ;
cout << \t 1. 1 žaidėjo žaidimas' << endl ;
cout << \t 2. 2 žaidėjų žaidimas' << endl ;
cout << \t 3. Norėdami išeiti ' << endl ;
cout << '      ----------' << endl ;
cout << endl ;
cout << \t Pasirinkite parinktį' <> sk ;
jungiklis ( sk ) {
atveju 1 : {
Žaidimas * žaidimas = naujas Žaidimas ;
žaidimas - > karštis ( ) ;
žaidimas - > onePlayerGame ( ) ;
}
pertrauka ;
atveju 2 : {
Žaidimas * žaidimas = naujas Žaidimas ;
žaidimas - > karštis ( ) ;
žaidimas - > twoPlayerGame ( ) ;
}
pertrauka ;
atveju 3 :
grąžinti 0 ;
numatytas :
cout << 'OOP, netinkama parinktis! BANDYKITE DAR kartą' ;
}

}
grąžinti 0 ;
}

Visas tekstas pagrįsto Tic-Tac-Toc žaidimo kodas

Tai pilnas kodas, skirtas kurti ir vykdyti tekstinį „tic-tac-toe“ žaidimą.



#include
#įtraukti
#include
#įtraukti
#include
naudojant vardų erdvė std ;

typedef struktūra {
tarpt * eilė ;
} WinList ;


klasė Žaidėjas {
privatus :
eilutės pavadinimas ;
tarpt balas ;
viešas :
Žaidėjas ( ) : Žaidėjas { '' } { }
Žaidėjas ( eilutė n ) : balas { 0 } , vardas { n } { }

tuštuma laimėjo ( ) {
//padidinkite balą
balas ++ ;
}
tarpt getScore ( ) { grąžinti tai - > balas ; }

eilutė getName ( ) { grąžinti tai - > vardas ; }
} ;

klasė Žaidimas {
privatus :
char lenta [ 9 ] ;
tarpt tuščiasIndeksas [ 9 ] ;
tarpt gameOn, prieš kompiuterį ;
tarpt tuščiasCount ;
WinList laimėtojų sąrašas [ 8 ] ;

tuštuma ekrano lenta ( ) {
cout << endl ;
cout << '   |   |   ' << endl ;
cout << ' ' << lenta [ 0 ] << ' | ' << lenta [ 1 ] << ' | ' << lenta [ 2 ] << endl ;
cout << '   |   |   ' << endl ;
cout << '-----------' << endl ;
cout << '   |   |   ' << endl ;
cout << ' ' << lenta [ 3 ] << ' | ' << lenta [ 4 ] << ' | ' << lenta [ 5 ] << endl ;
cout << '   |   |   ' << endl ;
cout << '-----------' << endl ;
cout << '   |   |   ' << endl ;
cout << ' ' << lenta [ 6 ] << ' | ' << lenta [ 7 ] << ' | ' << lenta [ 8 ] << endl ;
cout << '   |   |   ' << endl ;
cout << endl ;
}

tuštuma kompiuterio įvestis ( ) {
tarpt poz ;
poz = rand ( ) % 10 ;
jeigu ( tuščiasIndeksas [ poz ] == 1 ) {
jeigu ( tuščiasCount < 0 )
grąžinti ;
kompiuterio įvestis ( ) ;
} Kitas {
cout << 'Pasirinkite kompiuterį:' << poz + 1 << endl ;
tuščiasIndeksas [ poz ] = 1 ;
tuščiasCount - = 1 ;
lenta [ poz ] = 'o' ;
}

}

tuštuma žaidėjo įvestis ( Žaidėjas & žaidėjas ) {
tarpt poz ;
cout << endl ;
cout << \t << žaidėjas. getName ( ) << 'Pasukti:' ;
cout << \t Įveskite poziciją ' <> poz ;
poz - = 1 ;
jeigu ( tuščiasIndeksas [ poz ] == 1 ) {
cout << '-----Pozicija ne tuščia-------' << endl ;
žaidėjo įvestis ( žaidėjas ) ;
} Kitas {
tuščiasIndeksas [ poz ] = 1 ;
tuščiasCount - = 1 ;
žaidėjas. getName ( ) . palyginti ( „I žaidėjas“ ) == 0 ? lenta [ poz ] = 'X' : lenta [ poz ] = 'o' ;
}

}

tuštuma checkWin ( Žaidėjas & p1, grotuvas & p2 ) {
tarpt aš, j, k ;
bool vėliava = klaidinga ;
char pirmasis_simbolis ;
dėl ( i = 0 ; i < 8 ; i ++ ) {
pirmasis_simbolis = lenta [ laimėjimų sąrašas [ i ] . eilė [ 0 ] ] ;

jeigu ( ( pirmasis_simbolis ! = 'X' ) && ( pirmasis_simbolis ! = 'o' ) ) {
vėliava = klaidinga ;
Tęsti ;
}
vėliava = tiesa ;
dėl ( j = 0 ; j < 3 ; j ++ ) {
jeigu ( pirmasis_simbolis ! = lenta [ laimėjimų sąrašas [ i ] . eilė [ j ] ] ) {
vėliava = klaidinga ;
pertrauka ;
}
}
jeigu ( vėliava ) {
                gameOn = 0 ;
jeigu ( pirmasis_simbolis == 'X' ) {
cout << '-----------------------' << endl ;
cout << \t Žaidėjas aš laimėjau' << endl ;
cout << '-----------------------' << endl ;
p1. laimėjo ( ) ;
} Kitas {
p2. laimėjo ( ) ;
jeigu ( prieš Kompiuterį ) {
cout << '-----------------------' << endl ;
cout << \t Kompiuteris laimėjo' << endl ;
cout << '-----------------------' << endl ;
} Kitas {
cout << '-----------------------' << endl ;
cout << \t Žaidėjas II laimėjo' << endl ;
cout << '-----------------------' < 0 ) && ( gameOn ! = 0 ) ) {

jeigu ( prieš Kompiuterį )
ranka == 1 ? kompiuterio įvestis ( ) : žaidėjo įvestis ( p2 ) ;
Kitas
ranka == 1 ? žaidėjo įvestis ( p1 ) : žaidėjo įvestis ( p2 ) ;
ranka = ! ranka ;
ekrano lenta ( ) ;
checkWin ( p1, p2 ) ;
}
jeigu ( tuščiasCount <= 0 ) {
cout << '      -----------------------' << endl ;
cout << \t NĖRA LAIMĖTOJO' << endl ;
cout << '      -----------------------' << endl ;
}
cout << endl ;
cout <> revanšas ;
jeigu ( ( revanšas == 'IR' ) || ( revanšas == 'ir' ) ) {
karštis ( ) ;
žaisti ( p1, p2 ) ;
}

}
tuštuma displayScore ( Žaidėjas & p1, grotuvas & p2 ) {
cout << endl ;
cout << \t BALAI: \t ;
jeigu ( prieš Kompiuterį )
cout << 'I žaidėjas:' << p1. getScore ( ) << \t Kompiuteris: ' << p2. getScore ( ) << endl ;
Kitas
cout << 'I žaidėjas:' << p1. getScore ( ) << \t II žaidėjas: ' << p2. getScore ( ) << endl ;
}

viešas :
Žaidimas ( ) : tuščiasCount { 0 } , gameOn { 1 } , prieš Kompiuterį { 0 } {
karštis ( ) ;
laimėjimų sąrašas [ 0 ] . eilė = naujas tarpt [ 3 ] { 0 , 1 , 2 } ;
laimėjimų sąrašas [ 1 ] . eilė = naujas tarpt [ 3 ] { 3 , 4 , 5 } ;
laimėjimų sąrašas [ 2 ] . eilė = naujas tarpt [ 3 ] { 6 , 7 , 8 } ;
laimėjimų sąrašas [ 3 ] . eilė = naujas tarpt [ 3 ] { 0 , 3 , 6 } ;
laimėjimų sąrašas [ 4 ] . eilė = naujas tarpt [ 3 ] { 1 , 4 , 7 } ;
laimėjimų sąrašas [ 5 ] . eilė = naujas tarpt [ 3 ] { 2 , 5 , 8 } ;
laimėjimų sąrašas [ 6 ] . eilė = naujas tarpt [ 3 ] { 0 , 4 , 8 } ;
laimėjimų sąrašas [ 7 ] . eilė = naujas tarpt [ 3 ] { 2 , 4 , 6 } ;
}

tuštuma karštis ( ) {
        gameOn = 1 ;

tuščiasCount = 0 ;
srand ( laikas ( 0 ) ) ;
dėl ( dydis_t i = 0 ; i < 10 ; i ++ ) {
tuščiasIndeksas [ i ] = 0 ;
lenta [ i ] = ( i + 1 ) + '0' ;
tuščiasCount ++ ;
}
tuščiasCount -- ;
}

tuštuma onePlayerGame ( ) {
//Kuriamas grotuvas
Žaidėjas p ( „I žaidėjas“ ) ;
Žaidėjas c ( 'Kompiuteris' ) ;
cout << '       -----------------------' << endl ;
cout << \t I žaidėjas: X \t Kompiuteris: O' << endl ;
cout << '       -----------------------' << endl ;
cout << endl ;
prieš Kompiuterį = 1 ;
žaisti ( c, p ) ;

}

tuštuma twoPlayerGame ( ) {
//Kuriamas grotuvas
Žaidėjas p ( „I žaidėjas“ ) ;
Žaidėjas c ( 'Žaidėjas II' ) ;
cout << '       -----------------------' << endl ;
cout << \t I žaidėjas: X \t II žaidėjas: O' << endl ;
cout << '       -----------------------' << endl ;
cout << endl ;
prieš Kompiuterį = 0 ;
žaisti ( c, p ) ;
}
} ;

tarpt pagrindinis ( )
{
tarpt sk ;

kol ( 1 ) {
cout << ' ----------MENIU----------' << endl ;
cout << \t 1. 1 žaidėjo žaidimas' << endl ;
cout << \t 2. 2 žaidėjų žaidimas' << endl ;
cout << \t 3. Norėdami išeiti ' << endl ;
cout << '      ----------' << endl ;
cout << endl ;
cout << \t Pasirinkite parinktį' <> sk ;
jungiklis ( sk ) {
atveju 1 : {
Žaidimas * žaidimas = naujas Žaidimas ;
žaidimas - > karštis ( ) ;
žaidimas - > onePlayerGame ( ) ;
}
pertrauka ;
atveju 2 : {
Žaidimas * žaidimas = naujas Žaidimas ;
žaidimas - > karštis ( ) ;
žaidimas - > twoPlayerGame ( ) ;
}
pertrauka ;
atveju 3 :
grąžinti 0 ;
numatytas :
cout << 'OOP, netinkama parinktis! BANDYKITE DAR kartą' ;
}

}
grąžinti 0 ;
}

Tai pilnas kodas, skirtas žaisti „tic-tac-toe“ žaidimą, kurį galima žaisti dviem režimais – su kompiuteriu arba su kolega. Tai universalus kodas, apimantis visas įmanomas komandas. Kai vartotojas įveda poziciją, kuri jau yra užpildyta, jis neperrašo šios pozicijos ir mano, kad šis judėjimas negalioja.

Iki šiol pirmasis žaidėjas pasirinko pirmąjį langelį, o paskui kitame žingsnyje kompiuteris pažymėjo šeštąjį langelį:

Abu žaidėjai iki šiol pasirinko du langelius, o kitame posūkyje žaidėjas Aš pasirenka septintą langelį, todėl sukuriamas nuoseklus vertikalus raštas:

Vartotojas pasirenka naudoti kompiuterį žaidimui žaisti, todėl atlikęs tris ėjimus, vartotojas laimėjo iš kompiuterio ir vienas balas pridedamas prie 1 žaidėjo rekordo. Pasibaigus pirmosioms rungtynėms, kompiliatorius prašo revanšo. Vartotojas nusprendžia iš parinkčių ir programa grįžta į pagrindinį skyrių. Pasirinkus trečią parinktį, kompiliatorius vykdo kodą.

Išvada

Teksto žaidimai pagrįsti teksto simboliais ir komandų eilutės sąsaja sąveikai su žaidėju. Juose nėra grafinių vaizdų, garsų ar animacijų. Vartotojas įveda komandą per konsolės langą. Patogus teksto žaidimas „tic-tac-toe“ sukurtas naudojant C++. Jis naudoja skirtingas komandas, kad sukurtų žaidimą, kurį galima žaisti su kompiuteriu ar kitu žaidėju.