Ako vytvoriť základnú textovú hru v C++

Ako Vytvorit Zakladnu Textovu Hru V C



Textové hry sa spoliehajú na textové znaky a rozhranie príkazového riadka na interakciu s prehrávačom. Neobsahujú grafické obrázky, zvuky ani animácie. Používateľ zadá príkaz cez okno konzoly.

Ako vytvoriť základnú textovú hru v C++

Textové hry v C++ umožňujú hráčovi zadávať príkazy cez okno konzoly a program spracováva pohyby hráča. Tu som vytvoril textovú hru tic-tac-toe, ktorá používateľovi umožňuje hrať dve možnosti. Používateľ sa môže hrať s kompilátorom C++ alebo s iným človekom. Táto hra má funkciu, ktorá neustále sčítava skóre pre víťazného hráča. Po oznámení výsledku prvého zápasu je k dispozícii možnosť odvety.

Pravidlá pre výhru v hre

Dvaja hráči hrajú hru piškvorky, pričom striedavo umiestňujú X a 0 do jedného z deviatich dostupných polí na mriežke tri krát tri. Hru vyhráva hráč, ktorý ako prvý získa tri zo svojich po sebe idúcich známok vo vertikálnom, horizontálnom alebo diagonálnom smere. Každý hráč musí múdro premýšľať a pozerať sa dopredu na ďalší ťah druhého hráča.







Kód na navrhovanie textovej hry piškvorky má rôzne sekcie rozdelené na základe funkčnosti. V prvej časti sa používateľ rozhodne, či sa bude hrať s počítačom alebo s kolegom. Po určení režimu zisku program požiada používateľa o vstup. Obaja hráči zadávajú vstup jeden po druhom.



//Získajte informácie od hráčov
neplatné PlayerInput ( Hráč & hráč ) {
int poz ;
cout << endl ;
cout << ' \t ' << hráč. getName ( ) << 'Otočte sa:' ;
cout << ' \t Zadajte pozíciu ' <> poz ;
poz - = 1 ;
ak ( emptyIndex [ poz ] == 1 ) {
cout << '-----Pozícia nie je prázdna-------' << endl ;
PlayerInput ( hráč ) ;
} inak {
emptyIndex [ poz ] = 1 ;
emptyCount - = 1 ;
hráč. getName ( ) . porovnať ( 'Hráč I' ) == 0 ? doska [ poz ] = 'X' : doska [ poz ] = 'O' ;
}

}

Po prijatí vstupov od používateľa skontroluje pravidlo výhry. Funkcia checkWin() má dva parametre p1 a p2 na kontrolu, či hráč vyhral alebo nie. Rôzne premenné sú deklarované vo funkcii i, j, a k sú celočíselné premenné deklarované pre cyklus a príznak je booleovská funkcia na kontrolu výhry. Cyklus začína od úplne prvej pozície a neustále sa opakuje pre všetkých deväť pozícií. Prvý_symbol je znak, ktorý môže byť 0 alebo X, ak je pravdivý, potom sú všetky možné kombinácie skontrolované pre víťazné pravidlo. V opačnom prípade sa iterátor presunie na ďalšiu pozíciu a to isté pokračuje, kým sa neskontrolujú všetky možné pozície. Ak je príznak nastavený na hodnotu true, potom je vyhlásený víťaz a program požiada o výber znova.



neplatné checkWin ( Hráč & p1, Hráč & p2 ) {
int i,j,k ;
bool vlajka = falošné ;
char prvý_symbol ;
pre ( i = 0 ; i < 8 ; i ++ ) {
prvý_symbol = doska [ winlist [ i ] . riadok [ 0 ] ] ;

ak ( ( prvý_symbol ! = 'X' ) && ( prvý_symbol ! = 'O' ) ) {
vlajka = falošné ;
ďalej ;
}
vlajka = pravda ;
pre ( j = 0 ; j < 3 ; j ++ ) {
ak ( prvý_symbol ! = doska [ winlist [ i ] . riadok [ j ] ] ) {
vlajka = falošné ;
prestávka ;
}
}
ak ( vlajka ) {
gameOn = 0 ;
ak ( prvý_symbol == 'X' ) {
cout << '------------------------' << endl ;
cout << ' \t Hráč, ktorý som vyhral' << endl ;
cout << '------------------------' << endl ;
p1. vyhral ( ) ;
} inak {
p2. vyhral ( ) ;
ak ( protiPočítaču ) {
cout << '------------------------' << endl ;
cout << ' \t Počítač vyhral' << endl ;
cout << '------------------------' << endl ;
} inak {
cout << '------------------------' << endl ;
cout << ' \t Vyhral hráč II' << endl ;
cout << '------------------------' << endl ;

}
}
displayScore ( p1,p2 ) ;
prestávka ;
}

Táto časť kódu zobrazuje skóre hry. Ak je hra proti počítaču, zobrazí sa skóre hráča 1 a počítača, v opačnom prípade sa zobrazí skóre hráča 1 a hráča 2.





neplatné displayScore ( Hráč & p1, hráč & p2 ) {
cout << endl ;
cout << ' \t SKÓRE: \t ' ;
ak ( protiPočítaču )
cout << 'Hráč I:' << p1. getScore ( ) << ' \t Počítač: ' << p2. getScore ( ) << endl ;
inak
cout << 'Hráč I:' << p1. getScore ( ) << ' \t Hráč II: ' << p2. getScore ( ) << endl ;
}

Toto je hlavný kód pre spustenie hry tic-tac-toe pre dvoch hráčov. Používateľ si môže vybrať z množstva procedúr, ktoré sa majú vykonať pomocou príkazu switch case. Tento kód poskytuje užívateľsky prívetivé rozhranie na hranie hry na kompilátore C++ a kód sa spúšťa, kým používateľ nevyberie možnosť ukončenia.

int Hlavná ( )
{
int ch ;

zatiaľ čo ( 1 ) {
cout << ' ----------PONUKA----------' << endl ;
cout << ' \t 1. hra pre 1 hráča' << endl ;
cout << ' \t 2. Hra pre 2 hráčov' << endl ;
cout << ' \t 3. Ak chcete ukončiť ' << endl ;
cout << '      ----------' << endl ;
cout << endl ;
cout << ' \t Vyberte možnosť' <> ch ;
prepínač ( ch ) {
prípad 1 : {
Hra * hra = Nový Hra ;
hra - > teplo ( ) ;
hra - > onePlayerGame ( ) ;
}
prestávka ;
prípad 2 : {
Hra * hra = Nový Hra ;
hra - > teplo ( ) ;
hra - > hra pre dvoch hráčov ( ) ;
}
prestávka ;
prípad 3 :
vrátiť 0 ;
predvolená :
cout << „Jej, neplatná možnosť! SKÚSTE ZNOVU“ ;
}

}
vrátiť 0 ;
}

Kompletný kód pre textovú hru Tic-Tac-Toc

Toto je kompletný kód pre návrh a realizáciu textovej hry tic-tac-toe.



#include
#include
#include
#include
#include
použitím menný priestor std ;

typdef štrukturovať {
int * riadok ;
} WinList ;


trieda Hráč {
súkromné :
názov reťazca ;
int skóre ;
verejnosti :
Hráč ( ) : Hráč { '' } { }
Hráč ( reťazec n ) : skóre { 0 } , názov { n } { }

neplatné vyhral ( ) {
//zvýšenie skóre
skóre ++ ;
}
int getScore ( ) { vrátiť toto - > skóre ; }

string getName ( ) { vrátiť toto - > názov ; }
} ;

trieda Hra {
súkromné :
char doska [ 9 ] ;
int emptyIndex [ 9 ] ;
int gameOn, againstComputer ;
int emptyCount ;
WinList winlist [ 8 ] ;

neplatné zobrazovacia doska ( ) {
cout << endl ;
cout << '   |   |   ' << endl ;
cout << '' << doska [ 0 ] << ' | ' << doska [ 1 ] << ' | ' << doska [ 2 ] << endl ;
cout << '   |   |   ' << endl ;
cout << '-----------' << endl ;
cout << '   |   |   ' << endl ;
cout << '' << doska [ 3 ] << ' | ' << doska [ 4 ] << ' | ' << doska [ 5 ] << endl ;
cout << '   |   |   ' << endl ;
cout << '-----------' << endl ;
cout << '   |   |   ' << endl ;
cout << '' << doska [ 6 ] << ' | ' << doska [ 7 ] << ' | ' << doska [ 8 ] << endl ;
cout << '   |   |   ' << endl ;
cout << endl ;
}

neplatné počítačový vstup ( ) {
int poz ;
poz = rand ( ) % 10 ;
ak ( emptyIndex [ poz ] == 1 ) {
ak ( emptyCount < 0 )
vrátiť ;
počítačový vstup ( ) ;
} inak {
cout << 'Výber počítača: ' << poz + 1 << endl ;
emptyIndex [ poz ] = 1 ;
emptyCount - = 1 ;
doska [ poz ] = 'O' ;
}

}

neplatné PlayerInput ( Hráč & hráč ) {
int poz ;
cout << endl ;
cout << ' \t ' << hráč. getName ( ) << 'Otočte sa:' ;
cout << ' \t Zadajte pozíciu ' <> poz ;
poz - = 1 ;
ak ( emptyIndex [ poz ] == 1 ) {
cout << '-----Pozícia nie je prázdna-------' << endl ;
PlayerInput ( hráč ) ;
} inak {
emptyIndex [ poz ] = 1 ;
emptyCount - = 1 ;
hráč. getName ( ) . porovnať ( 'Hráč I' ) == 0 ? doska [ poz ] = 'X' : doska [ poz ] = 'O' ;
}

}

neplatné checkWin ( Hráč & p1, Hráč & p2 ) {
int i,j,k ;
bool vlajka = falošný ;
char prvý_symbol ;
pre ( i = 0 ; i < 8 ; i ++ ) {
prvý_symbol = doska [ winlist [ i ] . riadok [ 0 ] ] ;

ak ( ( prvý_symbol ! = 'X' ) && ( prvý_symbol ! = 'O' ) ) {
vlajka = falošný ;
ďalej ;
}
vlajka = pravda ;
pre ( j = 0 ; j < 3 ; j ++ ) {
ak ( prvý_symbol ! = doska [ winlist [ i ] . riadok [ j ] ] ) {
vlajka = falošný ;
prestávka ;
}
}
ak ( vlajka ) {
gameOn = 0 ;
ak ( prvý_symbol == 'X' ) {
cout << '------------------------' << endl ;
cout << ' \t Hráč, ktorý som vyhral' << endl ;
cout << '------------------------' << endl ;
p1. vyhral ( ) ;
} inak {
p2. vyhral ( ) ;
ak ( protiPočítaču ) {
cout << '------------------------' << endl ;
cout << ' \t Počítač vyhral' << endl ;
cout << '------------------------' << endl ;
} inak {
cout << '------------------------' << endl ;
cout << ' \t Vyhral hráč II' << endl ;
cout << '------------------------' < 0 ) && ( gameOn ! = 0 ) ) {

ak ( protiPočítaču )
ruka == 1 ? počítačový vstup ( ) : PlayerInput ( p2 ) ;
inak
ruka == 1 ? PlayerInput ( p1 ) : PlayerInput ( p2 ) ;
ruka = ! ruka ;
zobrazovacia doska ( ) ;
checkWin ( p1,p2 ) ;
}
ak ( emptyCount <= 0 ) {
cout << '      -----------------------' << endl ;
cout << ' \t Žiadny VÍŤAZ' << endl ;
cout << '      -----------------------' << endl ;
}
cout << endl ;
cout <> odvetný zápas ;
ak ( ( odvetný zápas == „A“ ) || ( odvetný zápas == 'a' ) ) {
teplo ( ) ;
hrať ( p1,p2 ) ;
}

}
neplatné displayScore ( Hráč & p1, hráč & p2 ) {
cout << endl ;
cout << ' \t SKÓRE: \t ' ;
ak ( protiPočítaču )
cout << 'Hráč I:' << p1. getScore ( ) << ' \t Počítač: ' << p2. getScore ( ) << endl ;
inak
cout << 'Hráč I:' << p1. getScore ( ) << ' \t Hráč II: ' << p2. getScore ( ) << endl ;
}

verejnosti :
Hra ( ) : emptyCount { 0 } , gameOn { 1 } , protiPočítaču { 0 } {
teplo ( ) ;
winlist [ 0 ] . riadok = Nový int [ 3 ] { 0 , 1 , 2 } ;
winlist [ 1 ] . riadok = Nový int [ 3 ] { 3 , 4 , 5 } ;
winlist [ 2 ] . riadok = Nový int [ 3 ] { 6 , 7 , 8 } ;
winlist [ 3 ] . riadok = Nový int [ 3 ] { 0 , 3 , 6 } ;
winlist [ 4 ] . riadok = Nový int [ 3 ] { 1 , 4 , 7 } ;
winlist [ 5 ] . riadok = Nový int [ 3 ] { 2 , 5 , 8 } ;
winlist [ 6 ] . riadok = Nový int [ 3 ] { 0 , 4 , 8 } ;
winlist [ 7 ] . riadok = Nový int [ 3 ] { 2 , 4 , 6 } ;
}

neplatné teplo ( ) {
gameOn = 1 ;

emptyCount = 0 ;
srand ( čas ( 0 ) ) ;
pre ( size_t i = 0 ; i < 10 ; i ++ ) {
emptyIndex [ i ] = 0 ;
doska [ i ] = ( i + 1 ) + '0' ;
emptyCount ++ ;
}
emptyCount -- ;
}

neplatné onePlayerGame ( ) {
//Vytvorenie prehrávača
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ču = 1 ;
hrať ( c,p ) ;

}

neplatné hra pre dvoch hráčov ( ) {
//Vytvorenie prehrávača
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ču = 0 ;
hrať ( c,p ) ;
}
} ;

int Hlavná ( )
{
int ch ;

zatiaľ čo ( 1 ) {
cout << ' ----------PONUKA----------' << endl ;
cout << ' \t 1. hra pre 1 hráča' << endl ;
cout << ' \t 2. Hra pre 2 hráčov' << endl ;
cout << ' \t 3. Ak chcete ukončiť ' << endl ;
cout << '      ----------' << endl ;
cout << endl ;
cout << ' \t Vyberte možnosť' <> ch ;
prepínač ( ch ) {
prípad 1 : {
Hra * hra = Nový Hra ;
hra - > teplo ( ) ;
hra - > onePlayerGame ( ) ;
}
prestávka ;
prípad 2 : {
Hra * hra = Nový Hra ;
hra - > teplo ( ) ;
hra - > hra pre dvoch hráčov ( ) ;
}
prestávka ;
prípad 3 :
vrátiť 0 ;
predvolená :
cout << „Jej, neplatná možnosť! SKÚSTE ZNOVU“ ;
}

}
vrátiť 0 ;
}

Toto je kompletný kód na spustenie hry tic-tac-toe, ktorú je možné hrať v dvoch režimoch, buď s počítačom alebo s kolegom. Toto je všestranný kód vrátane všetkých možných príkazov. Keď používateľ zadá pozíciu, ktorá je už obsadená, túto pozíciu neprepíše a tento ťah považuje za neplatný.

Doteraz hráč vybral prvé políčko a potom v ďalšom kole počítač označil šieste políčko:

Obaja hráči si doteraz vybrali dve políčka a v nasledujúcom kole hráč I vyberie siedme políčko, čo vedie k vytvoreniu po sebe idúceho vertikálneho vzoru:

Používateľ si zvolí použitie počítača na hranie hry, takže po vykonaní troch ťahov používateľ vyhral z počítača a jedno skóre sa pripočíta k záznamu hráča 1. Po skončení prvého zápasu zostavovateľ požiada o odvetný zápas. Užívateľ sa rozhodne z možností a program sa vráti do hlavnej sekcie. Po výbere možnosti tri kompilátor existuje vykonávanie kódu.

Záver

Textové hry sa spoliehajú na textové znaky a rozhranie príkazového riadka na interakciu s prehrávačom. Neobsahujú grafické obrázky, zvuky ani animácie. Používateľ zadá príkaz cez okno konzoly. Užívateľsky prívetivá textová hra tic-tac-toe je vytvorená pomocou C++. Používa rôzne príkazy na vytvorenie hry, ktorú možno hrať s počítačom alebo iným hráčom.