Форум программистов, компьютерный форум CyberForum.ru

Tic-tac-toe на С++ (крестики нолики) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
akosh12345
0 / 0 / 0
Регистрация: 14.05.2010
Сообщений: 11
06.10.2010, 22:30     Tic-tac-toe на С++ (крестики нолики) #1
Доброго времени суток уважаемые коллеги - программисты. Я начинающий программист. В С++ только недавно. Можно сказать, что это приложение мой первый серьезный проект на это языке. На днях устраивался на работу. Что бы проверить мои знания, они дали мне задание - написать крестики нолики на С++. 2 недели я сначала изучал синтаксис языка, и буквально за 2-3 дня написал эту игру. Хотелось бы вас попросить, уважаемые программисты, что вы посмотрели на алгоритм вашимы опытными глазами и предложили мнеболее эффективный алгоритм. Мне кажется есть более простой алгоритм.Прикрепляю мой проект. Заранее спасибо.
Вложения
Тип файла: rar 1vsCom Tic-tac-toe.rar (370.8 Кб, 178 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2010, 22:30     Tic-tac-toe на С++ (крестики нолики)
Посмотрите здесь:

C++ Крестики нолики
C++ Крестики нолики на С
Крестики-нолики C++
C++ Крестики-нолики
C++ крестики-нолики
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
06.10.2010, 22:31     Tic-tac-toe на С++ (крестики нолики) #2
Код в студию. Качать лень.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
06.10.2010, 22:38     Tic-tac-toe на С++ (крестики нолики) #3
http://ru.wikipedia.org/wiki/Крестики-нолики
akosh12345
0 / 0 / 0
Регистрация: 14.05.2010
Сообщений: 11
07.10.2010, 09:58  [ТС]     Tic-tac-toe на С++ (крестики нолики) #4
//---------------------------------------------------------------------------

#include <vcl.h>
#include <math.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "PERFGRAP"
#pragma resource "*.dfm"

TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------


int Mas[3][3] = {90,80,70,
60,50,40,
30,20,10};
bool cont = true; // если false, программа не работает
short run=0; // шаг игры
short AY,AX; // координаты ячейки массива, в которой ИИ должен поставить О
bool TekWinO; // если true; значит ИИ будует защищаться, если нет ИИ будет отаковать



void ControlMas(void);

void ManMade(void);

void ShowXO(void);

void WinX(int L);

void WinO(int i);

void WinO(int i) // ПРОЦЕДУРА ОПРЕДЕЛЯЕТ КОРРЕКТНЫЙ ХОД ИИ НА 4 ШАГЕ ИГРЫ
{
switch(i)
{
case 2:
bool tekend = false; // true - тогда ситуация попадает в один из случаев, если нет тогда !!!последний случай!!!
// Действие ИИ, когда есть возможность вилки, как на картинке
if( ((Mas[0][0] == Mas[2][2]) & (Mas[0][0] == 1)) | ((Mas[0][2] == Mas[2][0]) & (Mas[0][2] == 1)))
{
randomize();
int r = random(4); // |_x_|_ _|_ _|
if(r==0) Mas[0][1] = 0; // |_ _|_o_|_ _|
if(r==1) Mas[1][0] = 0; // |_ _|_ _|_x_|
if(r==2) Mas[2][1] = 0; //
if(r==3) Mas[1][2] = 0;
ShowXO();
tekend = true;

}
// Действие ИИ, когда нету просчета выигрыша или проигрыша, то есть когда нельзя помешать сопернику и сам тоже не сможешь выигрыть
if( (Mas[0][0] != Mas[2][2]) & (Mas[0][0] != 90) & (Mas[2][2] != 10))
{
randomize(); // |_x_|_ _|_ _|
int r = random(2); // |_ _|_x_|_ _|
if(r==0) Mas[0][2] = 0; // |_ _|_ _|_o_|
if(r==1) Mas[2][0] = 0; //
ShowXO();
tekend = true;
}

if( (Mas[0][2] != Mas[2][0]) & (Mas[0][2] != 70) & (Mas[2][2] != 30))
{
randomize(); // |_ _|_ _|_x_|
int r = random(2); // |_ _|_x_|_ _|
if(r==0) Mas[0][0] = 0; // |_o_|_ _|_ _|
if(r==1) Mas[2][2] = 0;
ShowXO();
tekend = true;
}


// Дейские ИИ когда, ситуация как на рисунке ниже.
if( (Mas[0][0] == 90) & (Mas[0][2] == 70) & (Mas[2][0] == 30) & (Mas[2][2] == 10))
{
if( (Mas[1][0] == Mas[0][1]) & (Mas[1][0] == 1))
{
randomize(); // |_ _|_х_|_ _|
int r = random(2); // |_х_|_о_|_ _|
if(r==0) Mas[2][0] = 0; // |_ _|_ _|_ _|
if(r==1) Mas[0][2] = 0;
ShowXO();
tekend = true;

}
if( (Mas[0][1] == Mas[1][2]) & (Mas[0][1] == 1))
{
randomize();
int r = random(2); // |_ _|_х_|_ _|
if(r==0) Mas[0][0] = 0; // |_ _|_о_|_х_|
if(r==1) Mas[2][2] = 0; // |_ _|_ _|_ _|
ShowXO();
tekend = true;
}
if( (Mas[1][2] == Mas[2][1]) & (Mas[1][2] == 1))
{
randomize();
int r = random(2); // |_ _|_ _|_ _|
if(r==0) Mas[2][0] = 0; // |_ _|_о_|_х_|
if(r==1) Mas[0][2] = 0; // |_ _|_х_|_ _|
ShowXO();
tekend = true;
}
if( (Mas[2][1] == Mas[1][0]) & (Mas[1][0] == 1))
{
randomize();
int r = random(2); // |_ _|_ _|_ _|
if(r==0) Mas[0][0] = 0; // |_х_|_о_|_ _|
if(r==1) Mas[2][2] = 0; // |_ _|_х_|_ _|
ShowXO();
tekend = true;
}

// Дейские ИИ, когда ситуация, как на картинке ниже
if( ((Mas[0][1]==Mas[2][1]) & (Mas[0][1]==1)) | ((Mas[1][0]==Mas[1][2]) & (Mas[0][1]==1)) )
{
randomize();
int r = random(4); // |_ _|_x_|_ _|
if(r==0) Mas[0][0] = 0; // |_ _|_o_|_ _|
if(r==1) Mas[0][2] = 0; // |_ _|_x_|_ _|
if(r==2) Mas[2][0] = 0; //
if(r==3) Mas[2][2] = 0; // |_ _|_ _|_ _|
ShowXO(); // |_x_|_o_|_x_|
tekend = true; // |_ _|_ _|_ _|
}

}

// Последний случай
if(tekend == false)
{
if((Mas[0][0] == 90) & (Mas[2][2] == 10))
{
randomize();
int r = random(2); // |_[]_|_x_|_ _|
if(r==0) Mas[0][0] = 0; // |_ _|_o_|_ _|
if(r==1) Mas[2][2] = 0; // |_ x|_ _|_[]_|
ShowXO(); // [] = свободные
}

if((Mas[0][2] == 70) & (Mas[2][0] == 30))
{
randomize();
int r = random(2); // |_x_|_ _|_[]_|
if(r==0) Mas[0][2] = 0; // |_ _|_o_|_ _|
if(r==1) Mas[2][0] = 0; // |_[]_|_x_|_ _|
ShowXO(); // [] = свободные
}
}
break;
}

}



void __fastcall TForm1::Image1Click(TObject *Sender)
{

// Проверяю пустой ли Image и не закончилась ли игра
if((Image1->Picture->Bitmap->Empty != false) & (cont != false))
{
Mas[0][0] = 1; // Заполняю массив
ShowXO(); // вывожу на экран текущее положение Х и О
run++; // увеличиваю переменную шага игры на 1
ControlMas(); // Проверяю, кто - нибудь выиграл, если да тогда игра останавливается
if(cont!=false)ManMade(); // ход делает ИИ, если игра не окончена
ControlMas(); // Проверяю, кто - нибудь выиграл, если да тогда игра останавливается
}


}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image2Click(TObject *Sender)
{
// Проверяю пустой ли Image и не закончилась ли игра
if((Image2->Picture->Bitmap->Empty != false) & (cont != false))
{
Mas[0][1] = 1; // Заполняю массив
ShowXO(); // вывожу на экран текущее положение Х и О
run++; // увеличиваю переменную шага игры на 1
ControlMas(); // Проверяю, кто - нибудь выиграл, если да тогда игра останавливается
if(cont!=false) ManMade(); // ход делает ИИ, если игра не окончена
ControlMas(); // Проверяю, кто - нибудь выиграл, если да тогда игра останавливается
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image3Click(TObject *Sender)
{
// Проверяю пустой ли Image и не закончилась ли игра
if((Image3->Picture->Bitmap->Empty != false) & (cont != false))
{
Mas[0][2] = 1; // Заполняю массив
ShowXO(); // вывожу на экран текущее положение Х и О
run++; // увеличиваю переменную шага игры на 1
ControlMas(); // Проверяю, кто - нибудь выиграл, если да тогда игра останавливается
if(cont!=false) ManMade(); // ход делает ИИ, если игра не окончена
ControlMas(); // Проверяю, кто - нибудь выиграл, если да тогда игра останавливается
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image4Click(TObject *Sender)
{
// Проверяю пустой ли Image и не закончилась ли игра
if((Image4->Picture->Bitmap->Empty != false) & (cont != false))
{
Mas[1][0] = 1; // Заполняю массив
ShowXO(); // вывожу на экран текущее положение Х и О
run++; // увеличиваю переменную шага игры на 1
ControlMas(); // Проверяю, кто - нибудь выиграл, если да тогда игра останавливается
if(cont!=false) ManMade(); // ход делает ИИ, если игра не окончена
ControlMas(); // Проверяю, кто - нибудь выиграл, если да тогда игра останавливается
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image5Click(TObject *Sender)
{
// Проверяю пустой ли Image и не закончилась ли игра
if((Image5->Picture->Bitmap->Empty != false) & (cont != false))
{
Mas[1][1] = 1; // Заполняю массив
ShowXO(); // вывожу на экран текущее положение Х и О
run++; // увеличиваю переменную шага игры на 1
ControlMas(); // Проверяю, кто - нибудь выиграл, если да тогда игра останавливается
if(cont!=false) ManMade(); // ход делает ИИ, если игра не окончена
ControlMas(); // Проверяю, кто - нибудь выиграл, если да тогда игра останавливается
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image6Click(TObject *Sender)
{
// Проверяю пустой ли Image и не закончилась ли игра
if((Image6->Picture->Bitmap->Empty != false) & (cont != false))
{
Mas[1][2] = 1; // Заполняю массив
ShowXO(); // вывожу на экран текущее положение Х и О
run++; // увеличиваю переменную шага игры на 1
ControlMas(); // Проверяю, кто - нибудь выиграл, если да тогда игра останавливается
if(cont!=false) ManMade(); // ход делает ИИ, если игра не окончена
ControlMas(); // Проверяю, кто - нибудь выиграл, если да тогда игра останавливается
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image7Click(TObject *Sender)
{
// Проверяю пустой ли Image и не закончилась ли игра
if((Image7->Picture->Bitmap->Empty != false) & (cont != false))
{
Mas[2][0] = 1; // Заполняю массив
ShowXO(); // вывожу на экран текущее положение Х и О
run++; // увеличиваю переменную шага игры на 1
ControlMas(); // Проверяю, кто - нибудь выиграл, если да тогда игра останавливается
if(cont!=false) ManMade(); // ход делает ИИ, если игра не окончена
ControlMas(); // Проверяю, кто - нибудь выиграл, если да тогда игра останавливается
}

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image8Click(TObject *Sender)
{
// Проверяю пустой ли Image и не закончилась ли игра
if((Image8->Picture->Bitmap->Empty != false) & (cont != false))
{
Mas[2][1] = 1; // Заполняю массив
ShowXO(); // вывожу на экран текущее положение Х и О
run++; // увеличиваю переменную шага игры на 1
ControlMas(); // Проверяю, кто - нибудь выиграл, если да тогда игра останавливается
if(cont!=false) ManMade(); // ход делает ИИ, если игра не окончена
ControlMas(); // Проверяю, кто - нибудь выиграл, если да тогда игра останавливается
}

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image9Click(TObject *Sender)
{
// Проверяю пустой ли Image и не закончилась ли игра
if((Image9->Picture->Bitmap->Empty != false) & (cont != false))
{
Mas[2][2] = 1; // Заполняю массив
ShowXO(); // вывожу на экран текущее положение Х и О
run++; // увеличиваю переменную шага игры на 1
ControlMas(); // Проверяю, кто - нибудь выиграл, если да тогда игра останавливается
if(cont!=false) ManMade(); // ход делает ИИ, если игра не окончена
ControlMas(); // Проверяю, кто - нибудь выиграл, если да тогда игра останавливается
}
}


void WinX(int L) // Процедура определения, выгрыша,
// если L = 1, то я смотрю нынешнее положение Х, и предотвращяю его выигрыш
// если L = 0, то процедура выигрывает игру, то есть ИИ побеждает
{
bool OneTek = false;
TekWinO = false;

// |_L_|_ _|_*_|
// |_ _|_*_|_ _|
// ПРОВЕРКА САМОГО ВЕРХНЕГО ЛЕВОЙ ПОЛОЖЕНИЕ СО ВСЕМИ ВОЗМОЖНЫМИ ВАРИАНТАМИ, ТО ЕСТЬ // |_*_|_ _|_*_|
if(OneTek==false) // если L = 1 -> я предотвращаю выигрыш Х
{ // если L = 0 -> то выигрывает ИИ
if( ((Mas[0][0] == Mas[0][2]) & (Mas[0][0] == L)) & ((Mas[0][1]!=1) & (Mas[0][1]!=0)) )
{Mas[0][1] = 0; OneTek=true; };
}

if(OneTek==false)
if( ((Mas[0][0] == Mas[2][2]) & (Mas[0][0] == L)) & ((Mas[1][1]!=1) & (Mas[1][1]!=0)) )
{Mas[1][1] = 0; OneTek=true; };

if(OneTek==false)
if( ((Mas[0][0] == Mas[2][0]) & (Mas[0][0] == L)) & ((Mas[1][0]!=1) & (Mas[1][0]!=0)) )
{Mas[1][0] = 0; OneTek=true; };

if(OneTek==false)
if( ((Mas[0][0] == Mas[1][1]) & (Mas[0][0] == L)) & ((Mas[2][2]!=1) & (Mas[2][2]!=0)) )
{Mas[2][2] = 0; OneTek=true; };


// ПРОВЕРКА САМОГО ВЕРХНЕГО ПРАВОГО ПОЛОЖЕНИЕ СО ВСЕМИ ВОЗМОЖНЫМИ ВАРИАНТАМИ, ТО ЕСТЬ
if(OneTek==false) //
if( ((Mas[0][2] == Mas[2][2]) & (Mas[0][2] == L)) & ((Mas[1][2]!=1) & (Mas[1][2]!=0)) )
{Mas[1][2] = 0; OneTek=true; };
// |_ _|_ _|_L_|
if(OneTek==false) // |_ _|_*_|_ _|
if( ((Mas[0][2] == Mas[2][0]) & (Mas[0][2] == L)) & ((Mas[1][1]!=1) & (Mas[1][1]!=0)) ) // |_*_|_ _|_*_|
{Mas[1][1] = 0; OneTek=true; };

if(OneTek==false)
if( ((Mas[0][2] == Mas[1][1]) & (Mas[0][2] == L)) & ((Mas[2][0]!=1) & (Mas[2][0]!=0)) )
{Mas[2][0] = 0; OneTek=true; };



// ПРОВЕРКА САМОГО НИЖНЕГО ПРАВОГО ПОЛОЖЕНИЕ СО ВСЕМИ ВОЗМОЖНЫМИ ВАРИАНТАМИ, ТО ЕСТЬ
if(OneTek==false)
if( ((Mas[2][2] == Mas[1][1]) & (Mas[2][2] == L)) & ((Mas[0][0]!=1) & (Mas[0][0]!=0)) ) // |_ _|_ _|_ _|
{Mas[0][0] = 0; OneTek=true; }; // |_ _|_*_|_ _|
// |_*_|_ _|_L_|
if(OneTek==false)
if( ((Mas[2][2] == Mas[2][0]) & (Mas[2][2] == L)) & ((Mas[2][1]!=1) & (Mas[2][1]!=0)) )
{Mas[2][1] = 0; OneTek=true; };



// ПРОВЕРКА САМОГО НИЖНЕГО ЛЕВОГО ПОЛОЖЕНИЕ СО ВСЕМИ ВОЗМОЖНЫМИ ВАРИАНТАМИ, ТО ЕСТЬ
if(OneTek==false) // |_ _|_ _|_ _|
if( ((Mas[2][0] == Mas[1][1]) & (Mas[2][0] == L)) & ((Mas[0][2]!=1) & (Mas[0][2]!=0)) ) // |_ _|_*_|_ _|
{Mas[0][2] = 0; OneTek=true; }; // |_L_|_ _|_ _|

TekWinO = OneTek;
// TekWinO = true -> значит во время прохождения через функцию WinX(L) были внесени данные в массив, то есть сделан ход кем либо

for(int i=0; i<2; i++)
{
// ПРОВЕРКА ПО ГОРИЗОНТАЛИ
if(OneTek==false)
{
if( (Mas[0][i]==Mas[0][i+1]) & (Mas[0][i] == L) ) // // 1 раз 2 раз
{ // |_i_|_*_|_ _| |_ _|_i_|_*_|
if(i == 0) { if((Mas[0][2]!=1) & (Mas[0][2]!=0)) {Mas[0][2] = 0; TekWinO = true; break;} } // |_ _|_ _|_ _| |_ _|_ _|_ _|
else // |_ _|_ _|_ _| |_ _|_ _|_ _|
if( (Mas[0][0]!=1) & (Mas[0][0]!=0) ) {Mas[0][0] = 0; TekWinO = true; break;}
}
}

if(OneTek==false)
{ // 1 раз 2 раз
if( (Mas[1][i]==Mas[1][i+1]) & (Mas[1][i] == L) ) // |_ _|_ _|_ _| |_ _|_ _|_ _|
{ // |_i_|_*_|_ _| |_ _|_i_|_*_|
if(i == 0) {if((Mas[1][2]!=1) & (Mas[1][2]!=0)) {Mas[1][2] = 0; TekWinO = true; break;}} // |_ _|_ _|_ _| |_ _|_ _|_ _|
else
if( (Mas[1][0]!=1) & (Mas[1][0]!=0) ) {Mas[1][0] = 0; TekWinO = true; break;}
}
}

if(OneTek==false)
{ // 1 раз 2 раз
if( (Mas[2][i]==Mas[2][i+1]) & (Mas[2][i] == L) ) // |_ _|_ _|_ _| |_ _|_ _|_ _|
{ // |_ _|_ _|_ _| |_ _|_ _|_ _|
if(i == 0) { if((Mas[2][2]!=1) & (Mas[2][2]!=0)) {Mas[2][2] = 0; TekWinO = true; break;} } // |_i_|_*_|_ _| |_ _|_i_|_*_|
else
if( (Mas[2][0]!=1) & (Mas[2][0]!=0) ) {Mas[2][0] = 0;TekWinO = true; break;}
}
}

// по вертикали
if(OneTek==false)
{ // 1 раз 2 раз
if( (Mas[i][0]==Mas[i+1][0]) & (Mas[i][0] == L) ) // |_i_|_ _|_ _| |_ _|_ _|_ _|
{ // |_*_|_ _|_ _| |_i_|_ _|_ _|
if(i == 0) { if((Mas[2][0]!=1) & (Mas[2][0]!=0)) {Mas[2][0] = 0; TekWinO = true; break;} } // |_ _|_ _|_ _| |_*_|_ _|_ _|
else
if( (Mas[0][0]!=1) & (Mas[0][0]!=0) ) {Mas[0][0] = 0;TekWinO = true; break;}
}
}

if(OneTek==false)
{ // 1 раз 2 раз
if( (Mas[i][1]==Mas[i+1][1]) & (Mas[i][1] == L) ) // |_ _|_i_|_ _| |_ _|_ _|_ _|
{ // |_ _|_*_|_ _| |_ _|_i_|_ _|
if(i == 0) { if((Mas[2][1]!=1) & (Mas[2][1]!=0)) {Mas[2][1] = 0; TekWinO = true; break;} } // |_ _|_ _|_ _| |_ _|_*_|_ _|
else
if( (Mas[0][1]!=1) & (Mas[0][1]!=0) ) {Mas[0][1] = 0; TekWinO = true; break;}
}
}

if(OneTek==false) // 1 раз 2 раз
{ // |_ _|_ _|_i_| |_ _|_ _|_ _|
if( (Mas[i][2]==Mas[i+1][2]) & (Mas[i][2] == L) ) // |_ _|_ _|_*_| |_ _|_ _|_i_|
{ // |_ _|_ _|_ _| |_ _|_ _|_*_|
if(i == 0) { if((Mas[2][2]!=1) & (Mas[2][2]!=0)) {Mas[2][2] = 0;TekWinO = true; break;} }
else
if( (Mas[0][2]!=1) & (Mas[0][2]!=0) ) {Mas[0][2] = 0; TekWinO = true;break;}
}
}
}
if(TekWinO!=false) ShowXO(); // если изменения произошли, вывод массива на экран
}
//--------------------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------

void ControlMas() // ПРОЦЕДУРА, КОТОРАЯ ОПРЕДЕЛЯЕТ, КТО-НИБУДЬ ВЫИГРАЛ НА ДАННЫЙ МОМЕНТ
// ЕСЛИ ДА -> ТОГДА ВЫВОДИТ СООТВЕТСТВУЮЩУЮ СЕРИЮ КАРТИНОК И ЗАВЕРШАЕТ ИГРУ, ТО ЕСТЬ НЕ ДАЕТ ДЕЛАТЬ ХОД
{
// Обработка первой строки массива (по горизонтали)
if((Mas[0][0] == Mas[0][1]) & (Mas[0][0] == Mas[0][2]))
if(Mas[0][0]==1)
{ // Вывод картинок для Х
Form1->Image1->Picture->LoadFromFile("Lx.bmp");
Form1->Image2->Picture->LoadFromFile("Lx.bmp");
Form1->Image3->Picture->LoadFromFile("Lx.bmp");
cont = false;
Form1->Caption = "!!!You WIN!!!";
}
else
{ // Вывод картинок для О
Form1->Image1->Picture->LoadFromFile("Lo.bmp");
Form1->Image2->Picture->LoadFromFile("Lo.bmp");
Form1->Image3->Picture->LoadFromFile("Lo.bmp");
cont = false;
Form1->Caption = "!!!You LOSE!!!";
}

// обработка второй строки массива (по горизонтали)
if((Mas[1][0] == Mas[1][1]) & (Mas[1][0] == Mas[1][2]))
if(Mas[1][0]==1)
{ // Вывод картинок для Х
Form1->Image4->Picture->LoadFromFile("Lx.bmp");
Form1->Image5->Picture->LoadFromFile("Lx.bmp");
Form1->Image6->Picture->LoadFromFile("Lx.bmp");
cont = false;
Form1->Caption = "!!!You WIN!!!";
}
else
{ // Вывод картинок для О
Form1->Image4->Picture->LoadFromFile("Lo.bmp");
Form1->Image5->Picture->LoadFromFile("Lo.bmp");
Form1->Image6->Picture->LoadFromFile("Lo.bmp");
cont = false;
Form1->Caption = "!!!You LOSE!!!";
}

// Обработка третьей строки массива (по горизонтали)
if((Mas[2][0] == Mas[2][1]) & (Mas[2][0] == Mas[2][2]))
if(Mas[2][0]==1)
{ // Вывод картинок для Х
Form1->Image7->Picture->LoadFromFile("Lx.bmp");
Form1->Image8->Picture->LoadFromFile("Lx.bmp");
Form1->Image9->Picture->LoadFromFile("Lx.bmp");
cont = false;
Form1->Caption = "!!!You WIN!!!";
}
else
{ // Вывод картинок для О
Form1->Image7->Picture->LoadFromFile("Lo.bmp");
Form1->Image8->Picture->LoadFromFile("Lo.bmp");
Form1->Image9->Picture->LoadFromFile("Lo.bmp");
cont = false;
Form1->Caption = "!!!You LOSE!!!";
}

// Обработка первого столбца (по вертикали)
if((Mas[0][0] == Mas[1][0]) & (Mas[0][0] == Mas[2][0]))
if(Mas[0][0]==1)
{ // Вывод картинок для Х
Form1->Image1->Picture->LoadFromFile("Tx.bmp");
Form1->Image4->Picture->LoadFromFile("Tx.bmp");
Form1->Image7->Picture->LoadFromFile("Tx.bmp");
cont = false;
Form1->Caption = "!!!You WIN!!!";
}
else
{ // Вывод картинок для О
Form1->Image1->Picture->LoadFromFile("To.bmp");
Form1->Image4->Picture->LoadFromFile("To.bmp");
Form1->Image7->Picture->LoadFromFile("To.bmp");
cont = false;
Form1->Caption = "!!!You LOSE!!!";
}

// Обработка второго столбца (по вертикали)
if((Mas[0][1] == Mas[1][1]) & (Mas[0][1] == Mas[2][1]))
if(Mas[0][1]==1)
{ // Вывод картинок для Х
Form1->Image2->Picture->LoadFromFile("Tx.bmp");
Form1->Image5->Picture->LoadFromFile("Tx.bmp");
Form1->Image8->Picture->LoadFromFile("Tx.bmp");
cont = false;
Form1->Caption = "!!!You WIN!!!";
}
else
{ // Вывод картинок для О
Form1->Image2->Picture->LoadFromFile("To.bmp");
Form1->Image5->Picture->LoadFromFile("To.bmp");
Form1->Image8->Picture->LoadFromFile("To.bmp");
cont = false;
Form1->Caption = "!!!You LOSE!!!";
}

// Обработка третьего столбца (по вертикали)
if((Mas[0][2] == Mas[1][2]) & (Mas[0][2] == Mas[2][2]))
if(Mas[0][2]==1)
{ // Вывод картинок для Х
Form1->Image3->Picture->LoadFromFile("Tx.bmp");
Form1->Image6->Picture->LoadFromFile("Tx.bmp");
Form1->Image9->Picture->LoadFromFile("Tx.bmp");
cont = false;
Form1->Caption = "!!!You WIN!!!";
}
else
{ // Вывод картинок для О
Form1->Image3->Picture->LoadFromFile("To.bmp");
Form1->Image6->Picture->LoadFromFile("To.bmp");
Form1->Image9->Picture->LoadFromFile("To.bmp");
cont = false;
Form1->Caption = "!!!You LOSE!!!";
}


// Обработка основной диагонали (то есть /)
if((Mas[0][2] == Mas[1][1]) & (Mas[0][2] == Mas[2][0]))
if(Mas[0][2]==1)
{ // Вывод картинок для Х
Form1->Image3->Picture->LoadFromFile("Dx.bmp");
Form1->Image5->Picture->LoadFromFile("Dx.bmp");
Form1->Image7->Picture->LoadFromFile("Dx.bmp");
cont = false;
Form1->Caption = "!!!You WIN!!!";
}
else
{ // Вывод картинок для О
Form1->Image3->Picture->LoadFromFile("Do.bmp");
Form1->Image5->Picture->LoadFromFile("Do.bmp");
Form1->Image7->Picture->LoadFromFile("Do.bmp");
cont = false;
Form1->Caption = "!!!You LOSE!!!";
}

// Обработка побочной диагонали (то есть \)
if((Mas[0][0] == Mas[1][1]) & (Mas[0][0] == Mas[2][2]))
if(Mas[0][0]==1)
{ // Вывод картинок для Х
Form1->Image1->Picture->LoadFromFile("BDx.bmp");
Form1->Image5->Picture->LoadFromFile("BDx.bmp");
Form1->Image9->Picture->LoadFromFile("BDx.bmp");
cont = false;
Form1->Caption = "!!!You WIN!!!";
}
else
{ // Вывод картинок для О
Form1->Image1->Picture->LoadFromFile("BDo.bmp");
Form1->Image5->Picture->LoadFromFile("BDo.bmp");
Form1->Image9->Picture->LoadFromFile("BDo.bmp");
cont = false;
Form1->Caption = "!!!You LOSE!!!";
}
}

//---------------------------------------------------------------------------
void ManMade() // ПРОЦЕДУРА, КОТОРАЯ ДЕЛАЕТ ХОДЫ, ТО ЕСТЬ ИИ
{
switch(run)
{
case 1: // ХОД №1
if(Mas[1][1] != 1) // если центральная яцейка не занята ставь туда
{
Mas[1][1] = 0;
ShowXO();
}
else
{ // если центральная яцейка занята, тогда рандомно заполняй массив (по краям)
randomize();
int f = random(4);
switch(f)
{
case 0: Mas[0][0] = 0; break;
case 1: Mas[0][2] = 0; break;
case 2: Mas[2][0] = 0; break;
case 3: Mas[2][2] = 0; break;
}
ShowXO();

}
break;

case 2: // ХОД № 2
WinX(1); // Проверка на то, если ли возможность выгрыша у игрока, если да тогда устранить эту возможность
if(TekWinO!=true) // если нет, тогда
{
WinX(0); // просмотри возможность выиграша для меня(ИИ) если есть => поставить
WinO(2); // корректный ход ИИ
}
break;

case 3: // ХОД №3
WinX(0); // просмотриn возможность выиграша для меня(ИИ) если есть -> поставить
if(TekWinO!=true)
{
WinX(1);// Проверка на то, если ли возможность выгрыша у игрока, если да тогда устранить эту возможность
if(TekWinO!=true) WinX(0); // просмотри возможность выиграша для меня(ИИ) если есть поставить
}
// Проверка самого последнего случая, корректный ход
if(TekWinO!=true)
{
if((Mas[0][1] == 80) & (Mas[2][1] == 20)) // |_x_|_ _|_ _|
{ // |_o_|_o_|_x_|
randomize(); // |_x_|_ _|_ _|
int r = random(2); //
if(r==0) Mas[0][1] = 0;
if(r==1) Mas[2][1] = 0;
ShowXO();
}
if((Mas[1][0] == 60)&(Mas[1][2] == 40))
{ // |_ _|_x_|_ _|
randomize(); // |_ _|_o_|_ _|
int r = random(2); // |_x_|_o_|_x_|
if(r==0) Mas[1][0] = 0;
if(r==1) Mas[1][2] = 0;
ShowXO();
}
}
break;
case 4: //ХОД №4
WinX(0); // просмотри возможность выиграша для меня(ИИ) если есть => поставить
if(TekWinO!=true)
{
WinX(1); // Проверка на то, если ли возможность выгрыша у игрока, если да тогда устранить эту возможность
if(TekWinO!=true)
{
bool bol=true; // Тогда просто пробегаюсь через весь массив, и заполняю первую попавуюся свободную ячейку
for(int i=0; i<3; i++) // и выхожу из циклов
for(int j=0; j<3; j++)
{
if(bol!=false)
if((Mas[i][j]!=1) & (Mas[i][j] != 0))
{
Mas[i][j]=0;
ShowXO();
bol = false;
break;
}
}
}
}
break;

case 5: // ХОД №5
WinX(1); // Проверка на то, если ли возможность выгрыша у игрока, если да тогда устранить эту возможность
if(TekWinO!=true)
{
for(int i=0; i<3; i++) // Пробегаюсь по всему массиву, и заполняю последнюю незаполненную ячейку
for(int j=0; j<3; j++)
if((Mas[i][j]!=1) & (Mas[i][j] != 0)) { Mas[i][j]=0; ShowXO(); break; }
break;
}
}

}
void ShowXO() // ПРОЦЕДУРА ВЫВОДА МАССИВА НА ЭКРАН
{ // для Х
if(Mas[0][0] == 1) Form1->Image1->Picture->LoadFromFile("x.bmp");
if(Mas[0][1] == 1) Form1->Image2->Picture->LoadFromFile("x.bmp");
if(Mas[0][2] == 1) Form1->Image3->Picture->LoadFromFile("x.bmp");
if(Mas[1][0] == 1) Form1->Image4->Picture->LoadFromFile("x.bmp");
if(Mas[1][1] == 1) Form1->Image5->Picture->LoadFromFile("x.bmp");
if(Mas[1][2] == 1) Form1->Image6->Picture->LoadFromFile("x.bmp");
if(Mas[2][0] == 1) Form1->Image7->Picture->LoadFromFile("x.bmp");
if(Mas[2][1] == 1) Form1->Image8->Picture->LoadFromFile("x.bmp");
if(Mas[2][2] == 1) Form1->Image9->Picture->LoadFromFile("x.bmp");
// для О
if(Mas[0][0] == 0) Form1->Image1->Picture->LoadFromFile("o.bmp");
if(Mas[0][1] == 0) Form1->Image2->Picture->LoadFromFile("o.bmp");
if(Mas[0][2] == 0) Form1->Image3->Picture->LoadFromFile("o.bmp");
if(Mas[1][0] == 0) Form1->Image4->Picture->LoadFromFile("o.bmp");
if(Mas[1][1] == 0) Form1->Image5->Picture->LoadFromFile("o.bmp");
if(Mas[1][2] == 0) Form1->Image6->Picture->LoadFromFile("o.bmp");
if(Mas[2][0] == 0) Form1->Image7->Picture->LoadFromFile("o.bmp");
if(Mas[2][1] == 0) Form1->Image8->Picture->LoadFromFile("o.bmp");
if(Mas[2][2] == 0) Form1->Image9->Picture->LoadFromFile("o.bmp");

}

//---------------------------------------------------------------------------
Yandex
Объявления
07.10.2010, 09:58     Tic-tac-toe на С++ (крестики нолики)
Ответ Создать тему
Опции темы

Текущее время: 17:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru