Как создать простую текстовую игру на C++

Kak Sozdat Prostuu Tekstovuu Igru Na C



Текстовые игры используют текстовые символы и интерфейс командной строки для взаимодействия с игроком. У них нет графических изображений, звуков и анимации. Пользователь вводит команду через окно консоли.

Как создать простую текстовую игру на C++

Текстовые игры на C++ позволяют игроку вводить команды через окно консоли, а программа обрабатывает ходы игрока. Здесь я создал текстовую игру «Крестики-нолики», в которой у пользователя есть два варианта игры. Пользователь может играть либо с компилятором C++, либо с другим человеком. В этой игре есть функция, которая постоянно подсчитывает очки победившему игроку. После объявления результатов первой игры возможен вариант матча-реванша.

Правила победы в игре

Два игрока играют в крестики-нолики, попеременно размещая X и 0 в одном из девяти доступных мест на сетке три на три. Игру выигрывает тот игрок, который первым получит три последовательные отметки по вертикали, горизонтали или диагонали. Каждый игрок должен хорошо думать и предугадывать следующий ход другого игрока.







Код для разработки текстовой игры «Крестики-нолики» имеет различные разделы, разделенные по функциональности. В первом разделе пользователь решает, играть ли ему с компьютером или с человеком. После определения режима усиления программа запрашивает у пользователя ввод данных. Оба игрока вводят данные один за другим.



//Получаем информацию от игроков
пустота игрокВвод ( Игрок & игрок ) {
интервал позиция ;
расчет << конец ;
расчет << ' \ т ' << игрок. getName ( ) << ' Повернуть: ' ;
расчет << ' \ т Введите позицию ' <> позиция ;
позиция - '=' 1 ;
если ( пустойиндекс [ позиция ] == 1 ) {
расчет << '-----Позиция не пуста-------' << конец ;
игрокВвод ( игрок ) ;
} еще {
пустойиндекс [ позиция ] '=' 1 ;
пустойCount - '=' 1 ;
игрок. getName ( ) . сравнивать ( «Игрок I» ) == 0 ? доска [ позиция ] '=' 'ИКС' : доска [ позиция ] '=' 'О' ;
}

}

После получения входных данных от пользователя он проверяет правило выигрыша. Функция checkWin() имеет два параметра p1 и p2, которые позволяют проверить, выиграл игрок или нет. В функции i, j и k объявлены различные переменные, которые являются целочисленными переменными, объявленными для цикла, а флаг представляет собой логическую функцию для проверки условия победы. Цикл начинается с самой первой позиции и продолжает повторяться для всех девяти позиций. First_symbol — это символ, который может иметь значение 0 или X, если это правда, тогда все возможные комбинации проверяются на соответствие правилу выигрыша. В противном случае итератор переходит к следующей позиции, и то же самое продолжается до тех пор, пока не будут проверены все возможные позиции. Если флаг установлен в значение true, то объявляется победитель и программа просит сделать выбор еще раз.



пустота checkWin ( Игрок & п1,Игрок & п2 ) {
интервал я, Джей, К ;
логическое значение флаг '=' ЛОЖЬ ;
голец первый_символ ;
для ( я '=' 0 ; я < 8 ; я ++ ) {
первый_символ '=' доска [ список победителей [ я ] . ряд [ 0 ] ] ;

если ( ( первый_символ ! '=' 'ИКС' ) && ( первый_символ ! '=' 'О' ) ) {
флаг '=' ЛОЖЬ ;
продолжать ;
}
флаг '=' истинный ;
для ( дж '=' 0 ; дж < 3 ; дж ++ ) {
если ( первый_символ ! '=' доска [ список победителей [ я ] . ряд [ дж ] ] ) {
флаг '=' ЛОЖЬ ;
перерыв ;
}
}
если ( флаг ) {
игра началась '=' 0 ;
если ( первый_символ == 'ИКС' ) {
расчет << '------------------------' << конец ;
расчет << ' \ т Игрок, которого я выиграл» << конец ;
расчет << '------------------------' << конец ;
п1. выиграл ( ) ;
} еще {
п2. выиграл ( ) ;
если ( противкомпьютера ) {
расчет << '------------------------' << конец ;
расчет << ' \ т Компьютер ПОБЕДИЛ» << конец ;
расчет << '------------------------' << конец ;
} еще {
расчет << '------------------------' << конец ;
расчет << ' \ т Игрок II ВЫИГРАЛ' << конец ;
расчет << '------------------------' << конец ;

}
}
displayScore ( п1,п2 ) ;
перерыв ;
}

Эта часть кода показывает счет игры. Если игра ведется против компьютера, то отображается счет игрока 1 и компьютера, в противном случае отображается счет игрока 1 и игрока 2.





пустота displayScore ( Игрок & п1, Игрок & п2 ) {
расчет << конец ;
расчет << ' \ т СЧЕТ: \ т ' ;
если ( противкомпьютера )
расчет << «Игрок I:» << п1. getScore ( ) << ' \ т Компьютер: ' << п2. getScore ( ) << конец ;
еще
расчет << «Игрок I:» << п1. getScore ( ) << ' \ т Игрок 2: ' << п2. getScore ( ) << конец ;
}

Это основной код для выполнения игры «крестики-нолики» для двух игроков. Пользователь может выбирать из множества процедур, которые необходимо выполнить, используя оператор выбора случая. Этот код предоставляет удобный интерфейс для игры на компиляторе C++, и код продолжает выполняться до тех пор, пока пользователь не выберет вариант выхода.

интервал основной ( )
{
интервал ч ;

пока ( 1 ) {
расчет << '      ----------МЕНЮ----------' << конец ;
расчет << ' \ т 1. Игра для 1 игрока» << конец ;
расчет << ' \ т 2. Игра для двоих» << конец ;
расчет << ' \ т 3. Для выхода» << конец ;
расчет << '      ----------' << конец ;
расчет << конец ;
расчет << ' \ т Выберите вариант' <> ч ;
выключатель ( ч ) {
случай 1 : {
Игра * игра '=' новый Игра ;
игра - > нагревать ( ) ;
игра - > один игрокИгра ( ) ;
}
перерыв ;
случай 2 : {
Игра * игра '=' новый Игра ;
игра - > нагревать ( ) ;
игра - > дваИгрокИгра ( ) ;
}
перерыв ;
случай 3 :
возвращаться 0 ;
по умолчанию :
расчет << «Ойпс, неверный вариант! ПОПРОБУЙТЕ ЕЩЕ РАЗ» ;
}

}
возвращаться 0 ;
}

Полный код текстовой игры «Тик-Так-Ток»

Это полный код для разработки и выполнения текстовой игры в крестики-нолики.



#include
#include<список>
#include
#include<строка>
#include
с использованием пространство имен стандартный ;

определение типа структура {
интервал * ряд ;
} Список побед ;


сорт Игрок {
частный :
имя строки ;
интервал счет ;
общественный :
Игрок ( ) : Игрок { '' } { }
Игрок ( строка n ) : счет { 0 } , имя { н } { }

пустота выиграл ( ) {
// увеличиваем счет
счет ++ ;
}
интервал getScore ( ) { возвращаться этот - > счет ; }

строка getName ( ) { возвращаться этот - > имя ; }
} ;

сорт Игра {
частный :
голец доска [ 9 ] ;
интервал пустойиндекс [ 9 ] ;
интервал игра включена, против компьютера ;
интервал пустойCount ;
Список побед [ 8 ] ;

пустота табло ( ) {
расчет << конец ;
расчет << '   |   |   ' << конец ;
расчет << ' ' << доска [ 0 ] << ' | ' << доска [ 1 ] << ' | ' << доска [ 2 ] << конец ;
расчет << '   |   |   ' << конец ;
расчет << '-----------' << конец ;
расчет << '   |   |   ' << конец ;
расчет << ' ' << доска [ 3 ] << ' | ' << доска [ 4 ] << ' | ' << доска [ 5 ] << конец ;
расчет << '   |   |   ' << конец ;
расчет << '-----------' << конец ;
расчет << '   |   |   ' << конец ;
расчет << ' ' << доска [ 6 ] << ' | ' << доска [ 7 ] << ' | ' << доска [ 8 ] << конец ;
расчет << '   |   |   ' << конец ;
расчет << конец ;
}

пустота компьютерВвод ( ) {
интервал позиция ;
позиция '=' ранд ( ) % 10 ;
если ( пустойиндекс [ позиция ] == 1 ) {
если ( пустойCount < 0 )
возвращаться ;
компьютерВвод ( ) ;
} еще {
расчет << «Компьютер выбирает:» << позиция + 1 << конец ;
пустойиндекс [ позиция ] '=' 1 ;
пустойCount - '=' 1 ;
доска [ позиция ] '=' 'О' ;
}

}

пустота игрокВвод ( Игрок & игрок ) {
интервал позиция ;
расчет << конец ;
расчет << ' \ т ' << игрок. getName ( ) << ' Повернуть: ' ;
расчет << ' \ т Введите позицию ' <> позиция ;
позиция - '=' 1 ;
если ( пустойиндекс [ позиция ] == 1 ) {
расчет << '-----Позиция не пуста-------' << конец ;
игрокВвод ( игрок ) ;
} еще {
пустойиндекс [ позиция ] '=' 1 ;
пустойCount - '=' 1 ;
игрок. getName ( ) . сравнивать ( «Игрок I» ) == 0 ? доска [ позиция ] '=' 'ИКС' : доска [ позиция ] '=' 'О' ;
}

}

пустота checkWin ( Игрок & п1,Игрок & п2 ) {
интервал я, Джей, К ;
логическое значение флаг '=' ЛОЖЬ ;
голец первый_символ ;
для ( я '=' 0 ; я < 8 ; я ++ ) {
первый_символ '=' доска [ список победителей [ я ] . ряд [ 0 ] ] ;

если ( ( первый_символ ! '=' 'ИКС' ) && ( первый_символ ! '=' 'О' ) ) {
флаг '=' ЛОЖЬ ;
продолжать ;
}
флаг '=' истинный ;
для ( дж '=' 0 ; дж < 3 ; дж ++ ) {
если ( первый_символ ! '=' доска [ список победителей [ я ] . ряд [ дж ] ] ) {
флаг '=' ЛОЖЬ ;
перерыв ;
}
}
если ( флаг ) {
игра началась '=' 0 ;
если ( первый_символ == 'ИКС' ) {
расчет << '------------------------' << конец ;
расчет << ' \ т Игрок, которого я выиграл» << конец ;
расчет << '------------------------' << конец ;
п1. выиграл ( ) ;
} еще {
п2. выиграл ( ) ;
если ( противкомпьютера ) {
расчет << '------------------------' << конец ;
расчет << ' \ т Компьютер ПОБЕДИЛ» << конец ;
расчет << '------------------------' << конец ;
} еще {
расчет << '------------------------' << конец ;
расчет << ' \ т Игрок II ВЫИГРАЛ' << конец ;
расчет << '------------------------' < 0 ) && ( игра началась ! '=' 0 ) ) {

если ( противкомпьютера )
рука == 1 ? компьютерВвод ( ) : игрокВвод ( п2 ) ;
еще
рука == 1 ? игрокВвод ( п1 ) : игрокВвод ( п2 ) ;
рука '=' ! рука ;
табло ( ) ;
checkWin ( п1,п2 ) ;
}
если ( пустойCount <= 0 ) {
расчет << '      -----------------------' << конец ;
расчет << ' \ т Нет ПОБЕДИТЕЛЯ» << конец ;
расчет << '      -----------------------' << конец ;
}
расчет << конец ;
расчет <> матч-реванш ;
если ( ( матч-реванш == 'И' ) || ( матч-реванш == 'и' ) ) {
нагревать ( ) ;
играть ( п1,п2 ) ;
}

}
пустота displayScore ( Игрок & п1, Игрок & п2 ) {
расчет << конец ;
расчет << ' \ т СЧЕТ: \ т ' ;
если ( противкомпьютера )
расчет << «Игрок I:» << п1. getScore ( ) << ' \ т Компьютер: ' << п2. getScore ( ) << конец ;
еще
расчет << «Игрок I:» << п1. getScore ( ) << ' \ т Игрок 2: ' << п2. getScore ( ) << конец ;
}

общественный :
Игра ( ) : пустойCount { 0 } , игра началась { 1 } , противКомпьютера { 0 } {
нагревать ( ) ;
список победителей [ 0 ] . ряд '=' новый интервал [ 3 ] { 0 , 1 , 2 } ;
список победителей [ 1 ] . ряд '=' новый интервал [ 3 ] { 3 , 4 , 5 } ;
список победителей [ 2 ] . ряд '=' новый интервал [ 3 ] { 6 , 7 , 8 } ;
список победителей [ 3 ] . ряд '=' новый интервал [ 3 ] { 0 , 3 , 6 } ;
список победителей [ 4 ] . ряд '=' новый интервал [ 3 ] { 1 , 4 , 7 } ;
список победителей [ 5 ] . ряд '=' новый интервал [ 3 ] { 2 , 5 , 8 } ;
список победителей [ 6 ] . ряд '=' новый интервал [ 3 ] { 0 , 4 , 8 } ;
список победителей [ 7 ] . ряд '=' новый интервал [ 3 ] { 2 , 4 , 6 } ;
}

пустота нагревать ( ) {
игра началась '=' 1 ;

пустойCount '=' 0 ;
шранд ( время ( 0 ) ) ;
для ( size_t я '=' 0 ; я < 10 ; я ++ ) {
пустойиндекс [ я ] '=' 0 ;
доска [ я ] '=' ( я + 1 ) + '0' ;
пустойCount ++ ;
}
пустойCount -- ;
}

пустота один игрокИгра ( ) {
//Создание игрока
Игрок п ( «Игрок I» ) ;
Игрок С ( «Компьютер» ) ;
расчет << '       -----------------------' << конец ;
расчет << ' \ т Игрок I: Х \ т Компьютер: О' << конец ;
расчет << '       -----------------------' << конец ;
расчет << конец ;
противкомпьютера '=' 1 ;
играть ( в, р ) ;

}

пустота дваИгрокИгра ( ) {
//Создание игрока
Игрок п ( «Игрок I» ) ;
Игрок С ( «Игрок II» ) ;
расчет << '       -----------------------' << конец ;
расчет << ' \ т Игрок I: Х \ т Игрок II: О' << конец ;
расчет << '       -----------------------' << конец ;
расчет << конец ;
противкомпьютера '=' 0 ;
играть ( в, р ) ;
}
} ;

интервал основной ( )
{
интервал ч ;

пока ( 1 ) {
расчет << '      ----------МЕНЮ----------' << конец ;
расчет << ' \ т 1. Игра для 1 игрока» << конец ;
расчет << ' \ т 2. Игра для двоих» << конец ;
расчет << ' \ т 3. Для выхода» << конец ;
расчет << '      ----------' << конец ;
расчет << конец ;
расчет << ' \ т Выберите вариант' <> ч ;
выключатель ( ч ) {
случай 1 : {
Игра * игра '=' новый Игра ;
игра - > нагревать ( ) ;
игра - > один игрокИгра ( ) ;
}
перерыв ;
случай 2 : {
Игра * игра '=' новый Игра ;
игра - > нагревать ( ) ;
игра - > дваИгрокИгра ( ) ;
}
перерыв ;
случай 3 :
возвращаться 0 ;
по умолчанию :
расчет << «Упс, неверный вариант! ПОПРОБУЙТЕ ЕЩЕ РАЗ» ;
}

}
возвращаться 0 ;
}

Это полный код для выполнения игры «крестики-нолики», в которую можно играть в двух режимах: с компьютером или с человеком. Это универсальный код, включающий все возможные команды. Когда пользователь вводит уже занятую позицию, он не перезаписывает эту позицию и считает этот ход недействительным.

До сих пор первый игрок выбрал первый ящик, а затем на следующем ходу компьютер отметил шестой ящик:

Оба игрока до сих пор выбрали два ящика, и на следующем ходу игрок I выбирает седьмой ящик, в результате чего создается последовательный вертикальный узор:

Пользователь решает использовать компьютер для игры, поэтому после трех ходов пользователь выигрывает у компьютера, и к счету игрока 1 добавляется один счет. После окончания первого матча компилятор запрашивает матч-реванш. Пользователь выбирает из вариантов и программа возвращается в основной раздел. После выбора третьего варианта компилятор начинает выполнение кода.

Заключение

Текстовые игры используют текстовые символы и интерфейс командной строки для взаимодействия с игроком. У них нет графических изображений, звуков и анимации. Пользователь вводит команду через окно консоли. Удобная текстовая игра «Крестики-нолики» создана с использованием C++. Он использует различные команды для создания игры, в которую можно играть как с компьютером, так и с другим игроком.