Hogyan készítsünk egyszerű szöveges játékot C++ nyelven

Hogyan Keszitsunk Egyszeru Szoveges Jatekot C Nyelven



A szöveges játékok szöveges karakterekre és parancssori felületre támaszkodnak a játékossal való interakcióhoz. Nem tartalmaznak grafikus képeket, hangokat vagy animációkat. A felhasználó a parancsot a konzolablakon keresztül adja meg.

Hogyan készítsünk egyszerű szöveges játékot C++ nyelven

A szöveges alapú játékok C++ nyelven lehetővé teszik a játékos számára, hogy parancsokat vigyen be egy konzolablakon keresztül, a program pedig feldolgozza a játékos mozdulatait. Itt létrehoztam egy szöveges tic-tac-toe játékot, amely két játéklehetőséget tesz lehetővé a felhasználó számára. A felhasználó játszhat a C++ fordítóval vagy egy embertársával. Ez a játék rendelkezik egy olyan funkcióval, amely folyamatosan összeadja a nyertes játékos pontszámát. Az első játszma eredményének bejelentése után elérhető a visszavágó lehetőség.

A játék megnyerésének szabályai

Két játékos tic-tac-toe játékot játszik, és felváltva X-et és 0-t tesz a kilenc szabad mező egyikére egy háromszor-három hálón. A játékot az nyeri meg, aki először szerez három egymást követő jegyét függőleges, vízszintes vagy átlós irányban. Minden játékosnak okosan kell gondolkodnia, és előre kell tekintenie a másik játékos következő lépésére.







A szöveges tic-tac-toe játék tervezésének kódja különböző részekből áll, amelyek funkcionalitás alapján vannak felosztva. Az első részben a felhasználó dönti el, hogy számítógéppel vagy embertársával játsszon. Az erősítési mód eldöntése után a program bevitelt kér a felhasználótól. Mindkét játékos egymás után adja meg a bemenetet.



//A játékosok véleményének átvétele
üres playerInput ( Játékos & játékos ) {
int pozíció ;
cout << endl ;
cout << ' \t ' << játékos. getName ( ) << 'Fordulás:' ;
cout << ' \t Írja be a pozíciót' <> pozíció ;
pozíció - = 1 ;
ha ( üresIndex [ pozíció ] == 1 ) {
cout << '-----A pozíció nem üres -------' << endl ;
playerInput ( játékos ) ;
} más {
üresIndex [ pozíció ] = 1 ;
üresGróf - = 1 ;
játékos. getName ( ) . összehasonlítani ( 'I játékos' ) == 0 ? tábla [ pozíció ] = 'X' : tábla [ pozíció ] = 'O' ;
}

}

Miután megkapta a bemeneteket a felhasználótól, ellenőrzi a nyerési szabályt. A checkWin() függvénynek két p1 és p2 paramétere van annak ellenőrzésére, hogy a játékos nyert-e vagy sem. Különböző változók vannak deklarálva az i, j és k függvényben a ciklushoz deklarált egész változók, a flag pedig egy logikai függvény a win feltétel ellenőrzésére. A ciklus a legelső pozícióból indul, és mind a kilenc pozícióban ismétlődik. A first_symbol egy karakter, amely lehet 0 vagy X, ha igaz, akkor minden lehetséges kombinációt ellenőriz a nyerő szabály. Ellenkező esetben az iterátor a következő pozícióba lép, és ez így megy tovább, amíg az összes lehetséges pozíciót nem ellenőrizzük. Ha a zászló igaznak van beállítva, akkor győztest hirdetnek, és a program ismételten kéri a választást.



üres checkWin ( Játékos & p1, Játékos & p2 ) {
int én,j,k ;
bool zászló = hamis ;
char első_szimbólum ;
számára ( én = 0 ; én < 8 ; én ++ ) {
első_szimbólum = tábla [ nyerőlista [ én ] . sor [ 0 ] ] ;

ha ( ( első_szimbólum ! = 'X' ) && ( első_szimbólum ! = 'O' ) ) {
zászló = hamis ;
folytatni ;
}
zászló = igaz ;
számára ( j = 0 ; j < 3 ; j ++ ) {
ha ( első_szimbólum ! = tábla [ nyerőlista [ én ] . sor [ j ] ] ) {
zászló = hamis ;
szünet ;
}
}
ha ( zászló ) {
kezdődjön a játék = 0 ;
ha ( első_szimbólum == 'X' ) {
cout << '------------------------' << endl ;
cout << ' \t Játékos, akit megnyertem' << endl ;
cout << '------------------------' << endl ;
p1. nyerte ( ) ;
} más {
p2. nyerte ( ) ;
ha ( Számítógép ellen ) {
cout << '------------------------' << endl ;
cout << ' \t Számítógép NYERT' << endl ;
cout << '------------------------' << endl ;
} más {
cout << '------------------------' << endl ;
cout << ' \t A II. játékos NYERT' << endl ;
cout << '------------------------' << endl ;

}
}
displayScore ( p1, p2 ) ;
szünet ;
}

A kód ezen része a játék pontszámát mutatja. Ha számítógép ellen folyik a játék, akkor az 1. játékos és a számítógép pontszáma jelenik meg, ellenkező esetben pedig az 1. és a 2. játékos pontszáma.





üres displayScore ( Játékos & p1, Játékos & p2 ) {
cout << endl ;
cout << ' \t PONTSZÁM: \t ' ;
ha ( Számítógép ellen )
cout << 'I. játékos:' << p1. getScore ( ) << ' \t Számítógép: ' << p2. getScore ( ) << endl ;
más
cout << 'I. játékos:' << p1. getScore ( ) << ' \t II. játékos: ' << p2. getScore ( ) << endl ;
}

Ez a fő kód a két játékos tic-tac-toe játékának végrehajtásához. A felhasználó többféle eljárás közül választhat a switch case utasítás segítségével. Ez a kód felhasználóbarát felületet biztosít a játékhoz egy C++ fordítón, és a kód addig fut, amíg a felhasználó ki nem választja a kilépési lehetőséget.

int fő- ( )
{
int ch ;

míg ( 1 ) {
cout << '      ----------MENÜ----------' << endl ;
cout << ' \t 1. 1 játékos játék' << endl ;
cout << ' \t 2. 2 játékos játék' << endl ;
cout << ' \t 3. Kilépéshez ' << endl ;
cout << '      ----------' << endl ;
cout << endl ;
cout << ' \t Válassz egy lehetőséget' <> ch ;
kapcsoló ( ch ) {
ügy 1 : {
Játszma, meccs * játszma, meccs = új Játszma, meccs ;
játszma, meccs - > hőség ( ) ;
játszma, meccs - > onePlayerGame ( ) ;
}
szünet ;
ügy 2 : {
Játszma, meccs * játszma, meccs = új Játszma, meccs ;
játszma, meccs - > hőség ( ) ;
játszma, meccs - > twoPlayerGame ( ) ;
}
szünet ;
ügy 3 :
Visszatérés 0 ;
alapértelmezett :
cout << 'OOP, érvénytelen opció! PRÓBÁLJA ÚJRA' ;
}

}
Visszatérés 0 ;
}

Teljes kód egy szöveg alapú Tic-Tac-Toc játékhoz

Ez egy teljes kód egy szöveges tic-tac-toe játék tervezéséhez és végrehajtásához.



#include
#include
#include
#include
#include
segítségével névtér std ;

typedef struct {
int * sor ;
} WinList ;


osztály Játékos {
magán :
karakterlánc neve ;
int pontszám ;
nyilvános :
Játékos ( ) : Játékos { '' } { }
Játékos ( string n ) : pontszám { 0 } , név { n } { }

üres nyerte ( ) {
//növeli a pontszámot
pontszám ++ ;
}
int getScore ( ) { Visszatérés ez - > pontszám ; }

karakterlánc getName ( ) { Visszatérés ez - > név ; }
} ;

osztály Játszma, meccs {
magán :
char tábla [ 9 ] ;
int üresIndex [ 9 ] ;
int gameOn, Computer ellen ;
int üresGróf ;
WinList nyerőlista [ 8 ] ;

üres kijelző ( ) {
cout << endl ;
cout << '   |   |   ' << endl ;
cout << ' ' << tábla [ 0 ] << ' | ' << tábla [ 1 ] << ' | ' << tábla [ 2 ] << endl ;
cout << '   |   |   ' << endl ;
cout << '-----------' << endl ;
cout << '   |   |   ' << endl ;
cout << ' ' << tábla [ 3 ] << ' | ' << tábla [ 4 ] << ' | ' << tábla [ 5 ] << endl ;
cout << '   |   |   ' << endl ;
cout << '-----------' << endl ;
cout << '   |   |   ' << endl ;
cout << ' ' << tábla [ 6 ] << ' | ' << tábla [ 7 ] << ' | ' << tábla [ 8 ] << endl ;
cout << '   |   |   ' << endl ;
cout << endl ;
}

üres számítógépbemenet ( ) {
int pozíció ;
pozíció = rand ( ) % 10 ;
ha ( üresIndex [ pozíció ] == 1 ) {
ha ( üresGróf < 0 )
Visszatérés ;
számítógépbemenet ( ) ;
} más {
cout << 'Számítógép kiválasztása:' << pozíció + 1 << endl ;
üresIndex [ pozíció ] = 1 ;
üresGróf - = 1 ;
tábla [ pozíció ] = 'O' ;
}

}

üres playerInput ( Játékos & játékos ) {
int pozíció ;
cout << endl ;
cout << ' \t ' << játékos. getName ( ) << 'Fordulás:' ;
cout << ' \t Írja be a pozíciót' <> pozíció ;
pozíció - = 1 ;
ha ( üresIndex [ pozíció ] == 1 ) {
cout << '-----A pozíció nem üres-------' << endl ;
playerInput ( játékos ) ;
} más {
üresIndex [ pozíció ] = 1 ;
üresGróf - = 1 ;
játékos. getName ( ) . összehasonlítani ( 'I játékos' ) == 0 ? tábla [ pozíció ] = 'X' : tábla [ pozíció ] = 'O' ;
}

}

üres checkWin ( Játékos & p1, Játékos & p2 ) {
int én,j,k ;
bool zászló = hamis ;
char első_szimbólum ;
számára ( én = 0 ; én < 8 ; én ++ ) {
első_szimbólum = tábla [ nyerőlista [ én ] . sor [ 0 ] ] ;

ha ( ( első_szimbólum ! = 'X' ) && ( első_szimbólum ! = 'O' ) ) {
zászló = hamis ;
folytatni ;
}
zászló = igaz ;
számára ( j = 0 ; j < 3 ; j ++ ) {
ha ( első_szimbólum ! = tábla [ nyerőlista [ én ] . sor [ j ] ] ) {
zászló = hamis ;
szünet ;
}
}
ha ( zászló ) {
kezdődjön a játék = 0 ;
ha ( első_szimbólum == 'X' ) {
cout << '------------------------' << endl ;
cout << ' \t Játékos, akit megnyertem' << endl ;
cout << '------------------------' << endl ;
p1. nyerte ( ) ;
} más {
p2. nyerte ( ) ;
ha ( Számítógép ellen ) {
cout << '------------------------' << endl ;
cout << ' \t Számítógép NYERT' << endl ;
cout << '------------------------' << endl ;
} más {
cout << '------------------------' << endl ;
cout << ' \t A II. játékos NYERT' << endl ;
cout << '------------------------' < 0 ) && ( kezdődjön a játék ! = 0 ) ) {

ha ( Számítógép ellen )
kéz == 1 ? számítógépbemenet ( ) : playerInput ( p2 ) ;
más
kéz == 1 ? playerInput ( p1 ) : playerInput ( p2 ) ;
kéz = ! kéz ;
kijelző ( ) ;
checkWin ( p1, p2 ) ;
}
ha ( üresGróf <= 0 ) {
cout << '      -----------------------' << endl ;
cout << ' \t NINCS GYŐZTES' << endl ;
cout << '      -----------------------' << endl ;
}
cout << endl ;
cout <> visszavágó ;
ha ( ( visszavágó == 'ÉS' ) || ( visszavágó == 'és' ) ) {
hőség ( ) ;
játék ( p1, p2 ) ;
}

}
üres displayScore ( Játékos & p1, Játékos & p2 ) {
cout << endl ;
cout << ' \t PONTSZÁM: \t ' ;
ha ( Számítógép ellen )
cout << 'I. játékos:' << p1. getScore ( ) << ' \t Számítógép: ' << p2. getScore ( ) << endl ;
más
cout << 'I. játékos:' << p1. getScore ( ) << ' \t II. játékos: ' << p2. getScore ( ) << endl ;
}

nyilvános :
Játszma, meccs ( ) : üresGróf { 0 } , kezdődjön a játék { 1 } , Számítógép ellen { 0 } {
hőség ( ) ;
nyerőlista [ 0 ] . sor = új int [ 3 ] { 0 , 1 , 2 } ;
nyerőlista [ 1 ] . sor = új int [ 3 ] { 3 , 4 , 5 } ;
nyerőlista [ 2 ] . sor = új int [ 3 ] { 6 , 7 , 8 } ;
nyerőlista [ 3 ] . sor = új int [ 3 ] { 0 , 3 , 6 } ;
nyerőlista [ 4 ] . sor = új int [ 3 ] { 1 , 4 , 7 } ;
nyerőlista [ 5 ] . sor = új int [ 3 ] { 2 , 5 , 8 } ;
nyerőlista [ 6 ] . sor = új int [ 3 ] { 0 , 4 , 8 } ;
nyerőlista [ 7 ] . sor = új int [ 3 ] { 2 , 4 , 6 } ;
}

üres hőség ( ) {
kezdődjön a játék = 1 ;

üresGróf = 0 ;
srand ( idő ( 0 ) ) ;
számára ( size_t én = 0 ; én < 10 ; én ++ ) {
üresIndex [ én ] = 0 ;
tábla [ én ] = ( én + 1 ) + '0' ;
üresGróf ++ ;
}
üresGróf -- ;
}

üres onePlayerGame ( ) {
//Lejátszó létrehozása
Játékos p ( 'I játékos' ) ;
Játékos c ( 'Számítógép' ) ;
cout << '       -----------------------' << endl ;
cout << ' \t I. játékos: X \t Számítógép: O' << endl ;
cout << '       -----------------------' << endl ;
cout << endl ;
Számítógép ellen = 1 ;
játék ( c, o ) ;

}

üres twoPlayerGame ( ) {
//Lejátszó létrehozása
Játékos p ( 'I játékos' ) ;
Játékos c ( 'Játékos II' ) ;
cout << '       -----------------------' << endl ;
cout << ' \t I. játékos: X \t II. játékos: O' << endl ;
cout << '       -----------------------' << endl ;
cout << endl ;
Számítógép ellen = 0 ;
játék ( c, o ) ;
}
} ;

int fő- ( )
{
int ch ;

míg ( 1 ) {
cout << '      ----------MENÜ----------' << endl ;
cout << ' \t 1. 1 játékos játék' << endl ;
cout << ' \t 2. 2 játékos játék' << endl ;
cout << ' \t 3. Kilépéshez ' << endl ;
cout << '      ----------' << endl ;
cout << endl ;
cout << ' \t Válassz egy lehetőséget' <> ch ;
kapcsoló ( ch ) {
ügy 1 : {
Játszma, meccs * játszma, meccs = új Játszma, meccs ;
játszma, meccs - > hőség ( ) ;
játszma, meccs - > onePlayerGame ( ) ;
}
szünet ;
ügy 2 : {
Játszma, meccs * játszma, meccs = új Játszma, meccs ;
játszma, meccs - > hőség ( ) ;
játszma, meccs - > twoPlayerGame ( ) ;
}
szünet ;
ügy 3 :
Visszatérés 0 ;
alapértelmezett :
cout << 'OOP, érvénytelen opció! PRÓBÁLJA ÚJRA' ;
}

}
Visszatérés 0 ;
}

Ez egy komplett kód a tic-tac-toe játék végrehajtásához, amelyet kétféle módban játszhatunk, akár számítógéppel, akár embertársunkkal. Ez egy sokoldalú kód, amely tartalmazza az összes lehetséges parancsot. Amikor a felhasználó egy már betöltött pozíciót ad meg, nem írja felül ezt a pozíciót, és érvénytelennek tekinti ezt a lépést.

Eddig az első játékos az első mezőt választotta, majd a következő körben a számítógép a hatodik mezőt jelölte:

Eddig mindkét játékos kiválasztotta a két mezőt, a következő körben pedig az általam választott hetedik mezőt választja, ami egy egymást követő függőleges mintát eredményez:

A felhasználó úgy dönt, hogy a számítógépet használja a játékhoz, így három lépés után a felhasználó nyert a számítógéptől, és egy pontszámot hozzáadnak az 1. játékos rekordjához. Az első mérkőzés után a fordító kéri a visszavágót. A felhasználó dönt a lehetőségek közül, és a program visszatér a fő részhez. A 3. opció kiválasztása után a fordító rendelkezik a kód végrehajtásával.

Következtetés

A szöveges játékok szöveges karakterekre és parancssori felületre támaszkodnak a játékossal való interakcióhoz. Nem tartalmaznak grafikus képeket, hangokat vagy animációkat. A felhasználó a parancsot a konzolablakon keresztül adja meg. A felhasználóbarát szöveges tic-tac-toe játék C++ használatával készült. Különböző parancsokat használ, hogy olyan játékot hozzon létre, amelyet akár számítógéppel, akár más játékossal játszhatunk.