Paano Gumawa ng Basic na Text-based na Laro sa C++

Paano Gumawa Ng Basic Na Text Based Na Laro Sa C



Ang mga larong nakabatay sa teksto ay umaasa sa mga text character at isang command line interface para sa pakikipag-ugnayan sa player. Wala silang mga graphical na larawan, tunog, o animation. Inilalagay ng user ang command sa pamamagitan ng console window.

Paano Gumawa ng Basic na Text-based na Laro sa C++

Ang mga text-based na laro sa C++ ay nagbibigay-daan sa player na mag-input ng mga command sa pamamagitan ng console window, at pinoproseso ng program ang mga galaw ng player. Dito, nakagawa ako ng text-based na tic-tac-toe na laro na nagbibigay-daan sa dalawang opsyon para maglaro ang user. Maaaring maglaro ang user sa C++ compiler o sa kapwa tao. Ang larong ito ay may tampok na patuloy na nagdaragdag ng puntos para sa nanalong manlalaro. Matapos ipahayag ang kinalabasan ng unang laro, available ang isang rematch na opsyon.

Mga Panuntunan para sa Panalo sa Laro

Dalawang manlalaro ang naglalaro ng tic-tac-toe na laro, na inilalagay ang X at 0 bilang kahalili sa isa sa siyam na available na puwang sa isang three-by-three na grid. Ang laro ay napanalunan ng unang manlalaro na nakakuha ng tatlo sa kanyang magkakasunod na marka sa isang vertical, horizontal, o diagonal na direksyon. Ang bawat manlalaro ay kailangang mag-isip nang matalino at tumingin sa susunod na hakbang ng ibang manlalaro.







Ang code para sa pagdidisenyo ng text-based na tic-tac-toe na laro ay may iba't ibang mga seksyon, na hinati batay sa functionality. Sa unang seksyon, nagpapasya ang user kung makikipaglaro sa isang computer o sa kapwa tao. Pagkatapos magpasya sa mode ng pakinabang, ang programa ay humihingi ng input sa user. Ang parehong mga manlalaro ay nagpasok ng input nang isa-isa.



//Kumuha ng input mula sa mga manlalaro
walang bisa playerInput ( Manlalaro at manlalaro ) {
int pos ;
cout << endl ;
cout << ' \t ' << manlalaro. getName ( ) << ' Lumiko: ' ;
cout << ' \t Ipasok ang posisyon ' <> pos ;
pos - = 1 ;
kung ( emptyIndex [ pos ] == 1 ) {
cout << '-----Walang laman ang posisyon-------' << endl ;
playerInput ( manlalaro ) ;
} iba pa {
emptyIndex [ pos ] = 1 ;
emptyCount - = 1 ;
manlalaro. getName ( ) . ihambing ( 'Manlalaro I' ) == 0 ? board [ pos ] = 'X' : board [ pos ] = 'O' ;
}

}

Pagkatapos kumuha ng mga input mula sa user, sinusuri nito ang panuntunan ng panalo. Ang checkWin() function ay may dalawang parameter na p1 at p2 para tingnan kung nanalo ang player o hindi. Ang iba't ibang mga variable ay idineklara sa function na i, j, at k ay mga integer na variable na idineklara para sa loop at ang flag ay isang Boolean function upang suriin ang kondisyon ng panalo. Ang loop ay nagsisimula mula sa pinakaunang posisyon at patuloy na umuulit para sa lahat ng siyam na posisyon. Ang first_symbol ay isang character na maaaring maging 0 o X kung ito ay totoo at ang lahat ng posibleng kumbinasyon ay sinusuri para sa panalong panuntunan. Kung hindi, lilipat ang iterator sa susunod na posisyon, at magpapatuloy ito hanggang sa masuri ang lahat ng posibleng posisyon. Kung ang watawat ay nakatakdang maging totoo, pagkatapos ay idineklara ang isang panalo, at hihilingin ng programa na muling pumili.



walang bisa checkWin ( Manlalaro at p1, Manlalaro at p2 ) {
int ako,j,k ;
bool bandila = mali ;
char unang_simbolo ;
para sa ( i = 0 ; i < 8 ; i ++ ) {
unang_simbolo = board [ winlist [ i ] . hilera [ 0 ] ] ;

kung ( ( unang_simbolo ! = 'X' ) && ( unang_simbolo ! = 'O' ) ) {
bandila = mali ;
magpatuloy ;
}
bandila = totoo ;
para sa ( j = 0 ; j < 3 ; j ++ ) {
kung ( unang_simbolo ! = board [ winlist [ i ] . hilera [ j ] ] ) {
bandila = mali ;
pahinga ;
}
}
kung ( bandila ) {
simulan na = 0 ;
kung ( unang_simbolo == 'X' ) {
cout << '-----------------------' << endl ;
cout << ' \t Player NANALO AKO' << endl ;
cout << '-----------------------' << endl ;
p1. nanalo ( ) ;
} iba pa {
p2. nanalo ( ) ;
kung ( laban sa Computer ) {
cout << '-----------------------' << endl ;
cout << ' \t NANALO ang computer' << endl ;
cout << '-----------------------' << endl ;
} iba pa {
cout << '-----------------------' << endl ;
cout << ' \t Nanalo ang Manlalaro II' << endl ;
cout << '-----------------------' << endl ;

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

Ang bahaging ito ng code ay nagpapakita ng marka ng laro. Kung ang laro ay laban sa isang computer, ang puntos para sa player 1 at ang computer ay ipapakita, kung hindi, ang puntos para sa player 1 at player 2 ay ipapakita.





walang bisa displayScore ( Manlalaro at p1, Manlalaro at p2 ) {
cout << endl ;
cout << ' \t ISKOR: \t ' ;
kung ( laban sa Computer )
cout << 'Manlalaro I:' << p1. getScore ( ) << ' \t Computer: ' << p2. getScore ( ) << endl ;
iba pa
cout << 'Manlalaro I:' << p1. getScore ( ) << ' \t Manlalaro II: ' << p2. getScore ( ) << endl ;
}

Ito ang pangunahing code para sa pagpapatupad ng larong tic-tac-toe para sa dalawang manlalaro. Maaaring pumili ang user mula sa iba't ibang mga pamamaraan na isasagawa gamit ang switch case statement. Ang code na ito ay nagbibigay ng user-friendly na interface para sa paglalaro ng isang laro sa isang C++ compiler, at ang code ay patuloy na gumagana hanggang sa piliin ng user ang exit option.

int pangunahing ( )
{
int ch ;

habang ( 1 ) {
cout << '      ----------MENU-----------' << endl ;
cout << ' \t 1. Larong 1 Manlalaro' << endl ;
cout << ' \t 2. Larong 2 Manlalaro' << endl ;
cout << ' \t 3. Upang lumabas ' << endl ;
cout << '      ----------' << endl ;
cout << endl ;
cout << ' \t Pumili ng opsyon' <> ch ;
lumipat ( ch ) {
kaso 1 : {
Laro * laro = bago Laro ;
laro - > init ( ) ;
laro - > onePlayerGame ( ) ;
}
pahinga ;
kaso 2 : {
Laro * laro = bago Laro ;
laro - > init ( ) ;
laro - > twoPlayerGame ( ) ;
}
pahinga ;
kaso 3 :
bumalik 0 ;
default :
cout << 'OOPs Invalid Option! SUBUKAN MULI' ;
}

}
bumalik 0 ;
}

Kumpletuhin ang Code para sa Text-Based Tic-Tac-Toc Game

Ito ay isang kumpletong code para sa disenyo at pagpapatupad ng isang text-based na tic-tac-toe na laro.



#include
#include
#include
#include
#include
gamit namespace std ;

typedef struct {
int * hilera ;
} WinList ;


klase Manlalaro {
pribado :
pangalan ng string ;
int puntos ;
pampubliko :
Manlalaro ( ) : Manlalaro { '' } { }
Manlalaro ( string n ) : puntos { 0 } , pangalan { n } { }

walang bisa nanalo ( ) {
//dagdagan ang iskor
puntos ++ ;
}
int getScore ( ) { bumalik ito - > puntos ; }

string getName ( ) { bumalik ito - > pangalan ; }
} ;

klase Laro {
pribado :
char board [ 9 ] ;
int emptyIndex [ 9 ] ;
int gameOn, laban saComputer ;
int emptyCount ;
WinList winlist [ 8 ] ;

walang bisa displayBoard ( ) {
cout << endl ;
cout << '   |   |   ' << endl ;
cout << '' << board [ 0 ] << ' | ' << board [ 1 ] << ' | ' << board [ 2 ] << endl ;
cout << '   |   |   ' << endl ;
cout << '-----------' << endl ;
cout << '   |   |   ' << endl ;
cout << '' << board [ 3 ] << ' | ' << board [ 4 ] << ' | ' << board [ 5 ] << endl ;
cout << '   |   |   ' << endl ;
cout << '-----------' << endl ;
cout << '   |   |   ' << endl ;
cout << '' << board [ 6 ] << ' | ' << board [ 7 ] << ' | ' << board [ 8 ] << endl ;
cout << '   |   |   ' << endl ;
cout << endl ;
}

walang bisa computerInput ( ) {
int pos ;
pos = rand ( ) % 10 ;
kung ( emptyIndex [ pos ] == 1 ) {
kung ( emptyCount < 0 )
bumalik ;
computerInput ( ) ;
} iba pa {
cout << 'Pumili ng computer: ' << pos + 1 << endl ;
emptyIndex [ pos ] = 1 ;
emptyCount - = 1 ;
board [ pos ] = 'O' ;
}

}

walang bisa playerInput ( Manlalaro at manlalaro ) {
int pos ;
cout << endl ;
cout << ' \t ' << manlalaro. getName ( ) << ' Lumiko: ' ;
cout << ' \t Ipasok ang posisyon ' <> pos ;
pos - = 1 ;
kung ( emptyIndex [ pos ] == 1 ) {
cout << '-----Walang laman ang posisyon-------' << endl ;
playerInput ( manlalaro ) ;
} iba pa {
emptyIndex [ pos ] = 1 ;
emptyCount - = 1 ;
manlalaro. getName ( ) . ihambing ( 'Manlalaro I' ) == 0 ? board [ pos ] = 'X' : board [ pos ] = 'O' ;
}

}

walang bisa checkWin ( Manlalaro at p1, Manlalaro at p2 ) {
int ako,j,k ;
bool bandila = mali ;
char unang_simbolo ;
para sa ( i = 0 ; i < 8 ; i ++ ) {
unang_simbolo = board [ winlist [ i ] . hilera [ 0 ] ] ;

kung ( ( unang_simbolo ! = 'X' ) && ( unang_simbolo ! = 'O' ) ) {
bandila = mali ;
magpatuloy ;
}
bandila = totoo ;
para sa ( j = 0 ; j < 3 ; j ++ ) {
kung ( unang_simbolo ! = board [ winlist [ i ] . hilera [ j ] ] ) {
bandila = mali ;
pahinga ;
}
}
kung ( bandila ) {
simulan na = 0 ;
kung ( unang_simbolo == 'X' ) {
cout << '-----------------------' << endl ;
cout << ' \t Player NANALO AKO' << endl ;
cout << '-----------------------' << endl ;
p1. nanalo ( ) ;
} iba pa {
p2. nanalo ( ) ;
kung ( laban sa Computer ) {
cout << '-----------------------' << endl ;
cout << ' \t NANALO ang computer' << endl ;
cout << '-----------------------' << endl ;
} iba pa {
cout << '-----------------------' << endl ;
cout << ' \t Nanalo ang Manlalaro II' << endl ;
cout << '-----------------------' < 0 ) && ( simulan na ! = 0 ) ) {

kung ( laban sa Computer )
kamay == 1 ? computerInput ( ) : playerInput ( p2 ) ;
iba pa
kamay == 1 ? playerInput ( p1 ) : playerInput ( p2 ) ;
kamay = ! kamay ;
displayBoard ( ) ;
checkWin ( p1,p2 ) ;
}
kung ( emptyCount <= 0 ) {
cout << '      -----------------------' << endl ;
cout << ' \t Walang WINNER' << endl ;
cout << '      -----------------------' << endl ;
}
cout << endl ;
cout <> rematch ;
kung ( ( rematch == 'AT' ) || ( rematch == 'at' ) ) {
                init ( ) ;
maglaro ( p1,p2 ) ;
}

}
walang bisa displayScore ( Manlalaro at p1, Manlalaro at p2 ) {
cout << endl ;
cout << ' \t ISKOR: \t ' ;
kung ( laban sa Computer )
cout << 'Manlalaro I:' << p1. getScore ( ) << ' \t Computer: ' << p2. getScore ( ) << endl ;
iba pa
cout << 'Manlalaro I:' << p1. getScore ( ) << ' \t Manlalaro II: ' << p2. getScore ( ) << endl ;
}

pampubliko :
Laro ( ) : emptyCount { 0 } , simulan na { 1 } , laban sa Computer { 0 } {
        init ( ) ;
winlist [ 0 ] . hilera = bago int [ 3 ] { 0 , 1 , 2 } ;
winlist [ 1 ] . hilera = bago int [ 3 ] { 3 , 4 , 5 } ;
winlist [ 2 ] . hilera = bago int [ 3 ] { 6 , 7 , 8 } ;
winlist [ 3 ] . hilera = bago int [ 3 ] { 0 , 3 , 6 } ;
winlist [ 4 ] . hilera = bago int [ 3 ] { 1 , 4 , 7 } ;
winlist [ 5 ] . hilera = bago int [ 3 ] { 2 , 5 , 8 } ;
winlist [ 6 ] . hilera = bago int [ 3 ] { 0 , 4 , 8 } ;
winlist [ 7 ] . hilera = bago int [ 3 ] { 2 , 4 , 6 } ;
}

walang bisa init ( ) {
simulan na = 1 ;

emptyCount = 0 ;
srand ( oras ( 0 ) ) ;
para sa ( laki_t i = 0 ; i < 10 ; i ++ ) {
emptyIndex [ i ] = 0 ;
board [ i ] = ( i + 1 ) + '0' ;
emptyCount ++ ;
}
emptyCount -- ;
}

walang bisa onePlayerGame ( ) {
//Paglikha ng Manlalaro
Manlalaro p ( 'Manlalaro I' ) ;
Manlalaro c ( 'Kompyuter' ) ;
cout << '       ------------------------' << endl ;
cout << ' \t Manlalaro I: X \t Computer: O' << endl ;
cout << '       ------------------------' << endl ;
cout << endl ;
laban sa Computer = 1 ;
maglaro ( c,p ) ;

}

walang bisa twoPlayerGame ( ) {
//Paglikha ng Manlalaro
Manlalaro p ( 'Manlalaro I' ) ;
Manlalaro c ( 'Manlalaro II' ) ;
cout << '       ------------------------' << endl ;
cout << ' \t Manlalaro I: X \t Manlalaro II: O' << endl ;
cout << '       ------------------------' << endl ;
cout << endl ;
laban sa Computer = 0 ;
maglaro ( c,p ) ;
}
} ;

int pangunahing ( )
{
int ch ;

habang ( 1 ) {
cout << '      ----------MENU-----------' << endl ;
cout << ' \t 1. Larong 1 Manlalaro' << endl ;
cout << ' \t 2. Larong 2 Manlalaro' << endl ;
cout << ' \t 3. Upang lumabas ' << endl ;
cout << '      ----------' << endl ;
cout << endl ;
cout << ' \t Pumili ng opsyon' <> ch ;
lumipat ( ch ) {
kaso 1 : {
Laro * laro = bago Laro ;
laro - > init ( ) ;
laro - > onePlayerGame ( ) ;
}
pahinga ;
kaso 2 : {
Laro * laro = bago Laro ;
laro - > init ( ) ;
laro - > twoPlayerGame ( ) ;
}
pahinga ;
kaso 3 :
bumalik 0 ;
default :
cout << 'OOPs Invalid Option! SUBUKAN MULI' ;
}

}
bumalik 0 ;
}

Ito ay isang kumpletong code para sa pagpapatupad ng larong tic-tac-toe, na maaaring laruin sa dalawang mode, alinman sa isang computer o isang kapwa tao. Isa itong versatile code, kasama ang lahat ng posibleng command. Kapag nag-input ang user ng isang posisyon na napunan na, hindi nito ino-overwrite ang posisyong ito at itinuturing na hindi wasto ang paglipat na ito.

Hanggang ngayon pinili ng manlalaro ang unang kahon at pagkatapos ay sa susunod na pagliko ay minarkahan ng computer ang ikaanim na kahon:

Parehong pinili ng mga manlalaro ang dalawang kahon hanggang ngayon at sa susunod na pagliko ay pipiliin ng manlalaro ang ikapitong kahon na nagreresulta sa paglikha ng magkasunod na vertical pattern:

Pinipili ng user na gamitin ang computer para maglaro, kaya pagkatapos kumuha ng tatlong galaw, nanalo ang user mula sa computer at isang puntos ang idinagdag sa record ng player 1. Pagkatapos ng unang laban, hihilingin ng compiler ang rematch. Ang gumagamit ay nagpasya mula sa mga pagpipilian at ang programa ay bumalik sa pangunahing seksyon. Pagkatapos pumili ng opsyon na tatlo ang compiler ay umiiral ang pagpapatupad ng code.

Konklusyon

Ang mga larong nakabatay sa teksto ay umaasa sa mga text character at isang command line interface para sa pakikipag-ugnayan sa player. Wala silang mga graphical na larawan, tunog, o animation. Inilalagay ng user ang command sa pamamagitan ng console window. Ang user-friendly na text-based na tic-tac-toe na laro ay binuo gamit ang C++. Gumagamit ito ng iba't ibang mga utos upang makagawa ng isang laro na maaaring laruin gamit ang isang computer o ibang kapwa manlalaro.