Jak vytvořit základní textovou hru v C++

Jak Vytvorit Zakladni Textovou Hru V C



Textové hry se spoléhají na textové znaky a rozhraní příkazového řádku pro interakci s hráčem. Neobsahují grafické obrázky, zvuky ani animace. Uživatel zadá příkaz přes okno konzoly.

Jak vytvořit základní textovou hru v C++

Textové hry v C++ umožňují hráči zadávat příkazy přes okno konzoly a program zpracovává pohyby hráče. Zde jsem vytvořil textovou tic-tac-toe hru, která uživateli umožňuje hrát dvě možnosti. Uživatel si může hrát buď s kompilátorem C++, nebo s kolegou. Tato hra má funkci, která neustále sčítá skóre pro vítězného hráče. Po oznámení výsledku první hry je k dispozici možnost odvety.

Pravidla pro vítězství ve hře

Dva hráči hrají piškvorky, přičemž střídavě umístí X a 0 do jednoho z devíti dostupných polí na mřížce tři krát tři. Hru vyhrává hráč, který jako první získá tři své po sobě jdoucí známky ve vertikálním, horizontálním nebo diagonálním směru. Každý hráč musí chytře přemýšlet a dívat se dopředu na další tah druhého hráče.







Kód pro návrh textové tic-tac-toe hry má různé sekce, rozdělené na základě funkčnosti. V první části se uživatel rozhodne, zda bude hrát s počítačem nebo s kolegou. Po určení režimu zesílení program požádá uživatele o zadání. Oba hráči vstupují jeden po druhém.



//Převzít vstup od hráčů
prázdnota playerInput ( Hráč & hráč ) {
int poz ;
cout << endl ;
cout << ' \t ' << hráč. getName ( ) << ' Otočit se: ' ;
cout << ' \t Zadejte pozici' <> poz ;
poz - = 1 ;
-li ( prázdnýIndex [ poz ] == 1 ) {
cout << '-----Pozice není prázdná-------' << endl ;
playerInput ( hráč ) ;
} jiný {
prázdnýIndex [ poz ] = 1 ;
emptyCount - = 1 ;
hráč. getName ( ) . porovnat ( 'Hráč I' ) == 0 ? deska [ poz ] = 'X' : deska [ poz ] = 'Ó' ;
}

}

Po převzetí vstupů od uživatele zkontroluje pravidlo výhry. Funkce checkWin() má dva parametry p1 a p2 pro kontrolu, zda hráč vyhrál nebo ne. Různé proměnné jsou deklarovány ve funkci i, ja k jsou celočíselné proměnné deklarované pro smyčku a příznak je logická funkce pro kontrolu win podmínky. Smyčka začíná od úplně první pozice a neustále se opakuje pro všech devět pozic. První_symbol je znak, který může být 0 nebo X, pokud je pravdivý, pak jsou všechny možné kombinace kontrolovány pro vítězné pravidlo. V opačném případě se iterátor přesune na další pozici a to samé pokračuje, dokud nejsou zaškrtnuty všechny možné pozice. Pokud je příznak nastaven na hodnotu true, je vyhlášen vítěz a program požádá o provedení volby znovu.



prázdnota checkWin ( Hráč & p1, Hráč & p2 ) {
int i,j,k ;
bool vlajka = Nepravdivé ;
char první_symbol ;
pro ( i = 0 ; i < 8 ; i ++ ) {
první_symbol = deska [ výherní seznam [ i ] . řádek [ 0 ] ] ;

-li ( ( první_symbol ! = 'X' ) && ( první_symbol ! = 'Ó' ) ) {
vlajka = Nepravdivé ;
pokračovat ;
}
vlajka = skutečný ;
pro ( j = 0 ; j < 3 ; j ++ ) {
-li ( první_symbol ! = deska [ výherní seznam [ i ] . řádek [ j ] ] ) {
vlajka = Nepravdivé ;
přestávka ;
}
}
-li ( vlajka ) {
gameOn = 0 ;
-li ( první_symbol == 'X' ) {
cout << '------------------------' << endl ;
cout << ' \t Hráč, kterého jsem vyhrál' << endl ;
cout << '------------------------' << endl ;
p1. vyhrál ( ) ;
} jiný {
p2. vyhrál ( ) ;
-li ( protipočítači ) {
cout << '-------------------------' << endl ;
cout << ' \t Počítač vyhrál' << endl ;
cout << '-------------------------' << endl ;
} jiný {
cout << '-------------------------' << endl ;
cout << ' \t Vyhrál hráč II' << endl ;
cout << '-------------------------' << endl ;

}
}
displayScore ( p1,p2 ) ;
přestávka ;
}

Tato část kódu ukazuje skóre hry. Pokud je hra proti počítači, zobrazí se skóre hráče 1 a počítače, jinak se zobrazí skóre hráče 1 a hráče 2.





prázdnota displayScore ( Hráč & p1, hráč & p2 ) {
cout << endl ;
cout << ' \t SKÓRE: \t ' ;
-li ( protipočítači )
cout << 'Hráč I:' << p1. getScore ( ) << ' \t Počítač: ' << p2. getScore ( ) << endl ;
jiný
cout << 'Hráč I:' << p1. getScore ( ) << ' \t Hráč II: ' << p2. getScore ( ) << endl ;
}

Toto je hlavní kód pro provedení hry tic-tac-toe pro dva hráče. Uživatel si může vybrat z celé řady procedur, které se mají provést pomocí příkazu switch case. Tento kód poskytuje uživatelsky přívětivé rozhraní pro hraní hry na kompilátoru C++ a kód se spouští, dokud uživatel nezvolí možnost ukončení.

int hlavní ( )
{
int ch ;

zatímco ( 1 ) {
cout << ' ----------JÍDELNÍ LÍSTEK----------' << endl ;
cout << ' \t 1. hra pro 1 hráče' << endl ;
cout << ' \t 2. Hra pro 2 hráče' << endl ;
cout << ' \t 3. Chcete-li ukončit ' << endl ;
cout << '      ----------' << endl ;
cout << endl ;
cout << ' \t Vyberte možnost' <> ch ;
přepínač ( ch ) {
pouzdro 1 : {
Hra * hra = Nový Hra ;
hra - > teplo ( ) ;
hra - > OnePlayerGame ( ) ;
}
přestávka ;
pouzdro 2 : {
Hra * hra = Nový Hra ;
hra - > teplo ( ) ;
hra - > hra pro dva hráče ( ) ;
}
přestávka ;
pouzdro 3 :
vrátit se 0 ;
výchozí :
cout << „Jejda, neplatná možnost! ZKUSTE ZNOVU“ ;
}

}
vrátit se 0 ;
}

Kompletní kód pro textovou hru Tic-Tac-Toc

Toto je kompletní kód pro návrh a provedení textové hry tic-tac-toe.



#include
#include
#include
#include<řetězec>
#include
použitím jmenný prostor std ;

typdef strukturovat {
int * řádek ;
} WinList ;


třída Hráč {
soukromé :
název řetězce ;
int skóre ;
veřejnost :
Hráč ( ) : Hráč { '' } { }
Hráč ( řetězec n ) : skóre { 0 } , název { n } { }

prázdnota vyhrál ( ) {
//zvýšit skóre
skóre ++ ;
}
int getScore ( ) { vrátit se tento - > skóre ; }

řetězec getName ( ) { vrátit se tento - > název ; }
} ;

třída Hra {
soukromé :
char deska [ 9 ] ;
int prázdnýIndex [ 9 ] ;
int gameOn, againstComputer ;
int emptyCount ;
WinList winlist [ 8 ] ;

prázdnota zobrazovací jednotka ( ) {
cout << endl ;
cout << '   |   |   ' << endl ;
cout << '' << deska [ 0 ] << ' | ' << deska [ 1 ] << ' | ' << deska [ 2 ] << endl ;
cout << '   |   |   ' << endl ;
cout << '-----------' << endl ;
cout << '   |   |   ' << endl ;
cout << '' << deska [ 3 ] << ' | ' << deska [ 4 ] << ' | ' << deska [ 5 ] << endl ;
cout << '   |   |   ' << endl ;
cout << '-----------' << endl ;
cout << '   |   |   ' << endl ;
cout << '' << deska [ 6 ] << ' | ' << deska [ 7 ] << ' | ' << deska [ 8 ] << endl ;
cout << '   |   |   ' << endl ;
cout << endl ;
}

prázdnota vstup počítače ( ) {
int poz ;
poz = rand ( ) % 10 ;
-li ( prázdnýIndex [ poz ] == 1 ) {
-li ( emptyCount < 0 )
vrátit se ;
vstup počítače ( ) ;
} jiný {
cout << 'Výběr počítače:' << poz + 1 << endl ;
prázdnýIndex [ poz ] = 1 ;
emptyCount - = 1 ;
deska [ poz ] = 'Ó' ;
}

}

prázdnota playerInput ( Hráč & hráč ) {
int poz ;
cout << endl ;
cout << ' \t ' << hráč. getName ( ) << ' Otočit se: ' ;
cout << ' \t Zadejte pozici' <> poz ;
poz - = 1 ;
-li ( prázdnýIndex [ poz ] == 1 ) {
cout << '-----Pozice není prázdná-------' << endl ;
playerInput ( hráč ) ;
} jiný {
prázdnýIndex [ poz ] = 1 ;
emptyCount - = 1 ;
hráč. getName ( ) . porovnat ( 'Hráč I' ) == 0 ? deska [ poz ] = 'X' : deska [ poz ] = 'Ó' ;
}

}

prázdnota checkWin ( Hráč & p1, Hráč & p2 ) {
int i,j,k ;
bool vlajka = Nepravdivé ;
char první_symbol ;
pro ( i = 0 ; i < 8 ; i ++ ) {
první_symbol = deska [ výherní seznam [ i ] . řádek [ 0 ] ] ;

-li ( ( první_symbol ! = 'X' ) && ( první_symbol ! = 'Ó' ) ) {
vlajka = Nepravdivé ;
pokračovat ;
}
vlajka = skutečný ;
pro ( j = 0 ; j < 3 ; j ++ ) {
-li ( první_symbol ! = deska [ výherní seznam [ i ] . řádek [ j ] ] ) {
vlajka = Nepravdivé ;
přestávka ;
}
}
-li ( vlajka ) {
gameOn = 0 ;
-li ( první_symbol == 'X' ) {
cout << '------------------------' << endl ;
cout << ' \t Hráč, kterého jsem vyhrál' << endl ;
cout << '------------------------' << endl ;
p1. vyhrál ( ) ;
} jiný {
p2. vyhrál ( ) ;
-li ( protipočítači ) {
cout << '------------------------' << endl ;
cout << ' \t Počítač vyhrál' << endl ;
cout << '------------------------' << endl ;
} jiný {
cout << '------------------------' << endl ;
cout << ' \t Vyhrál hráč II' << endl ;
cout << '------------------------' < 0 ) && ( gameOn ! = 0 ) ) {

-li ( protipočítači )
ruka == 1 ? vstup počítače ( ) : playerInput ( p2 ) ;
jiný
ruka == 1 ? playerInput ( p1 ) : playerInput ( p2 ) ;
ruka = ! ruka ;
zobrazovací jednotka ( ) ;
checkWin ( p1,p2 ) ;
}
-li ( emptyCount <= 0 ) {
cout << '      -----------------------' << endl ;
cout << ' \t Žádný VÍTĚZ' << endl ;
cout << '      -----------------------' << endl ;
}
cout << endl ;
cout <> odveta ;
-li ( ( odveta == 'A' ) || ( odveta == 'a' ) ) {
teplo ( ) ;
hrát si ( p1,p2 ) ;
}

}
prázdnota displayScore ( Hráč & p1, hráč & p2 ) {
cout << endl ;
cout << ' \t SKÓRE: \t ' ;
-li ( protipočítači )
cout << 'Hráč I:' << p1. getScore ( ) << ' \t Počítač: ' << p2. getScore ( ) << endl ;
jiný
cout << 'Hráč I:' << p1. getScore ( ) << ' \t Hráč II: ' << p2. getScore ( ) << endl ;
}

veřejnost :
Hra ( ) : emptyCount { 0 } , gameOn { 1 } , protipočítači { 0 } {
teplo ( ) ;
výherní seznam [ 0 ] . řádek = Nový int [ 3 ] { 0 , 1 , 2 } ;
výherní seznam [ 1 ] . řádek = Nový int [ 3 ] { 3 , 4 , 5 } ;
výherní seznam [ 2 ] . řádek = Nový int [ 3 ] { 6 , 7 , 8 } ;
výherní seznam [ 3 ] . řádek = Nový int [ 3 ] { 0 , 3 , 6 } ;
výherní seznam [ 4 ] . řádek = Nový int [ 3 ] { 1 , 4 , 7 } ;
výherní seznam [ 5 ] . řádek = Nový int [ 3 ] { 2 , 5 , 8 } ;
výherní seznam [ 6 ] . řádek = Nový int [ 3 ] { 0 , 4 , 8 } ;
výherní seznam [ 7 ] . řádek = Nový int [ 3 ] { 2 , 4 , 6 } ;
}

prázdnota teplo ( ) {
gameOn = 1 ;

emptyCount = 0 ;
srand ( čas ( 0 ) ) ;
pro ( velikost_t i = 0 ; i < 10 ; i ++ ) {
prázdnýIndex [ i ] = 0 ;
deska [ i ] = ( i + 1 ) + '0' ;
emptyCount ++ ;
}
emptyCount -- ;
}

prázdnota OnePlayerGame ( ) {
//Vytváření přehrávače
Hráč p ( 'Hráč I' ) ;
Hráč c ( 'Počítač' ) ;
cout << '       -----------------------' << endl ;
cout << ' \t Hráč I: X \t Počítač: O' << endl ;
cout << '       -----------------------' << endl ;
cout << endl ;
protipočítači = 1 ;
hrát si ( c,p ) ;

}

prázdnota hra pro dva hráče ( ) {
//Vytváření přehrávače
Hráč p ( 'Hráč I' ) ;
Hráč c ( 'Hráč II' ) ;
cout << '       -----------------------' << endl ;
cout << ' \t Hráč I: X \t Hráč II: O' << endl ;
cout << '       -----------------------' << endl ;
cout << endl ;
protipočítači = 0 ;
hrát si ( c,p ) ;
}
} ;

int hlavní ( )
{
int ch ;

zatímco ( 1 ) {
cout << ' ----------JÍDELNÍ LÍSTEK----------' << endl ;
cout << ' \t 1. hra pro 1 hráče' << endl ;
cout << ' \t 2. Hra pro 2 hráče' << endl ;
cout << ' \t 3. Chcete-li ukončit ' << endl ;
cout << '      ----------' << endl ;
cout << endl ;
cout << ' \t Vyberte možnost' <> ch ;
přepínač ( ch ) {
pouzdro 1 : {
Hra * hra = Nový Hra ;
hra - > teplo ( ) ;
hra - > OnePlayerGame ( ) ;
}
přestávka ;
pouzdro 2 : {
Hra * hra = Nový Hra ;
hra - > teplo ( ) ;
hra - > hra pro dva hráče ( ) ;
}
přestávka ;
pouzdro 3 :
vrátit se 0 ;
výchozí :
cout << „Jejda, neplatná možnost! ZKUSTE ZNOVU“ ;
}

}
vrátit se 0 ;
}

Toto je kompletní kód pro provedení hry tic-tac-toe, kterou lze hrát ve dvou režimech, buď s počítačem, nebo s kolegou. Toto je univerzální kód, včetně všech možných příkazů. Když uživatel zadá pozici, která je již obsazena, nepřepíše tuto pozici a považuje tento pohyb za neplatný.

Dosud hráč vybral první políčko a v dalším tahu počítač označil políčko šesté:

Oba hráči dosud vybrali dvě políčka a v dalším tahu hráč I vybere sedmé políčko, což vede k vytvoření po sobě jdoucího vertikálního vzoru:

Uživatel se rozhodne pro hraní hry použít počítač, takže po provedení tří tahů uživatel vyhrál z počítače a jedno skóre se přičte k záznamu hráče 1. Po skončení prvního zápasu kompilátor požádá o odvetný zápas. Uživatel se rozhodne z možností a program se vrátí do hlavní sekce. Po výběru možnosti tři existuje kompilátor provádění kódu.

Závěr

Textové hry se spoléhají na textové znaky a rozhraní příkazového řádku pro interakci s hráčem. Neobsahují grafické obrázky, zvuky ani animace. Uživatel zadá příkaz přes okno konzoly. Uživatelsky přívětivá textová hra tic-tac-toe je vytvořena pomocí C++. Používá různé příkazy k vytvoření hry, kterou lze hrát buď s počítačem nebo s jiným hráčem.