Разработка игры «Крестики-нолики»

Автор работы: Пользователь скрыл имя, 30 Марта 2015 в 07:42, курсовая работа

Описание работы

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

Содержание работы

Введение
Введение в объектно-ориентированное программирование.
Интерфейс пользователя и Сценарии использования программы
Функциональные требования
Нефункциональные требования
Исключительные ситуации
Поэтапное описание создание кода игры
Заключение

Литература

Файлы: 1 файл

курсовая2.docx

— 263.95 Кб (Скачать файл)

 

Код программы в Приложение 6

 

Крестики нолики 4*4

  Изменения с первоначальным вариантом выделены красным

 

Код программы в Приложение 7

 

8. Заключение

 

В процессе выполнения курсовой работы были освоены и закреплены навыки объектно-ориентированного программирования.

Игра разработана для широкого круга пользователей, не требует подготовки и дополнительных знаний. Достоинство игры состоит в том, что она не занимает много места и не требует много оперативной памяти. Программный продукт довольно прост в использовании и не нуждается в установке дополнительных программ.

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9. Приложение

 

Приложение 1

         

Код:

#include <iostream>

int get_move(){// функция которая и будит рисовать доску                                                

    std::cout<<"Menu hodov: \n";//Меню Доска намирации клеток

    std::cout<<"-7-|-8-|-9-" << std::endl;//Доска намирации клеток

    std::cout<<"-4-|-5-|-6-" << std::endl;

    std::cout<<"-1-|-2-|-3-" << std::endl;

    std::cout<<"\n";//C помощью оператора \n    пропускается одна строка

 

   std::cout<< "Game board:" << std::endl;//Меню пустой доски

    std::cout<<"---|---|---" << std::endl;//Пустая доска

    std::cout<<"---|---|---" << std::endl;

    std::cout<<"---|---|---" << std::endl;

    std::cout<<" Vvod chisla ";

 

  int move;// Что бы получить вход пользователя создаётся переменная move

  std::cin >> move;//Просим что бы пользователь ввёл эту переменную (число)

while(move > 9 || move < 1){//Цикл  while  проверяет вход  который дал пользователь больше 9  (move > 9) или (|| ) вход меньше  1 (move < 1 ) 

  std::cout<<"Vvedite chislo ot 1 do 9:";//Если пользователь ввёл число меньше 1 и больше 9 то выводится на экран сообщение "Vvedite chislo ot 1 do 9:"

  std::cin >> move;//Запрашиваем с помощью std::cin >> у пользователя другой вход move(ввод числа от 1 до 9)

 

  }

  return move;//Возвращаем оператором return  значение  “move”

}

int main(){

    int move = get_move();//Вызывается функция

get_move()и помещается то что она вернет в переменную

    std::cout << "the move you intereted is: " << move << std::endl;//Пишется с помощью std::cout<< в окне сообщение "the move you intereted is: "

 return 0;

}

 

Приложение 2

 

КОД:

#include <iostream>

char board[9] = {'-', '-', '-', '-', '-', '-', '-', '-', '-'};//9 элементов ( '-')  char,  доски (board)

 

int get_move(){

     std::cout<<"Menu hodov: \n";

  std::cout<<"-7-|-8-|-9-" << std::endl;

  std::cout<<"-4-|-5-|-6-" << std::endl;

  std::cout<<"-1-|-2-|-3-" << std::endl;

  std::cout<<"\n";

 

  std::cout << "Game board:" << std::endl;

  std::cout << "-"<<board[6]<<"-|-"<<board[7]<<"-|-"<<board[8]<<"- \n";//Заменяется переменная стринг (-)  на переменную  “board[ ]” с номером клетки

  std::cout << "-"<<board[3]<<"-|-"<<board[4]<<"-|-"<<board[5]<<"- \n";//Переменные начинаются с нуля, поэтому вместо 1 пишется 0, вместо 2 пишется 1 и т.д.

  std::cout << "-"<<board[0]<<"-|-"<<board[1]<<"-|-"<<board[2]<<"- \n";

  std::cout << "\nVvod chisla: ";

 

  int move;

  std::cin >> move;

  while(move > 9 || move < 1 ||board[move-1] !=  '-'  ){   // Добавляется     ” ||board[move-1] !=  '-'   “   т.е.  board[move-1] (туда куда будит ставится знак) != (не равняется) '-' (пустышке)

  std::cout<<"Vvedite chislo ot (1 do 9):\n";

  std::cin >> move;

  }

  return move;

}

int main(){

    for(int i=0; i<9; i++){//Пишется простой цикл для 9 ходов

    int move = get_move();

    std::cout << "the move you intereted is: " << move << std::endl;

    if(i%2 == 0){//Если i по модулю 2 равняется 1, то это чётный ход,

    board[move-1]='X';//то тогда задаётся значение   ='X'

    }

    else{// Все остальные ходы будут нечётные,

    board[move-1]='0';//то тогда задаётся значение   ='О'

    }

    }

    return 0;

}

 

Приложение 3

 

КОД:

#include <iostream>

char board[9] = {};// Остаётся пустой массив потому,  что есть функция void clearboard()(почистить доску)  которая  очистит доску когда запустится main

 

void clearscreen(){// Очищает окно консоли, функция clearscreen ни чего не возвращает

     for(int i = 0; i<100; i++){// Цикл for который отсчитывает от 0 до 100 и при каждом повторении цикла

            std::cout<<std::endl;// цикла выводит на экран новую строчку

  }

}

void clearboard(){//эта функция очищает доску и ни чего не возвращает

    for(int i = 0; i<9; i++){// для этого заводится цикл for   (  for(int i = 0;  i<9;  i++) )  который в цикле проходит по всем 9-и ячейкам на доске

            board[i] = '-';// и board[i]  поставит туда  пустышку = '-‘

    }

}

void print_board(){//В созданную  функцию                                                                                                                       void print_board(){}

  std::cout << "-"<<board[6]<<"-|-"<<board[7]<<"-|-"<<board[8]<<"- \n";// переносится 4 строки:

  std::cout << "-"<<board[3]<<"-|-"<<board[4]<<"-|-"<<board[5]<<"- \n";//

  std::cout << "-"<<board[0]<<"-|-"<<board[1]<<"-|-"<<board[2]<<"- \n";//

}

int get_move(){

     std::cout<<"\nMenu hodov: \n";

  std::cout<<"-7-|-8-|-9-" << std::endl;

  std::cout<<"-4-|-5-|-6-" << std::endl;

  std::cout<<"-1-|-2-|-3-" << std::endl;

  std::cout<<"\n";

 

print_board();//и заменяются эти выводы print_board()                                                     

std::cout << "\nVvod chisla: ";

 

 int move;

  std::cin >> move;

  while(move > 9 || move < 1 || board[move-1]!= '-'){

  std::cout<<"Vvedite chislo ot (1 do 9):\n";

  std::cin >> move;

  }

  return move;

}

int main(){

    clearboard();// Это возвращает доску в своё изначальное состояние, для этого она устанавливается в начале main

    for(int i=0; i<9; i++){

           clearscreen();// функция clearscreen() в main ставится в цикл

           int move = get_move();

           std::cout << "the move you intereted is: " << move << std::endl;

           if(i%2 == 0){

                  board[move-1]='x';

    }

    else{

                  board[move-1]='0';

    }

}

std::cout << "the final board layout is: \n"// Прописывается вывод сообщения  “the final board layout is:"

print_board();//Используется функция чтобы ещё раз                                                          напечатать доску(board)

return 0;

}

 

Приложение 4

 

 КОД:

#include <iostream>

char board[9] = {};

 

void clearscreen(){// очищает окно консоли, функция clearscreen ни чего не возвращает.

     for(int i = 0; i<100; i++){

            std::cout<<std::endl;

  }

}

void clearboard(){//эта функция очищает доску и ни чего не возвращает

    for(int i = 0; i<9; i++){

            board[i] = '-';

    }

}

bool has_wonQ(char player){  //

  int wins[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 i = 0; i<8; i++){

           int count =0;

           for(int j = 0; j<3; j++){

               if(board[wins][i][j]] == player)

               count ++;

    }

    if(count = 3){

       return true;

    }

  }

  return false;

}

 

void print_board(){

  std::cout << "Game board:" << std::endl;

  std::cout << "-"<<board[6]<<"-|-"<<board[7]<<"-|-"<<board[8]<<"- \n";

  std::cout << "-"<<board[3]<<"-|-"<<board[4]<<"-|-"<<board[5]<<"- \n";

  std::cout << "-"<<board[0]<<"-|-"<<board[1]<<"-|-"<<board[2]<<"- \n";

}

int get_move(){

     std::cout<<"\nMenu hodov: \n";

  std::cout<<"-7-|-8-|-9-" << std::endl;

  std::cout<<"-4-|-5-|-6-" << std::endl;

  std::cout<<"-1-|-2-|-3-" << std::endl;

  std::cout<<"\n";

 

print_board();

std::cout << "\nVvod chisla: ";

 

 

  int move;

  std::cin >> move;

  while(move > 9 || move < 1 || board[move-1]!= '-'){

  std::cout<<"Vvedite chislo ot (1 do 9):\n";

  std::cin >> move;

  }

  return move;

}

int main(){

    clearboard();

    int turn = 0;

    while(!has_wonQ('x') && !has_wonQ('0')){

           clearscreen();

           int move = get_move();

           std::cout << "the move you intereted is: " << move << std::endl;

           if(turn%2 == 0){

                  board[move-1]='x';

    }

    else{

                  board[move-1]='0';

  }

  turn++;

}

std::cout << "the final board layout is: \n";

print_board();

 

    return

}

 

Приложение 5

 

#include <iostream>

char board[9] = {};

void clearscreen(){//Очищает окно консоли, функция clearscreen ни чего не возвращает

     for(int i = 0; i<100; i++){

            std::cout<<std::endl;

  }

}

void clearboard(){//Функция очищает доску и ни чего не возвращает

    for(int i = 0; i<9; i++){

            board[i] = '-';

    }

 

}

bool has_wonQ(char player){

  int wins[][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 i = 0; i<8; i++){

            int count = 0;

           for(int j = 0; j<3; j++){

               if(board[wins[i][j]] == player)

               count++;

    }

    if(count == 3){

       return true;

    }

  }

  return false;

}

void print_board(std::string indent){

  std::cout << "Game board:" << std::endl;

std::cout<<indent<<"-"<<board[6]<<"-|-"<<board[7]<<"-|-"<<board[8]<<"- \n";

std::cout<<indent<<"-"<<board[3]<<"-|-"<<board[4]<<"-|-"<<board[5]<<"- \n";

std::cout<<indent<<"-"<<board[0]<<"-|-"<<board[1]<<"-|-"<<board[2]<<"- \n";

}

int get_move(){

     std::cout<<"\nMenu hodov: \n";

  std::cout<<"-7-|-8-|-9-" << std::endl;

  std::cout<<"-4-|-5-|-6-" << std::endl;

  std::cout<<"-1-|-2-|-3-" << std::endl;

  std::cout<<"\n";

 

print_board(“”);

std::cout << "\nVvod chisla: ";

 

int move;

  std::cin >> move;

      while(move > 9 || move < 1 || board[move-1]!= '-'){

     while(move > 9 || move < 1 board[move-1]!= '-'  std::cout<<"Vvedite chislo ot (1 do 9):\n";

  std::cin >> move;

  }

  return move;

}

 char play_and_get_winner(){//Функция получить выигравшего

                            int turn = 1;

                           while(!has_wonQ('X') && !has_wonQ('0')){

           clearscreen();

           int move = get_move();// Ввод

           std::cout << "the final board layout is: \n";    // Печатается вход

              if(turn%2 == 1){// Выбор Х или О

              board[move-1]='X';

              if(has_wonQ('X')){

              std::cout <<"X,Pozdravlyau vi vuigrali!\n";

              return 'X';

          

      }

       else{

              board[move-1]='0';

              if(has_wonQ('0')){

              std::cout <<"Y,Pozdravlyau vi vuigrali!\n";

              return '0';

            

      }

    turn++;

    if(turn == 10){

    std::cout << "nechya\n";

    return 'D';

    }

  }

}

int main(){

clearboard();

std::cout << "the final board layout is: \n";

char winner = play_and_get_winner();

print_board("\t  ")

    return

}

 

Приложение 6

 

КОД:

#include <iostream>

char board[9] = {};

void clearscreen(){//Очищает окно консоли, функция clearscreen ни чего не возвращает

     for(int i = 0; i<100; i++){

            std::cout<<std::endl;

  }

}

void clearboard(){//эта функция очищает доску и ни чего не возвращает

    for(int i = 0; i<9; i++){

            board[i] = '-';

    }

 

}

bool has_wonQ(char player){

  int wins[][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 i = 0; i<8; i++){

            int count = 0;

           for(int j = 0; j<3; j++){

               if(board[wins[i][j]] == player)

               count++;

    }

    if(count == 3){

       return true;

    }

  }

  return false;

}

void print_board(std::string indent){

  std::cout << "Game board:" << std::endl;

std::cout<<indent<<"-"<<board[6]<<"-|-"<<board[7]<<"-|-"<<board[8]<<"- \n";

std::cout<<indent<<"-"<<board[3]<<"-|-"<<board[4]<<"-|-"<<board[5]<<"- \n";

std::cout<<indent<<"-"<<board[0]<<"-|-"<<board[1]<<"-|-"<<board[2]<<"- \n";

}

int get_move(){

     std::cout<<"\nMenu hodov: \n";

  std::cout<<"-7-|-8-|-9-" << std::endl;

  std::cout<<"-4-|-5-|-6-" << std::endl;

  std::cout<<"-1-|-2-|-3-" << std::endl;

  std::cout<<"\n";

 

print_board(“”);

std::cout << "\nVvod chisla: ";

 

int move;

  std::cin >> move;

      while(move > 9 || move < 1 || board[move-1]!= '-'){

     while(move > 9 || move < 1 board[move-1]!= '-'  std::cout<<"Vvedite chislo ot (1 do 9):\n";

  std::cin >> move;

  }

  return move;

}

 char play_and_get_winner(){// Функция получить выигравшего

                            int turn = 1;

                           while(!has_wonQ('X') && !has_wonQ('0')){

           clearscreen();

           int move = get_move();// Ввод

           std::cout << "the final board layout is: \n";                   // Печатается вход

              if(turn%2 == 1){// Выбор Х или О

              board[move-1]='X';

              if(has_wonQ('X')){

              std::cout <<"X,Pozdravlyau vi vuigrali!\n";

              return 'X';

          

      }

       else{

              board[move-1]='0';

              if(has_wonQ('0')){

              std::cout <<"Y,Pozdravlyau vi vuigrali!\n";

              return '0';

            

      }

    turn++;

    if(turn == 10){

    std::cout << "nechya\n";

    return 'D';

    }

  }

}

int main(){

    std::cout <<"Privetstvuyu\n\n";

    std::string reply = "y";

    while(reply == "y"){

                clearboard();

 //std::cout << "the final board layout is: \n";

      char winner = play_and_get_winner();

               print_board("\t  ");

      switch(winner){

      case 'X':

        x_wins++;

        break;

     case '0':

        o_wins++;

        break;

     case 'D':

        ties++;

        break;

    }

    std::cout << "\n\t*Winer statistic*\nPlayer X: " << x_wins

              << ", Player 0: "<<o_wins << " and Ties: "<<ties<<"\n\n";

Информация о работе Разработка игры «Крестики-нолики»