Создать игру, создание игр, конструктора игр, игровые движки, разработка игр, сделать игру
Приветствую Вас Гость · Вход · Регистрация  ·  Новые сообщения · Участники · Правила · Поиск · RSS
  • Страница 1 из 1
  • 1
Исходник крестики нолики с ботом
Na2a Дата: Среда, 26.09.2012, 23:25 | Сообщение # 1
Просмотр профиля: Na2a

Сообщений: [34]
biggrin Представляю Вам исходник моей консольной игры "Крестики - Нолики" написанную на С++.

Название игры: XvsO
Название команды (если нет команды то имя автора): Назарбек он же я
Среда разработки: C++ / CodeBlocks



Всё просто: старая добрая игра на консоли с мега умным ботом biggrin

САМА ИГРА: http://make-games.ru/forum/100-3323-1
ИСХОДНИК: http://rghost.ru/40594381
Код не прокомментирован полностью, т.к мне лень.
ИЛИ СРАЗУ КОД:
Code

#include <iostream>
#include <clocale>
#include <windows.h>
#include <time.h>
using namespace std;

char field[] = {'-', '-', '-', '-', '-', '-', '-', '-', '-'};

void SetColor(int text, int background)
{
      /* процедура для смены цвета шрифта */
      HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
      SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}

void printspace(int s) {
      /* для вывода пробелов (для центрироывния текста) */
      for(int i = 0; i < s; i++)
          cout << ' ';
}

void printfield() {
      /* выводим игровое поле */
      SetColor(14, 0);
      printspace(34); cout << '-' << field[0] << "-|-" << field[1] << "-|-" << field[2] << "-\n";
      printspace(34); cout << '-' << field[3] << "-|-" << field[4] << "-|-" << field[5] << "-\n";
      printspace(34); cout << '-' << field[6] << "-|-" << field[7] << "-|-" << field[8] << "-\n";
}

void clearfield() {
      /* очищаем поле после каждой игры */
      for(int i = 0; i < 9; i++)
          field[i] = char(i+49);
}

void clearscreen(int s) {
      for(int i = 0; i < s; i++)
          cout << endl;
}

void printlogo() {
      SetColor(7, 0);
      printspace(16); cout << " ##     ##    ##     ##  ######      #######  \n";
      printspace(16); cout << "  ##   ##     ##     ## ##    ##    ##     ## \n";
      printspace(16); cout << "   ## ##      ##     ## ##          ##     ## \n";
      SetColor(8, 0);
      printspace(16); cout << "    ###       ##     ##  ######     ##     ## \n";
      printspace(16); cout << "   ## ##       ##   ##        ##    ##     ## \n";
      printspace(16); cout << "  ##   ##       ## ##   ##    ##    ##     ## \n";
      printspace(16); cout << " ##     ##       ###    ######      #######  \n";
}

bool isWinner(char who) {
      if (field[0]==who && field[1]==who && field[2]==who) return true;
   if (field[3]==who && field[4]==who && field[5]==who) return true;
   if (field[6]==who && field[7]==who && field[8]==who) return true;
   if (field[0]==who && field[3]==who && field[6]==who) return true;
   if (field[1]==who && field[4]==who && field[7]==who) return true;
   if (field[2]==who && field[5]==who && field[8]==who) return true;
   if (field[0]==who && field[4]==who && field[8]==who) return true;
   if (field[2]==who && field[4]==who && field[6]==who) return true;
   return false;
}

int botMove() {
      if (field[4]=='5') return 5;
      for (int i = 0; i < 9; i++)
          if (field[i] == char(i+49)) {
              field[i] = 'O';
              if (isWinner('O'))
                  return i+1;
              else
                  field[i] = char(i+49);

              field[i] = 'X';
              if (isWinner('X'))
                  return i+1;
              else
                  field[i] = char(i+49);
          }
      for (int i = 0; i < 9; i++)
          if (field[i] == char(i+49))
              return i+1;
}

void print() {
      system("cls");
      clearscreen(2);
      printlogo();
      clearscreen(2);
      printfield();
      clearscreen(1);
}

char play(int h) {
      int turn = 1; // 0 - bot, 1 - player
      int move;
      char a = 'X', b = 'O';
      if (h == 0) swap(a, b);
      while(1) {
          if (turn % 2 == h) {
              print();
              SetColor(12, 0);
              if (turn>1) {
                  printspace(30);
                  cout << "Бот поставил " << b << " на " << move << endl;
              }
              printspace(34);
              cout << "Ваш ход:  ";
              cin >> move;
              while(move > 9 || field[move-1]=='X' || field[move-1]=='O') {
                  print();
                  SetColor(12, 0);
                  printspace(15);
                  cout << "** Пожалуйста, введите коректное значение (1-9) **\n";
                  printspace(34);
                  cout << "Ваш ход:  ";
                  cin >> move;
              }
              field[move-1] = a;
              if (isWinner(a)) {
                  print();
                  printspace(35);
                  for(int i = 0; i < 400000000; i++)
                      if (i%100000000==0) cout<<'.';
                  SetColor(2, 0);
                  cout << "X победил!\n";
                  return a;
              }
          }
          else {
              print();
              SetColor(12, 0);
              if (turn>1) {
                  printspace(30);
                  cout << "Вы поставили " << a << " на " << move << endl;
              }
              printspace(35); cout << "Бот думает";
              for(int i = 0; i < 600000000; i++)
                  if (i%100000000==0) cout<<'.';
              cout << endl;
              move = botMove();
              field[move-1] = b;
              if (isWinner(b)) {
                  print();
                  printspace(33);
                  for(int i = 0; i < 400000000; i++)
                      if (i%100000000==0) cout<<'.';
                  SetColor(2, 0);
                  cout << "О победил!\n";
                  return b;
              }
          }
          turn++;
          if (turn == 10) {
              print();
              printspace(33);
              for(int i = 0; i < 400000000; i++)
                  if (i%100000000==0) cout<<'.';
              SetColor(2, 0);
              cout << "Ничья!\n";
              return 'D';
          }
      }
}

int main() {
      setlocale( LC_ALL, "Russian" );
      srand(time(0));
      int p_wins, b_wins, draws;
      p_wins = b_wins = draws = 0; // статистика
      char choice = 'y';
      int h = 0;
      while(choice == 'y') {
          clearfield();
          char winner;
          h = abs(h-1);
          winner = play(h);
          if (winner == 'D') draws++;
          if (winner == 'X') {
              if (h == 1) p_wins++;
              else b_wins++;
          }
          if (winner == 'O') {
              if (h == 0) p_wins++;
              else b_wins++;
          }
          SetColor(3, 0);
          printspace(32);
          cout << "Вы выиграли " << p_wins << " раз\n";
          printspace(32);
          cout << "Компьютер выиграл " << b_wins << " раз\n";
          printspace(32);
          cout << "Ничья была " << draws << " раз\n\n";
          SetColor(7, 0);
          printspace(32);
          cout << "Еще? y/n :";
          cin >> choice;
      }
      return 0;
}

Добавлено (26.09.2012, 23:25)
---------------------------------------------
Если есть вопросы, спрашиваем.


Назарбек

Сообщение отредактировал: Na2a - Среда, 26.09.2012, 23:23
Esimhan1996 Дата: Воскресенье, 23.06.2013, 20:29 | Сообщение # 2


Сообщений: [1]
Здравствуй, Я не понял как именно бот работает , сможешь объяснить?
ДядяВолк Дата: Пятница, 28.06.2013, 14:35 | Сообщение # 3


Сообщений: [1451]
Esimhan1996, у меня бот не очень умный. У меня он ищет место где он может выиграть. Если нету такой, то ищет место где он может проиграть и закрывает его. В другом случаи, он тупо ставит в рандомное место. smile

Добавлено (28.06.2013, 14:35)
---------------------------------------------
Ну вот, спалился biggrin

nelff Дата: Воскресенье, 12.05.2019, 12:50 | Сообщение # 4
Просмотр профиля: nelff

Сообщений: [1]
Хэй, вы тут ещё живы, автор?)
Gamershmeimer Дата: Суббота, 18.05.2024, 20:33 | Сообщение # 5
Просмотр профиля: Gamershmeimer

Сообщений: [1]
Надеюсь автор еще жив и здоров:) Хочу ему сказать спасибо за многие интересные решения, которые помогли и мне сделать свой сайтик:)   
Удачи в разработке и в жизни!  cool


Люблю игры, все просто:)
  • Страница 1 из 1
  • 1
Поиск:

При полном или частичном копировании материалов сайта ссылка на Make-Games.ru обязательна. Make-Games.ru © 2008 - 2024 Хостинг от uCoz
Топ Разработка игр