{
private:
TDoska();
voiddraw();
};
//---------------------------------------------------------------------------
Также мне нужно создать объекты, которыми я буду ходить. Их я создаю в базовом классе “TFishka”. Полями этого класса являются: массив размером 12:12 для хранения положений фишек, массив размером 12:12 для хранения цветов фишек на доске, целые параметры: x, y, size, count_1, count_2 – координаты фишки, размер, счет первого и второго игрока соответственно.
Методы класса: конструктор для создания поля зеленого цвета с неустановленными фишками; функция voiddraw для рисования одной фишки с установленными координатами; функция init, в которую передаются координаты фишки походившего игрока, ее цвет и номер игрока. Эта функция закрашивает соседние фишки, если они еще не установлены. Функция Game_over, для проверки на окончание игры. Игра оканчивается, когда все фишки установлены. Потом сравнивается счет игроков и выводится сообщение о победителе.Voiddrawgreed-метод рисует доску с фишками.
Class TFishka
{
private:
intmas[12][12];
TColorcolor[12][12];
intx,y,size;
int count_1,count_2;
TFishka();
void draw_greed();
void draw();
void init(int _x, int _y, TColor _c, int __gamer);
void Game_over();
};
//---------------------------------------------------------------------------
Unit1.cpp
Вunit1.cppописываемсамиметоды. Когдав unit1.h-прототипы.
Событие FormPaint –обработчик прорисовки формы.
void __fastcall TForm1::FormPaint(TObject *Sender)
{
doska.draw();
}
Обрабатываем кнопку Перейти первого игрока
Ход первого игрока. Здесь происходит запись ходов, координаты куда сходил первый игрок, выводитcя вlabel9; прорисовываем фишку f.draw(); выводим очки в edit5 первого игрока; включаем интерфейс первого игрока(кнопка и два edit куда вводим координаты), выключаем интерфейс второго игрока(кнопка и два edit куда вводим координаты), чтоб не было ошибок в работе игры. Проверяемусловиеконцаигрыf.Game_over();
|
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Label9->Caption=Label9->Caption+"Игрок1: X="+Edit1->Text+ "Y="+Edit2->Text+"\t";
f.init(StrToInt(Edit1->Text),StrToInt(Edit2->Text),clBlue,1);
f.draw();
//f.count_1++;
Edit5->Text=IntToStr(f.count_1);
Button1->Enabled=false;
Edit1->Enabled=false;Edit1->Text="";
Edit2->Enabled=false;Edit2->Text="";
if (Button2->Enabled==false)
{ Button2->Enabled=true;
Edit3->Enabled=true;
Edit4->Enabled=true;
}
else
{
Button2->Enabled=false;
}
f.Game_over();
}
//----------------------------------------------------------------------------------
Ход второго игрока. Здесь происходит запись ходов, координаты куда сходил второй игрок, выводитcя вlabel9; прорисовываем фишку f.draw(); выводим очки в edit6 первого игрока; включаем интерфейс второго игрока(кнопка и два edit куда вводим координаты), выключаем интерфейс первого игрока(кнопка и два edit куда вводим координаты), чтоб не было ошибок в работе игры. Проверяемусловиеконцаигрыf.Game_over();
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Label9->Caption=Label9->Caption+"Ирок2: X="+Edit3->Text+" Y="+Edit4->Text+"\n";
f.init(StrToInt(Edit3->Text),StrToInt(Edit4->Text),clRed,2);
f.draw();
//f.count_2++;
Edit6->Text=IntToStr(f.count_2);
Button2->Enabled=false;
Edit3->Enabled=false;Edit3->Text="";
Edit4->Enabled=false;Edit4->Text="";
if (Button1->Enabled==false)
{
Button1->Enabled=true;
Edit1->Enabled=true;
Edit2->Enabled=true;
}else{Button1->Enabled=false;} f.Game_over();
}
//---------------------------------------------------------------------------
Компонент Timer, позволяет вводить необходимые задержки между выполнением тех или иных действий, Формирует в приложении повторяющиеся события.
В нашем случае Timer1Timer обработчик для прорисовки доски.
f.draw_greed()-прорисовываем поле.
Рис. 3 СкриншоткомпонентаTimer
void __fastcall TForm1::Timer1Timer(TObject *Sender)
|
{
f.draw_greed();
}
//---------------------------------------------------------------------------
FormCreate-обработчиксозданияформы. Здесь выводим счет игроков и выключаем интерфейс второго игрока, чтоб смог ходить первый.
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Edit5->Text=IntToStr(f.count_1);
Edit6->Text=IntToStr(f.count_2);
Edit3->Enabled=false;
Edit4->Enabled=false;
}
//---------------------------------------------------------------------------
TDoska()-конструктор-устанавливает значение размера клетки. Init(30) размер клетки будет 30.
TDoska::TDoska()
{
init(30);
};
//---------------------------------------------------------------------------
draw()-рисует доску белого цвета. Задаем цикл в цикле, рисуем квадрат и задаем ему цвет.
Void TDoska::draw()
{
for (inti=0;i<12;i++)
for (int j=0;j<12;j++)
{
Form1->Canvas->Brush->Color=clLime;
Form1->Canvas->Rectangle(i*size,j*size,(i+1)*size,(j+1)*size);
}
};
//---------------------------------------------------------------------------
draw_greed()-рисует доску с фишками.