Креирање игре Тиц-Тац-Тое у Ц++

Kreirane Igre Tic Tac Toe U C



Тиц-тац-тое је занимљива, стара и класична игра која је забављала генерације. У тиц-тац-тое, два играча се такмиче на мрежи од 9 квадрата која је означена хеш шаблоном. Сваки играч долази на ред и ставља симбол (О или Кс) у једно од празних поља. У овом чланку ћемо истражити како да направите тиц-тац-тое игру у програмском језику Ц++. Следећи пример ће вас водити кроз изградњу једноставне, али привлачне игре тик-так-тое, покривајући основне концепте, кварове кода и разматрања за креирање интерактивног искуства играња.

Направите игру Тиц-Тац-Тое у Ц++

Следећи пример пружа основе прављења ове интерактивне игре за два играча тиц-тац-тое. Приказује једноставан и лак приступ програмирању са Ц++ и пружа добро документован изворни код за проживљавање тих изазова из детињства са пријатељима у новом, дигиталном формату. Хајде да видимо следећи код.

Пример: Основни Тиц-Тац-Тое заснован на конзоли без коришћења 2Д низа

У овом примеру користићемо 2Д низ, функције и иф-елсе услове да направимо игру тиц-тац-тое у Ц++. У овој игри, два играча могу да се смењују у уносу својих потеза, а она одређује стање игре провером победника или нерешеним резултатом. Погледајте следећи код:







#инцлуде <иостреам>

користећи простор имена стд ;

празнина дравБоард ( цхар одбор, табла [ 3 ] [ 3 ] ) ;

боол исМовеВалид ( цхар одбор, табла [ 3 ] [ 3 ] , инт ред , инт цол ) ;

боол исБоардФулл ( цхар одбор, табла [ 3 ] [ 3 ] ) ;

цхар цхецкВиннер ( цхар одбор, табла [ 3 ] [ 3 ] ) ;

инт главни ( ) {

цхар одбор, табла [ 3 ] [ 3 ] = { { '' , '' , '' } , { '' , '' , '' } , { '' , '' , '' } } ;

инт ред , цол ;

цхар цуррентПлаиер = 'ИКС' ;

док ( истина ) {

дравБоард ( одбор, табла ) ;

цоут << 'Играч' << цуррентПлаиер << 'с ред. Унесите ред (1-3) и колону (1-3): ' ;

једење >> ред >> цол ;

ред --;

цол --;

ако ( исМовеВалид ( одбор, табла , ред , цол ) ) {

одбор, табла [ ред ] [ цол ] = цуррентПлаиер ;

цхар победник = цхецкВиннер ( одбор, табла ) ;

ако ( победник != '' ) {

дравБоард ( одбор, табла ) ;

цоут << 'Играч' << победник << ' је победник! ' ;

пауза ;

}

ако ( исБоардФулл ( одбор, табла ) ) {

дравБоард ( одбор, табла ) ;

цоут << 'То је кравата! ' ;

пауза ;

}

цуррентПлаиер = ( цуррентПлаиер == 'ИКС' ) ? 'О' : 'ИКС' ;

} друго {

цоут << „Неважећи потез. Изаберите другу ћелију. ' ;

} }

повратак 0 ;

}

празнина дравБоард ( цхар одбор, табла [ 3 ] [ 3 ] ) {

цоут << 'б| 1 | 2 | 3 | ' ;

цоут << ' __________________ ' ;

за ( инт м = 0 ; м < 3 ; м ++ ) {

цоут << м + 1 << '| ' ;

за ( инт т = 0 ; т < 3 ; т ++ ) {

цоут << '' << одбор, табла [ м ] [ т ] ;

ако ( т < 2 ) цоут << ' | ' ;

}

цоут << ' | ' ;

ако ( м < 2 ) цоут << ' __________________ ' ;

}

цоут << ' ' ; }

боол исМовеВалид ( цхар одбор, табла [ 3 ] [ 3 ] , инт ред , инт цол ) {

повратак ( ред >= 0 && ред < 3 && цол >= 0 && цол < 3 && одбор, табла [ ред ] [ цол ] == '' ) ;

}

боол исБоардФулл ( цхар одбор, табла [ 3 ] [ 3 ] ) {

за ( инт м = 0 ; м < 3 ; м ++ ) {

за ( инт т = 0 ; т < 3 ; т ++ ) {

ако ( одбор, табла [ м ] [ т ] == '' ) {

повратак лажно ;

} } }

повратак истина ; }

цхар цхецкВиннер ( цхар одбор, табла [ 3 ] [ 3 ] ) {

за ( инт м = 0 ; м < 3 ; м ++ ) {

ако ( одбор, табла [ м ] [ 0 ] == одбор, табла [ м ] [ 1 ] && одбор, табла [ м ] [ 1 ] == одбор, табла [ м ] [ 2 ] && одбор, табла [ м ] [ 0 ] != '' ) {

повратак одбор, табла [ м ] [ 0 ] ;

}

ако ( одбор, табла [ 0 ] [ м ] == одбор, табла [ 1 ] [ м ] && одбор, табла [ 1 ] [ м ] == одбор, табла [ 2 ] [ м ] && одбор, табла [ 0 ] [ м ] != '' ) {

повратак одбор, табла [ 0 ] [ м ] ;

} }

ако ( одбор, табла [ 0 ] [ 0 ] == одбор, табла [ 1 ] [ 1 ] && одбор, табла [ 1 ] [ 1 ] == одбор, табла [ 2 ] [ 2 ] && одбор, табла [ 0 ] [ 0 ] != '' ) {

повратак одбор, табла [ 0 ] [ 0 ] ;

}

ако ( одбор, табла [ 0 ] [ 2 ] == одбор, табла [ 1 ] [ 1 ] && одбор, табла [ 1 ] [ 1 ] == одбор, табла [ 2 ] [ 0 ] && одбор, табла [ 0 ] [ 2 ] != '' ) {

повратак одбор, табла [ 0 ] [ 2 ] ;

}

повратак '' ;

}

Ево прегледа његове функционалности:



„#инцлуде<иостреам>” је директива препроцесора која укључује библиотеку И/О токова за операције улаза/излаза. Коришћење „простора имена стд“ омогућава директну употребу функција цоут, цин, итд. у Ц++ програму, без потребе за „стд:: префиксом“.



У овом програму постоје четири прототипа функција – то су дравБоард(), исМовеВалид(), исБоардФулл() и цхецкВиннер(). Декларација функције је позната као прототип функције. Иако долази после главне функције у програму, биће коришћена. Главна функција садржи петљу игре и логику за управљање окретима и потезима играча. У оквиру главне функције, табла за игру се иницијализује размацима.





цхар одбор, табла [ 3 ] [ 3 ] = { { '' , '' , '' } , { '' , '' , '' } , { '' , '' , '' } } ;

Након тога, две променљиве реда и колоне су дефинисане за чување играчевог уноса потеза. Тхе 'цхар цуррентПлаиер = 'Кс';' дефинише да 'Кс' играч иде први.

Сада почиње док (истинска) петља игре и траје док не дође до победника или нерешеног резултата. Ова петља „вхиле“ позива „дравБоард();“ да прикаже таблу. Након што се табла прикаже на конзоли, од корисника се тражи да изабере ћелију коју ће означити у следећој изјави кода:



цоут << 'Играч' << цуррентПлаиер << 'с ред. Унесите ред и колону (1-3): ' ;

Играч уноси свој потез у „цин >> ред >> цол;“.

Након одабира ћелије за означавање, програм ће прво проверити валидност уноса, осигуравајући да ћелија није већ попуњена позивањем функције исМовеВалид().

одбор, табла [ ред ] [ цол ] = цуррентПлаиер ;

Ова изјава ставља ознаку играча на таблу.

цхар победник = цхецкВиннер ( одбор, табла ) ;

ако ( победник != '' ) {

дравБоард ( одбор, табла ) ;

цоут << 'Играч' << победник << „побеђује! ' ;

Ове изјаве проверавају победника сваки пут када играч означи унос на табли. Име победника ће бити објављено ако постоји победник, а програм ће изаћи из циклуса игре.

ако ( исБоардФулл ( одбор, табла ) ) {

Ова изјава проверава нерешено. Услов изједначења се јавља у случају када је табла пуна и нема победника. У овом случају, „То је нерешено!“ се штампа на екрану.

цуррентПлаиер = ( цуррентПлаиер == 'ИКС' ) ? 'О' : 'ИКС' ;

Ова изјава мења играче како би сваком играчу дала прилику да одигра свој ред.

цоут << „Неважећи потез. Изаберите другу ћелију. ' ;

Ако померање није важеће, од корисника се тражи да поново унесе и одабере било коју другу ћелију.

Након „маин“ функције, почеће дефиниције функција за прототипове функција који су претходно декларисани. Прва функција која је овде дефинисана је дравБоард() која се користи за цртање тик-так-тое плоче на конзолу. Функција дравБоард() штампа тренутно стање плоче, укључујући линије мреже.

Следећа функција која је овде дефинисана је исМовеВалид(). Ова функција се користи да одреди да ли је потез дозвољен и унутар табле и на празној ћелији. ИсБоардФулл() функција се користи за проверу да ли је плоча још пуна. Ово је услов за изједначење када нема победника. ИсБоардФулл() проверава да ли су све позиције на табли попуњене, што указује на изједначење ако нема победника. Ако постоји победник, то се може утврдити помоћу функције цхецкВиннер(). ЦхецкВиннер() проверава све потенцијалне победничке линије за ознаку истог играча („Кс“ или „О“) и враћа ознаку победничког играча ако је пронађена или знак за размак „ “ ако још увек нема победника. Следећи је излаз програма. Приказује сваки потез сваког играча.

Прво, табла је јасна; од играча „Кс“ се тражи да одабере ћелију која ће бити означена. Овде играч „Кс“ уноси 2 и 2. Ћелије реда 2 и колоне 2 су означене. Погледајте означену таблу у следећем:

Сада је ред на играча О. Од играча се тражи да одабере ћелију коју ће означити. Играч „О” бира 1 за ред и 1 за колону. Изабрана ћелија је означена за играча „О“ као што је приказано у следећем излазном исечку:

Сви окрети за сваког играча ће пратити исти образац. На реду је играч Кс, а играч бира 1 за ред и 2 за колону. Погледајте следеће дате излазне снимке:

Сада је ред на играча „О“. Играч бира 1 за ред и 3 за колону.

Следећи потез је поново на играчу „Кс“. Играч бира 3 за ред и 1 за колону.

Играч „О“ бира 3 за ред и 2 за колону.

Играч „Кс” бира други ред и трећу колону.

Играч „О“ сада бира други ред и прву колону.

Играч „Кс“ овог пута бира трећи ред и трећу колону.

Ниједан играч није могао да направи било коју линију хоризонтално, вертикално или дијагонално, тако да је нерешено. Не постоји победник за изабрани низ уноса.

Све у свему, код се састоји од главне петље игре која је одговорна за руковање стањем игре и корисничким уносом, заједно са неколико услужних функција које се користе за цртање табле, валидацију потеза, проверу пуне табле и одређивање да ли постоји победник .

Закључак

Развијање тиц-тац-тое игре користећи Ц++ је одлична практична вежба за јачање ваших вештина програмирања. Чланак тачно објашњава како да креирате тиц-тац-тое у Ц++. Упутства корак по корак дата у овом чланку обухватају 2Д низ, функције и услове ако-друго за читаоце да разумеју механику игре, интеракције корисника и ефикасно структурирање кода. Детаљно објашњење кода и објашњење функција које су кључне за језгро игре дају читаоцима непроцењив увид како у Ц++ програмске праксе, тако и у замршености једноставног развоја игре.