#include <windows.h>
#pragma hdrstop
bool player;
typedef unsigned char uchar;
uchar board[8][8];
void* pboard;
#pragma argsused
BOOL WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
 randomize();
 return true;
}
//---------------------------------------------------------------------------
extern "C" __export void __fastcall InitBoard(bool pl, void* nboard)
{
 player=pl;
 pboard=nboard;
}
//---------------------------------------------------------------------------
bool __fastcall CanMove(int x,int y)
{
 if(board[x][y]!=2)
  return false;
 bool curcolor = player, oppcolor = 1-player;
 if(x<7&&board[x+1][y]==oppcolor)
  for(int i=x+2;i<8;i++)
   if(board[i][y]==curcolor) return true;
   else if(board[i][y]==2) break;
 if(x>0&&board[x-1][y]==oppcolor)
  for(int i=x-2;i>=0;i--)
   if(board[i][y]==curcolor) return true;
   else if(board[i][y]==2) break;
 if(y<7&&board[x][y+1]==oppcolor)
  for(int i=y+2;i<8;i++)
   if(board[x][i]==curcolor) return true;
   else if(board[x][i]==2) break;
 if(y>0&&board[x][y-1]==oppcolor)
  for(int i=y-2;i>=0;i--)
   if(board[x][i]==curcolor) return true;
   else if(board[x][i]==2) break;
 if(x<7&&y<7&&board[x+1][y+1]==oppcolor)
  for(int i=x+2,j=y+2;i<8&&j<8;i++,j++)
   if(board[i][j]==curcolor) return true;
   else if(board[i][j]==2) break;
 if(x>0&&y>0&&board[x-1][y-1]==oppcolor)
  for(int i=x-2,j=y-2;i>=0&&j>=0;i--,j--)
   if(board[i][j]==curcolor) return true;
   else if(board[i][j]==2) break;
 if(x>0&&y<7&&board[x-1][y+1]==oppcolor)
  for(int i=x-2,j=y+2;i>=0&&j<8;i--,j++)
   if(board[i][j]==curcolor) return true;
   else if(board[i][j]==2) break;
 if(x<7&&y>0&&board[x+1][y-1]==oppcolor)
  for(int i=x+2,j=y-2;i<8&&j>=0;i++,j--)
   if(board[i][j]==curcolor) return true;
   else if(board[i][j]==2) break;
 return false;
}
//---------------------------------------------------------------------------
int __fastcall GetPlacesToSet(int *xs, int *ys)
{
 int num=0;
 for(int i=0;i<8;i++)
  for(int j=0;j<8;j++)
   if(CanMove(i,j))
   {
    xs[num]=i;
    ys[num++]=j;
   }
 return num;
}
//---------------------------------------------------------------------------
extern "C" __export void __fastcall ComputerMove(int &x, int &y)
{
 CopyMemory(board,pboard,sizeof(board));				//Копирую доску для её использования
 int *xs=new int[64],*ys=new int[64],*pls=new int[64],n;
 n=GetPlacesToSet(xs,ys);						//Получаю места, куда можно поставить фишку (n - количество мест)
 if(n==0)								//Если мест нет, то
 {
  delete [] xs;								//Удаляем переменные,
  delete [] ys;
  delete [] pls;
  x=-1;									//Устанавливаем значения позиции, куда поставить в -1
  y=-1;
  return;								//Завершаем работу.
 }									//Иначе
 n=random(n);								//Получаем случайную позицию (это самый простой вариант игры компьютера)
 x=xs[n];								//Получаем координату x
 y=ys[n];								//Получаем координату y
 delete [] xs;								//Удаляем переменные
 delete [] ys;
 delete [] pls;
}									//Завершаем работу.
//---------------------------------------------------------------------------
extern "C" __export void __fastcall GetLibraryInformation(int &level,char* &author,char* &releaseday,char* &version,int &build)
{
 level=0;
 author="Янкин Н.В.";
 releaseday="01/09/2002";
 version="1.0.0";
 build=1;
}
//---------------------------------------------------------------------------
