Създайте игра Tic-Tac-Toe в C++
Следващият пример предоставя основите за създаване на тази интерактивна игра с тик-так-пръст за двама играчи. Той демонстрира прост и лесен подход за програмиране с C++ и предоставя добре документиран изходен код, за да преживеете тези предизвикателства от детството с приятели в нов, цифров формат. Нека видим следния код.
Пример: Основен Tic-Tac-Toe, базиран на конзола, без използване на 2D масив
В този пример ще използваме 2D масив, функции и условия if-else, за да направим играта tic-tac-toe в C++. В тази игра на двама играчи е разрешено да се редуват при въвеждането на своите ходове и това определя състоянието на играта чрез проверка за победител или равенство. Вижте следния даден код:
#include
използване на пространство от имена std ;
невалиден теглителна дъска ( въглен дъска [ 3 ] [ 3 ] ) ;
bool isMoveValid ( въглен дъска [ 3 ] [ 3 ] , вътр ред , вътр полк ) ;
bool еBoardFull ( въглен дъска [ 3 ] [ 3 ] ) ;
въглен checkWinner ( въглен дъска [ 3 ] [ 3 ] ) ;
вътр основен ( ) {
въглен дъска [ 3 ] [ 3 ] = { { ' ' , ' ' , ' ' } , { ' ' , ' ' , ' ' } , { ' ' , ' ' , ' ' } } ;
вътр ред , полк ;
въглен currentPlayer = 'Х' ;
докато ( вярно ) {
теглителна дъска ( дъска ) ;
cout << 'Играч' << currentPlayer << 'на ред. Въведете ред (1-3) и колона (1-3): ' ;
храня се >> ред >> полк ;
ред --;
полк --;
ако ( isMoveValid ( дъска , ред , полк ) ) {
дъска [ ред ] [ полк ] = currentPlayer ;
въглен победител = checkWinner ( дъска ) ;
ако ( победител != ' ' ) {
теглителна дъска ( дъска ) ;
cout << 'Играч' << победител << ' е победител! \н ' ;
прекъсвам ;
}
ако ( isBoardFull ( дъска ) ) {
теглителна дъска ( дъска ) ;
cout << „Равенство е! \н ' ;
прекъсвам ;
}
currentPlayer = ( currentPlayer == 'Х' ) ? 'О' : 'Х' ;
} друго {
cout << „Невалиден ход. Изберете друга клетка. \н ' ;
} }
връщане 0 ;
}
невалиден теглителна дъска ( въглен дъска [ 3 ] [ 3 ] ) {
cout << 'b| \T 1 \T | \T 2 \T | \T 3 \T | \н ' ;
cout << ' ______________________ \н ' ;
за ( вътр м = 0 ; м < 3 ; м ++ ) {
cout << м + 1 << '| ' ;
за ( вътр T = 0 ; T < 3 ; T ++ ) {
cout << '' << дъска [ м ] [ T ] ;
ако ( T < 2 ) cout << ' \T | \T ' ;
}
cout << ' \T | \н ' ;
ако ( м < 2 ) cout << ' ______________________ \н ' ;
}
cout << ' \н ' ; }
bool isMoveValid ( въглен дъска [ 3 ] [ 3 ] , вътр ред , вътр полк ) {
връщане ( ред >= 0 && ред < 3 && полк >= 0 && полк < 3 && дъска [ ред ] [ полк ] == ' ' ) ;
}
bool еBoardFull ( въглен дъска [ 3 ] [ 3 ] ) {
за ( вътр м = 0 ; м < 3 ; м ++ ) {
за ( вътр T = 0 ; T < 3 ; T ++ ) {
ако ( дъска [ м ] [ T ] == ' ' ) {
връщане невярно ;
} } }
връщане вярно ; }
въглен checkWinner ( въглен дъска [ 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 ] ;
}
връщане ' ' ;
}
Ето разбивка на неговата функционалност:
“#include
В тази програма има четири прототипа на функции – те са drawBoard(), isMoveValid(), isBoardFull() и checkWinner(). Декларацията на функцията е известна като прототип на функция. Въпреки че идва след основната функция в програмата, тя ще бъде използвана. Основната функция съдържа цикъл на играта и логика за управление на ходовете и ходовете на играчите. В рамките на основната функция дъската за игра се инициализира с интервали.
въглен дъска [ 3 ] [ 3 ] = { { ' ' , ' ' , ' ' } , { ' ' , ' ' , ' ' } , { ' ' , ' ' , ' ' } } ;
След това се дефинират две променливи за ред и колона, за да съхраняват въведеното движение на играча. 'char currentPlayer = 'X';' определя, че играчът „X“ е първи.
Сега започва (истинската) цикъл на играта и продължава, докато има победител или равенство. Този цикъл „while“ извиква „drawBoard();“ за показване на таблото. След показване на дъската на конзолата, потребителят е помолен да избере клетка, която да маркира в следния код:
cout << 'Играч' << currentPlayer << 'на ред. Въведете ред и колона (1-3): ' ;
Играчът въвежда своя ход в “cin >> row >> col;”.
След като изберете клетка за маркиране, програмата първо ще провери валидността на въведеното, като се увери, че клетката вече не е попълнена чрез извикване на функцията isMoveValid().
дъска [ ред ] [ полк ] = currentPlayer ;Това изявление поставя знака на играча върху дъската.
въглен победител = checkWinner ( дъска ) ;ако ( победител != ' ' ) {
теглителна дъска ( дъска ) ;
cout << 'Играч' << победител << 'печели! \н ' ;
Тези твърдения проверяват за победител всеки път, когато играч маркира запис на дъската. Името на победителя ще бъде обявено, ако има победител, и програмата ще излезе от цикъла на играта.
ако ( isBoardFull ( дъска ) ) {Това изявление проверява за равенство. Равенството възниква в случай, че дъската е пълна и няма победител. В този случай „Равенство е!“ се отпечатва на екрана.
currentPlayer = ( currentPlayer == 'Х' ) ? 'О' : 'Х' ;Това изявление превключва играчите, за да даде на всеки играч шанс да изиграе своя ред.
cout << „Невалиден ход. Изберете друга клетка. \н ' ;Ако преместването не е валидно, потребителят получава подкана да въведе отново и да избере друга клетка.
След „основната“ функция ще започнат дефинициите на функциите за прототипите на функции, които са декларирани преди това. Първата функция, която е дефинирана тук, е drawBoard(), която се използва за изчертаване на дъската с тик-так-пръст към конзолата. Функцията drawBoard() отпечатва текущото състояние на дъската, включително линиите на мрежата.
Следващата функция, която е дефинирана тук, е isMoveValid(). Тази функция се използва, за да се определи дали е разрешен ход както вътре в дъската, така и върху празна клетка. Функцията isBoardFull() се използва за проверка дали дъската все още е пълна. Това е условие за равенство, когато няма победител. IsBoardFull() проверява дали всички позиции на дъската са запълнени, което показва равенство, ако няма победител. Ако има победител, той може да бъде установен с помощта на функцията checkWinner(). CheckWinner() проверява всички потенциални печеливши линии за една и съща марка на играча („X“ или „O“) и връща марката на печелившия играч, ако бъде намерена, или символ за интервал „ “, ако все още няма победител. Следва изходът на програмата. Показва всеки ход от всеки играч.
Първо, дъската е ясна; играчът “X” е подканен да избере клетката, която да маркира. Тук играчът „X“ въвежда 2 и 2. Клетките на ред 2 и колона 2 са маркирани. Обърнете се към маркираната дъска в следното:
Сега е ред на играча O. Играчът е подканен да избере клетка, която да маркира. Играч “O” избира 1 за реда и 1 за колоната. Избраната клетка е маркирана за играч „O“, както е показано в следния изходен фрагмент:
Всички ходове за всеки играч ще следват същия модел. Ред е на играча X и играчът избира 1 за реда и 2 за колоната. Обърнете се към следните дадени изходни моментни снимки:
Сега редът е за играч „О“. Играчът избира 1 за реда и 3 за колоната.
Следващият ход отново е на играч „X“. Играчът избира 3 за реда и 1 за колоната.
Играч “O” избира 3 за реда и 2 за колоната.
Играчът “X” избира втория ред и третата колона.
Играч “O” сега избира втория ред и първата колона.
Този път играчът “X” избира третия ред и третата колона.
Никой играч не може да направи нито една линия хоризонтално, вертикално или диагонално, така че това е равенство. Няма победител за избрания масив от входове.
Като цяло, кодът включва основен цикъл на играта, който е отговорен за обработката на състоянието на играта и потребителския вход, заедно с няколко помощни функции, които се използват за изчертаване на дъската, валидиране на ходовете, проверка за пълна дъска и определяне дали има победител .
Заключение
Разработването на тик-так игра с помощта на C++ е отлично практическо упражнение за затвърждаване на вашите умения по програмиране. Статията точно обяснява как да създадете tic-tac-toe в C++. Насоките стъпка по стъпка, предоставени в тази статия, обхващат 2D масив, функции и условия if-else, за да могат читателите да разберат механиката на играта, взаимодействията с потребителите и ефективното структуриране на кода. Подробното разглеждане на кода и обяснението на функциите, които са от решаващо значение за основния геймплей, предоставят на читателите безценна информация както за практиките за програмиране на C++, така и за тънкостите на простата разработка на игри.