Смекни!
smekni.com

Логическая игра Морской бой (стр. 7 из 7)

{

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] = '&bsol;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, "&bsol;n");

strcat(temp2, Shoots1->Caption.c_str());

int len = strlen(temp2);

temp2[len] = '&bsol;n';

temp2[len+1] = '&bsol;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, "&bsol;n");

strcat(temp2, Shoots2->Caption.c_str());

int len = strlen(temp2);

temp2[len] = '&bsol;n';

temp2[len+1] = '&bsol;0';

break;

}

intpos = j; //запомнить позицию курсора

while (temp1[j] != '&bsol;n') j++; //перейти к кол-ву выстрелов

int count = 0;

while (temp1[++j] != '&bsol;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] = '&bsol;0';

strcat(temp2, RichEdit1->Lines->Strings[0].c_str());

strcat(temp2, "&bsol;n");

strcat(temp2, Shoots1->Caption.c_str());

int len = strlen(temp2);

temp2[len] = '&bsol;n';

while (temp1[pos])

temp2[++len] = temp1[pos++];

temp2[len+1] = '&bsol;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] = '&bsol;0';

strcat(temp2, RichEdit2->Lines->Strings[0].c_str());

strcat(temp2, "&bsol;n");

strcat(temp2, Shoots2->Caption.c_str());

int len = strlen(temp2);

temp2[len] = '&bsol;n';

while (temp1[pos])

temp2[++len] = temp1[pos++];

temp2[len+1] = '&bsol;0';

break;

}

}

//Если результат попал в 10ку

//то отбрасываем 11 результат

if (temp2)

{

i = 0;

int count = 0;

while (temp2[i++])

{

if (temp2[i] == '&bsol;n') count++;

if (count == 20)

{

temp2[i+1] = '&bsol;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&bsol;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; //Занести в список

}