{
if (d1%10>2)
{
if (Cpu.RowNum[d1-3] != -1) continue;
else
if (d1%10<9)
if (Cpu.RowNum[d1+1] != -1) continue;
}
else
if (Cpu.RowNum[d1+1] != -1) continue;
}
else
if (d1%10<9)
if (Cpu.RowNum[d1+1] != -1)
if (d1%10<8)
if (Cpu.RowNum[d1+2] != -1) continue;
}
else
if (Cpu.RowNum[d1+1] != -1)
if (Cpu.RowNum[d1+2] != -1) continue;
}
if (d1>9)
if (Cpu.RowNum[d1-10] != -1)
{
if (d1>19)
{
if (Cpu.RowNum[d1-20] != -1)
{
if (d1>29)
{
if (Cpu.RowNum[d1-30] != -1) continue;
else
if (d1<90)
if (Cpu.RowNum[d1+10] != -1) continue;
}
else
if (Cpu.RowNum[d1+10] != -1) continue;
}
else
if (d1<90)
if (Cpu.RowNum[d1+10] != -1)
if (d1<80)
if (Cpu.RowNum[d1+20] != -1) continue;
}
else
if (Cpu.RowNum[d1+10] != -1)
if (Cpu.RowNum[d1+20] != -1) continue;
}
if (d1%10<9)
if (Cpu.RowNum[d1+1] != -1)
if (d1%10<8)
if (Cpu.RowNum[d1+2] != -1)
if (d1%10<7)
if (Cpu.RowNum[d1+3] != -1) continue;
if (d1<90)
if (Cpu.RowNum[d1+10] != -1)
if (d1%10<80)
if (Cpu.RowNum[d1+20] != -1)
if (d1%10<70)
if (Cpu.RowNum[d1+30] != -1) continue;
else Cpu.RowNum[d1] = -1;
else Cpu.RowNum[d1] = -1;
else Cpu.RowNum[d1] = -1;
else Cpu.RowNum[d1] = -1;
else Cpu.RowNum[d1] = -1;
else Cpu.RowNum[d1] = -1;
}
}
//Таймер для замедления выстрелов компьютера
void __fastcall TSeaButForm::Timer2Timer(TObject *Sender)
{
Timer2->Enabled = false;
CompShot ();
}
//Прорисовка канвы на форме из сохраненного изображения
void __fastcall TSeaButForm::FormPaint(TObject *Sender)
{
if (Bitmap1)
{
GridField1->Canvas->CopyRect(Rect(0,0,300,300),Bitmap1->Canvas,Rect(0,0,300,300));
GridField2->Canvas->CopyRect(Rect(0,0,300,300),Bitmap2->Canvas,Rect(0,0,300,300));
}
}
//Сохранение изображения канв
void TSeaButForm::SaveBM (int number)
{
//Для какого поля необходимо сохранить изображение
if (number == 1)
{
if (!Bitmap1)
{
Bitmap1 = new Graphics::TBitmap ();
Bitmap1->Height = 300;
Bitmap1->Width = 300;
}
Bitmap1->Canvas->CopyRect(Rect(0,0,300,300),GridField1->Canvas,Rect(0,0,300,300));
}
else
{
if (!Bitmap2)
{
Bitmap2 = new Graphics::TBitmap ();
Bitmap2->Height = 300;
Bitmap2->Width = 300;
}
Bitmap2->Canvas->CopyRect(Rect(0,0,300,300),GridField2->Canvas,Rect(0,0,300,300));
}
}
//Установка свойств окна в нужный режим
void TSeaButForm::SetWindow (bool kind)
{
//kind определят в какой режим нужно установить
//0 - деактивация элементов
//1 - активация
if (!kind)
{
SeaButForm->FormStyle = fsStayOnTop; //Сделать окно поверх
TBorderIconstempBI = BorderIcons; //Убрать кнопки изменения размера окна
tempBI >> biMinimize;
BorderIcons = tempBI;
File->Enabled = false; //деактивировать меню
Help->Enabled = false;
}
//Привести к первоначальному виду
else
{
SeaButForm->FormStyle = fsNormal;
TBorderIcons tempBI = BorderIcons;
tempBI << biMinimize;
BorderIcons = tempBI;
File->Enabled = true;
Help->Enabled = true;
}
}
//Рисование на канве под номером number в поле с координатами
//xpbyp в случая попадания или непопадания. aim определяет попадание
void TSeaButForm::SeaDraw (int number, int xp, int yp, bool aim)
{
if (number == 1)
if (aim)
{
GridField1->Canvas->MoveTo(xp*29+3,yp*29+3);
GridField1->Canvas->LineTo(xp*29+24,yp*29+24);
GridField1->Canvas->MoveTo(xp*29+3,yp*29+24);
}
else
{
GridField1->Canvas->Brush->Color = clBlack;
GridField1->Canvas->Ellipse(xp*29+10,yp*29+10,xp*29+18,yp*29+18);
GridField1->Canvas->FloodFill(xp*29+14,yp*29+14,clBlack,fsSurface);
}
else
if (aim)
{
GridField2->Canvas->MoveTo(xp*29+3,yp*29+3);
GridField2->Canvas->LineTo(xp*29+24,yp*29+24);
GridField2->Canvas->MoveTo(xp*29+3,yp*29+24);
}
else
{
GridField2->Canvas->Brush->Color = clBlack;
GridField2->Canvas->Ellipse(xp*29+10,yp*29+10,xp*29+18,yp*29+18);
GridField2->Canvas->FloodFill(xp*29+14,yp*29+14,clBlack,fsSurface);
}
}
//Сохранение результатов. number - определяет того, кто выиграл
void TSeaButForm::SaveRes (int number)
{
ifstream infile ("SeaButResults.txt");
if (!infile) return;
int i = 0;
char temp1[300];
char *temp2 = NULL;
//скопировать данные файла в строку
while (!infile.eof())
{
infile.get(temp1[i]);
i++;
}
temp1[i-1] = '\0';
int j = 0;
//Проверка на место вставки текущего результата
for (inti = 0; i < 10; i++)
{
//Если конец строки, то добавить результат
//и все перенести в temp2
if (!temp1[j])
if (number == 1)
{
temp2 = new char [300];
for (int z = 0; z <= j; z++)
temp2[z] = temp1[z];
strcat(temp2, RichEdit1->Lines->Strings[0].c_str());
strcat(temp2, "\n");
strcat(temp2, Shoots1->Caption.c_str());
int len = strlen(temp2);
temp2[len] = '\n';
temp2[len+1] = '\0';
break;
}
else
{
temp2 = new char [300];
for (int z = 0; z <= j; z++)
temp2[z] = temp1[z];
strcat(temp2, RichEdit2->Lines->Strings[0].c_str());
strcat(temp2, "\n");
strcat(temp2, Shoots2->Caption.c_str());
int len = strlen(temp2);
temp2[len] = '\n';
temp2[len+1] = '\0';
break;
}
intpos = j; //запомнить позицию курсора
while (temp1[j] != '\n') j++; //перейти к кол-ву выстрелов
int count = 0;
while (temp1[++j] != '\n') count++; //определить кол-во знаков в числе
int k, tempnumb = 0;
for (count == 3 ? k = 100: k = 10; k >= 1; k/=10)
tempnumb += ((int)temp1[j-count--]-48)*k; //определяем кол-во выстрелов
j++;
//Сравниваем с выстрелами текущего результата
//если больше, то вставляем перед проверяемым результатом
if (number == 1)
if (tempnumb > StrToInt(Shoots1->Caption))
{
temp2 = new char [300];
for (int z = 0; z < pos; z++)
temp2[z] = temp1[z];
temp2[pos] = '\0';
strcat(temp2, RichEdit1->Lines->Strings[0].c_str());
strcat(temp2, "\n");
strcat(temp2, Shoots1->Caption.c_str());
int len = strlen(temp2);
temp2[len] = '\n';
while (temp1[pos])
temp2[++len] = temp1[pos++];
temp2[len+1] = '\0';
break;
}
if (number == 2)
if (tempnumb > StrToInt(Shoots2->Caption))
{
temp2 = new char [300];
for (int z = 0; z < pos; z++)
temp2[z] = temp1[z];
temp2[pos] = '\0';
strcat(temp2, RichEdit2->Lines->Strings[0].c_str());
strcat(temp2, "\n");
strcat(temp2, Shoots2->Caption.c_str());
int len = strlen(temp2);
temp2[len] = '\n';
while (temp1[pos])
temp2[++len] = temp1[pos++];
temp2[len+1] = '\0';
break;
}
}
//Если результат попал в 10ку
//то отбрасываем 11 результат
if (temp2)
{
i = 0;
int count = 0;
while (temp2[i++])
{
if (temp2[i] == '\n') count++;
if (count == 20)
{
temp2[i+1] = '\0';
break;
}
}
}
infile.close();
//Заносим temp2 в файл
if (temp2)
{
ofstream outfile ("SeaButResults.txt");
if (!outfile) return;
i = 0;
while (temp2[i])
outfile.put(temp2[i++]);
delete [] temp2;
outfile.close();
}
}
//Таймер для показа победы
void __fastcall TSeaButForm::Timer3Timer(TObject *Sender)
{
staticintk = 0; //Количество обращений к таймеру
//Если дошло до 8
if (k == 8)
{
//Увеличить кол-во побед
if (Count1Destr == 10)
Wins2->Caption = IntToStr(StrToInt(Wins2->Caption)+1);
else
Wins1->Caption = IntToStr(StrToInt(Wins1->Caption)+1);
k = 0;
Timer3->Enabled = false;
FIGHT->FlashEnabled = true;
}
//Иначе изменить цвета метки
else
{
if (Count1Destr == 10)
if (Win2->Font->Color == clBlack)
Win2->Font->Color = clSilver;
else
Win2->Font->Color = clBlack;
else
if (Win1->Font->Color == clBlack)
Win1->Font->Color = clSilver;
else
Win1->Font->Color = clBlack;
k++;
}
}
//вызов окна результатов
void __fastcall TSeaButForm::ResultsClick(TObject *Sender)
{
PlaySound("Sounds\SOUNREST.WAV", 0, SND_ASYNC);
ResultsForm->Position = poMainFormCenter;
ResultsForm->Visible = true;
SeaButForm->Enabled = false;
ResultsForm->LoadRes();
}
//Изменение курсоров
//NameCur - имя файла
//Num - константа для запоминания курсора
void TSeaButForm::ChangeCur (char *NameCur, int Num)
{
HCURSOR cursor;
cursor = LoadCursorFromFile(NameCur); //Загрузить из файла
if (cursor)
Screen->Cursors[Num] = cursor; //Занести в список
}