Проект "Создание игры "Tic Tac Toe" на C++"
Итоговый индивидуальный проект по информатике на тему "Создание игры "Tic Tac Toe" на C++" содержит информацию по 9 классу об основах языка программирования C++, среди которых можно назвать работу с функциями, классами, конструкторами. Учащимися была разработана полноценная игра ‘Tic-Tac-Toe’, позволяющая двум игрокам соревноваться друг с другом используя доску размером 3x3.
В процессе проведения исследовательской работы по информатике на тему «Создание игры "Tic Tac Toe" на C++» обучающиеся 9 класса сделали анимацию хода игроков с отображением ходов на экране, а также была создана система подсчета очков, что облегчает определение победителя игры по количеству набранных очков.
Подробнее о работе:
Содержание готового индивидуального проекта по информатике «Создание игры "Tic Tac Toe" на C++» отражает выводы учениц 9 класса о том, что разработанная ими игра по сути достаточно проста, но при этом очень увлекательна, также она поможет закрепить полученные знания и одновременно приобрести новые навыки в программирования. В итоге проекта имеет место полноценная, хорошо работающая игра.
Оглавление
Введение
- Псевдокод
- Разработка кода
Заключение
Введение
На сегодняшний день существует множество языков программирования, с помощью которых программисты могут решить любую задачу.
C++ - один из самых известных и востребованных языков по всему миру. На нем работают миллионы программистов. С помощью C++ создается множество различных игр.
Первые версии языка C++ появились в начале 1980-х годов благодаря датскому программисту Бьерну Страуструпу. В 1985 вышло первое издание «Языка программирования C++», обеспечивающее первое описание этого языка.
Перечислим несколько причин, почему разработчики игр выбирают язык C++:
- Производительность. Грамотно написанный, рабочий код работает впечатляюще быстро.
- Универсальность. Он кроссплатформенный и подходит для любых целей.
- Гибкость. C++ поддерживает различные стили программирования (процедурное программирование, абстракцию данных, объектно-ориентированное программирование).
В нашей работе речь пойдет о создании игры “Tic-Tac-Toe" на языке C++.
Цель работы: узнать, возможно ли создать школьнику игру на C++, а также выявить сложности написания кода.
Задача: создать рабочий код на языке программирования C++.
Псевдокод
Для облегчения главной задачи - написания кода - мы решили написать псевдокод, план действий программы:
- Вывод правил игры на экран;
- Создание и отображение пустого поля;
- Определение, кто будет ходить первым;
- Пока никто не победил и не наступила ничья:
- Объявление победителя или ничьи.
4.1. Если ход пользователя: получение хода пользователя, обновление игровое поле;
4.2. Иначе: вычисление хода компьютера, обновление игрового поля;
4.3. Отображение игрового поля;
Разработка кода
#include
using namespace std;
char X = 'X', O = '0', NO_ONE = 'N', EMPTY = ' ', DRAW = 'D';
int human_score = 0, computer_score = 0;
void instruction()
{
cout << "Welcome to the game where you will bravely fight with me!\n";
cout << "I'm a computing machine, but you can just call me Robo =)\n";
cout << "You can make your move by entering a number from 0 to 8. This number will mean the number of the cell where you want to go.\n\n";
cout << "0 | 1 | 2\n";
cout << "---------\n";
cout << "3 | 4 | 5\n";
cout << "---------\n";
cout << "6 | 7 | 8\n\n";
cout << "Let the fun begin!\n\n";
}
int ask_number(string s, int high, int low)
{
int number;
do{
cout << s << " (" << low << " - " << high << "): ";
cin >> number;
} while(number > high || number < low);
return number;
}
char ask(string s)
{
char answer;
cout << s << "(Y/N): ";
cin >> answer;
while(answer != 'Y' && answer != 'N') {
cout << "Enter 'Y' or 'N': ";
cin >> answer;
}
return answer;
}
char humanChoice()
{
char fi = ask("Do you want to make the first move?");
if(fi == 'Y'){
cout << "Okay, get started!\n";
return X;
}
else {
cout << "Thanks for giving me this opportunity! I will go first.\n";
return O;
}
}
char opponent(char letter)
{
if(letter == X)
return O;
else
return X;
}
void display(vector
{
cout << "\n\t" << board[0] << " | " << board[1] << " | " << board[2];
cout << "\n\t---------";
cout << "\n\t" << board[3] << " | " << board[4] << " | " << board[5];
cout << "\n\t---------";
cout << "\n\t" << board[6] << " | " << board[7] << " | " << board[8];
cout << "\n\n";
}
char winner(vector
{
int WIN_ROWS[8][3] = {{0, 1, 2},
{3, 4, 5},
{6, 7, 8},
{0, 3, 6},
{1, 4, 7},
{2, 5, 8},
{0, 4, 8},
{2, 4, 6}};
for(int row = 0; row < 8; row++){
if(board[WIN_ROWS[row][0]] != EMPTY && board[WIN_ROWS[row][1]] == board[WIN_ROWS[row][0]] && board[WIN_ROWS[row][2]] == board[WIN_ROWS[row][0]]){
return board[WIN_ROWS[row][0]];
}
if(count(board.begin(), board.end(), EMPTY) == 0){
return DRAW;
}
}
return NO_ONE;
}
bool is_legal(int step, const vector
{
return (board[step] == EMPTY);
}
int human_move(const vector
{
int step = ask_number("Where will you move?", (board.size() - 1), 0);
while(!is_legal(step, board)){
cout << "This square is already occupied, try again!" << endl;
step = ask_number("Where will you move?", (board.size() - 1), 0);
}
return step;
}
int computer_move(vector
{
int step = 0;
bool found = false;
while(!found && step < board.size()){
if(is_legal(step, board)){
board[step] = computer;
found = winner(board) == computer;
board[step] = EMPTY;
}
if(!found) ++step;
}
if(!found){
step = 0;
char human = opponent(computer);
while(!found && step < board.size()) {
if(is_legal(step, board)){
board[step] = human;
found = winner(board) == human;
board[step] = EMPTY;
}
if(!found) ++step;
}
}
if(!found){
step = 0;
int i = 0;
const int BEST_MOVES[] = {4, 0, 2, 6, 8, 1, 3, 5, 7};
while(!found && i < board.size()){
step = BEST_MOVES[i];
if(is_legal(step, board)) found = true;
i++;
}
}
cout << "I want to take a number " << step << endl;
return step;
}
void okWinner(char winner, char computer, char human)
{
if(winner == computer){
cout << "This was expected =) A computer can still surpass a human!" << endl;
computer_score++;
}
else if(winner == human){
cout << "It can't be! I got distracted, let's do it again!";
human_score++;
}
else {
cout << "Ok, it's a tie.. You won't leave me next time! I'll give you and myself a point each, if you don't mind.";
human_score++;
computer_score++;
}
}
int main() {
int step;
int num = 9;
instruction();
cout << "Our score is: " << human_score << " - " << computer_score << endl;
do {
vector
char human = humanChoice();
char computer = opponent(human);
char turn = X;
display(board);
while(winner(board) == NO_ONE) {
if(turn == human){
step = human_move(board);
board[step] = human;
}
else{
step = computer_move(board, computer);
board[step] = computer;
}
display(board);
turn = opponent(turn);
}
okWinner(winner(board), computer, human);
cout << "Our score is: " << human_score << " - " << computer_score << endl;
} while(ask("Do you want to play again? ") != 'N');
return 0;
}
Заключение
В ходе выполнения итогового индивидуального проекта по информатике “Игра ‘Tic-Tac-Toe’ на языке программирования C++” мы реализовали все поставленные задачи и цели. Была разработана полноценная игра ‘Tic-Tac-Toe’, которая позволяет двум игрокам соревноваться друг с другом на доске 3x3. В ходе реализации проекта мы изучили основы языка программирования C++, такие как работа с функциями, классами, конструкторами.
Мы реализовали анимацию хода игроков и отображение их ходов на экране.
Кроме того, в рамках проекта мы создали система подсчета очков и определения победителя игры. Благодаря этому, игроки могут самостоятельно определять, кто победил в игре, основываясь на количестве набранных очков.
Мы успешно завершили индивидуальный проект по информатике. Разработанная игра "Tic-Tac-Toe" представляет собой простой, но увлекательный геймплей, который поможет закрепить полученные знания и приобрести новые навыки в области программирования. Результатом проекта стала полноценная, работающая игра.
Источники литературы
- Skillfactory Media: Кому и для чего нужен C++;
- Майкл Доусон: Изучаем C++ через программирование игр;
- C++ Википедия