}
// функция сохранения игры в файл name, возвращает статус успешности сохранения
int cReversi::SaveGame(char *name)
{
FILE *f;
f=fopen(name,"wb");
if (f==NULL)
return 0;
fwrite(&numTurns,sizeof(int),1,f);
for (int i=0; i<numTurns; i++)
{
fwrite(turn+i,sizeof(cTurn),1,f);
}
fclose(f);
return 1;
}
// функция рисования области игрового поля
void __fastcall TForm1::PaintBox1Paint(TObject *Sender)
{
for (int i=0; i<8; i++)
{
PaintBox1->Canvas->MoveTo(50*i+50,0);
PaintBox1->Canvas->LineTo(50*i+50,450);
PaintBox1->Canvas->MoveTo(0,50*i+50);
PaintBox1->Canvas->LineTo(450,50*i+50);
}
for (int i=0; i<8; i++)
for (int j=0; j<8; j++)
{
if (Game.getPlayer(i,j)==0)
PaintBox1->Canvas->Draw(i*50+50,j*50+50,RedC->Picture->Graphic);
if (Game.getPlayer(i,j)==1)
PaintBox1->Canvas->Draw(i*50+50,j*50+50,BlueC->Picture->Graphic);
}
}
// функция замены цветов шарика для текущего хода thisTurn
void cReversi::SetColor(cTurn thisTurn)
{
int flag=0;
if(CanMoveTo(thisTurn.x,thisTurn.y,thisTurn.player))
Table[thisTurn.x][thisTurn.y]=thisTurn.player;
for (int i=0; i<Width; i++)
for (int j=0; j<Width; j++)
if (Table[i][j]==thisTurn.player)
{
if (i==thisTurn.x)
{
flag=0;
for (int k=min(j,thisTurn.y)+1;k<max(j,thisTurn.y);k++)
if (Table[i][k]==-1)
flag=1;
if (!flag)
for (int k=min(j,thisTurn.y)+1;k<max(j,thisTurn.y);k++)
Table[i][k]=thisTurn.player;
continue;
}
if (j==thisTurn.y)
{
flag=0;
for (int k=min(i,thisTurn.x)+1;k<max(i,thisTurn.x);k++)
if (Table[k][j]==-1)
flag=1;
if (!flag)
for (int k=min(i,thisTurn.x)+1;k<max(i,thisTurn.x);k++)
Table[k][j]=thisTurn.player;
continue;
}
int dx,dy;
dx=i-thisTurn.x;
dy=j-thisTurn.y;
if (abs(dx)==abs(dy))
{
flag=0;
for (int k=0; k<abs(dx); k++)
if (Table[i+k*sign(-dx)][j+k*sign(-dy)]==-1)
flag=1;
if (!flag)
for (int k=0; k<abs(dx); k++)
Table[i+k*sign(-dx)][j+k*sign(-dy)]=thisTurn.player;
}
}
}
//функция загрузки фонового рисунка
void __fastcall TForm1::N5Click(TObject *Sender)
{
if (OpenDialog2->Execute())
{
ImageFon->Picture->LoadFromFile(OpenDialog2->FileName);
}
ReBuildList();
PaintBox1->Refresh();
}
// функция обработки ситуации при отсутствии ходов
void __fastcall TForm1::CheckGame()
{
if (Game.isGameOver())
{
AnsiString s;
s="Счет(К:С):"+IntToStr(Game.GetNum(0));
s+=":"+IntToStr(Game.GetNum(1));
MessageBox(Handle,s.c_str(),"Игра Окончена",0);
return;
}
if (Game.GetMoveTable(player,movs)==0)
{
MessageBoxA(Handle,"У игрока нет возможных ходов","Предупреждение",0);
player=oplayer(player);
Game.GetMoveTable(player,movs);
}
}
// функция возврата игры к выбранному ходу
void __fastcall TForm1::ListBox1DblClick(TObject *Sender)
{
if (ListBox1->ItemIndex==-1)
return;
if (ListBox1->ItemIndex==0)
Game.NewGame();
Game.SetTurn(ListBox1->ItemIndex);
player=oplayer(Game.GetTurn(Game.GetNumTurns()-1).player);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.