Checkers_v02

Author: Inkov Evgeni
0 Views
0 Downloads
0 Favorites
Checkers_v02
ÿþ//+------------------------------------------------------------------+

//|                                                 Checkers_v02.mq4 |

//+------------------------------------------------------------------+

#property copyright "Inkov Evgeni"

#property link      "ew123@mail.ru"

//+------------------------------------------------------------------+

#property version   "1.00"

#property strict

//+------------------------------------------------------------------+

// ?>4A25G8205BAO ?>A;54=55 =060B>5 ?>;5

// 22545= @568< @525@A0 4>A:8

// 2>7<>6=>ABL C40;5==8O B>;L:> >4=>9 <8:@>?>78F88 A ?>4B25@645=85< (70I8B0 >B A;CG09>=3> =060B8O)

//+------------------------------------------------------------------+

#define kol_stek  100 // 4;8=0 AB5:0 4;O 70?><8=0=8O E>4>2

#define kol_min_pos   10 // :>;. 70?><=5==KE <8=8<0;L=KE ?>78F89 (>B 1 4> 10)

//+------------------------------------------------------------------+

color clr_Text    =clrWhite;

color clr_Osn     =clrIndianRed;

color clr_Take    =clrMediumVioletRed;

color clr_Fon     =clrLightGray;

color clr_Fon_off =clrDimGray;

color clr_Fon_But =clrYellow;

color clr_Arrow   =clrDarkSlateGray;

color clr_TL      =clrYellow;

//+------------------------------------------------------------------+

string pref="ch_";

string but_beg=pref+"Ish";

string but_rev=pref+"Rev";

string but_del_all=pref+"Del_all";

string but_left=pref+"left";

string but_right=pref+"right";

string but_ust=pref+"ust";

string but_put=pref+"put";

string but_clr=pref+"clr";

string but_pos=pref+"n";

string but_app=pref+"app";

string but_del_pos=pref+"pos_del";

string but_yes=pref+"yes";

string but_checkers=pref+"Ch";

string name_TL=pref+"TL";



//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

int    ust_checkers=0; // B8? H0H:8 2 >B45;L=>< >:=5 (-2,-1,0,1,2)

bool   revers;

bool   game; // @568< CAB0=>2:8 H0H5: (1-83@0, 0-CAB0=>2:0 ?>78F88)

string mas_abc[8]= {"a","b","c","d","e","f","g","h"};

int x0_=0,y0_=0,di_=0;

int mas_ch[4][8]; // [4]-X :;5B:8,[8]-Y :;5B:8; 0-=5B H0H:8,1-?@>AB0O 15;0O,2-40<:0 15;0O,-1-?@>AB0O G5@=0O,-2-40<:0 G5@=0O

//..............................

int mas_stek[kol_stek][4][8]; // <0AA82 AB5:a, AB5: 70?>;=OBAO ?>A;5 :0A0=8O :;5B:8 2 @568<5 Game (70?.?>78F88).

// 70?8AL ?@>8AE>48B B0:65 ?>A;5 :0A0=8O :=>?:8 Begin 8;8 ?@8 ?5@5E>45 2 @568< Game

int mas_end_xyd[kol_stek][3]; // <0AA82 :>>@48=0B ?>A;54=53> :0A0=8O :;5B:8 (0-x,1-y) 8 7=0G5=8O 4>?.?>;O (2-d)

//...........................

int end_stek; // C:07K205B =0 25@E=NN ?>7. AB5:0 (:>=5F AB5:0)

// 5A;8 end_stek=kol_stek, B> AB5:0 5IQ =5B (>= ?CAB>9)

// 5A;8 end_stek=0, B> AB5: ?>;=K9

int tek_pos_steka; // 7=0G5=85 <>65B 42830BLAO A ?><>ILN AB@5;>: >B end_stek 4> kol_stek

//........................

int mas_pos[kol_min_pos][4][8]; // <0AA82 ?>78F89

int mas_id_pos[kol_min_pos]; // <0AA82 =><5@0 ?>78F88 (AC<<0 H0H5: ?> :;5B:0<).

// > MB><C =><5@C >?@545;O5BAO ACI5AB2C5B <8:@>?>78F8O 8;8 =5B

int mas_id_stek_pos[kol_min_pos]; // <0AA82 =0G0; A>E@0=5==>3> AB5:0

int mas_stek_in_pos[kol_min_pos][kol_stek][4][8]; // <0AA82 A>E@0=5==KE AB5:>2

int mas_end_xyd_pos[kol_min_pos][kol_stek][3]; // A>E@0=5==K5 <0AA82K ?>A;54=53> :0A0=8O :;5B:8 (0-x,1-y) 8 7=0G5=8O 4>?.?>;O (2-d)

int X_Take=-1,Y_Take=-1;

int app=0;

//+------------------------------------------------------------------+

int OnInit()

  {

   if(UninitializeReason()!=REASON_CHARTCHANGE)

     {

      ChartSetInteger(0,CHART_SHOW_OBJECT_DESCR,false);

      ChartSetInteger(0,CHART_FOREGROUND,false);

      //...........................

      find_krd_panel(x0_,y0_,di_);

      //...........................

      out_Panel(x0_,y0_,di_,X_Take,Y_Take);

      //......................

      end_stek=kol_stek;

      tek_pos_steka=kol_stek;

      //......................

      ButtonCreate(but_del_all,    693, 20,80,20,"Clean",10,clrMagenta);

      ButtonCreate(but_beg,        693, 60,80,20,"Begin");

      ButtonCreate(but_rev,        693,100,80,20,"Revers",10,clr_Fon_off);



      LabelCreate(0,but_left, 0,710,160,"Z","wingdings 3",20,clr_Text);

      LabelCreate(0,but_right,0,755,160,"]","wingdings 3",20,clr_Text);



      game=true;

      revers=false;

      ButtonCreate(but_ust,        700,190,65,40,"Game",11,clr_Fon_But);

      ButtonCreate_ch(but_checkers,700,240,65,65,clr_Osn); // >B45;L=>5 ?>;5 4;O H0H:8



      app=0;

      out_app(app);



      ButtonCreate(but_clr,820,20,50,20,"Cln",10,clrMagenta);

      ButtonCreate(but_put,820,60,50,20,"Put");

      init_mas_pos();

      //............................

      EventSetMillisecondTimer(1000);

     }

   OnTick();

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

  {

   if(UninitializeReason()!=REASON_CHARTCHANGE)

     {

      ObjectsDeleteAll(0,pref);

      EventKillTimer();

     }

  }

//+------------------------------------------------------------------+

void OnTick()

  {

   osn_proc();

  }

//+------------------------------------------------------------------+

void OnTimer()

  {

   osn_proc();

   get_stek_form_TL();

  }

//+------------------------------------------------------------------+

void osn_proc()

  {

   find_krd_panel(x0_,y0_,di_);

//...........................

   out_Panel(x0_,y0_,di_,X_Take,Y_Take);

//...........................

   out_mas_ch(x0_,y0_,di_);

//.........................

   out_mas_pos();

//.........................

   clr_strel();

//.........................

   app=calc_app();

   out_app(app);

  }

//------------------------

int calc_app()

  {

   int out=0;

   int sum=0; // AC<<0 2A5E H0H5:

   int kol_w=0,kol_b=0; // :>;.15;KE(white) 8 G5@=KE(black)

   int kol_d=0; // :>;. 40<>:



   for(int j=0; j<4; j++)

      for(int k=0; k<8; k++)

         if(mas_ch[j][k]>0)

           {

            if(mas_ch[j][k]==2)

               kol_d++;

            kol_w++;

            sum++;

           }

         else

            if(mas_ch[j][k]<0)

              {

               if(mas_ch[j][k]==-2)

                  kol_d++;

               kol_b++;

               sum++;

              }

   if(sum>0 && kol_d==0)

      if(kol_w==kol_b)

        {

         for(int j=0; j<4; j++)

            for(int k=0; k<8; k+=2)

               if(mas_ch[j][k]!=0)

                  sum++;

         if(sum==0)

            for(int j=0; j<4; j++)

               for(int k=1; k<8; k+=2)

                  if(mas_ch[j][k]!=0)

                     sum++;



         if(sum!=0)

            if(MathMod(sum,2)==0)

               out=-1;

            else

               out=1;

        }

      else

         if(kol_w>kol_b)

            out=kol_w-kol_b+1;

         else

            out=kol_w-kol_b-1;

//...................

   return(out);

  }

//--------------------

void out_app(int ap)

  {

   if(ap==0)

     {

      LabelCreate(0,but_app+"1",0,730,335,"","Arial Black",8,clr_Text);

      LabelCreate(0,but_app+"2",0,730,350,"","Arial Black",8,clr_Text);

      LabelCreate(0,but_app+"3",0,730,365,"","Arial Black",8,clr_Text);

     }

   else

      if(ap==1)

        {

         LabelCreate(0,but_app+"1",0,730,335,"??>78F8O","Arial Black",8,clr_Text);

         LabelCreate(0,but_app+"2",0,730,350,"2 ?>;L7C","Arial Black",8,clr_Text);

         LabelCreate(0,but_app+"3",0,730,365,"E>4OI53>","Arial Black",8,clr_Text);

        }

      else

         if(ap==-1)

           {

            LabelCreate(0,but_app+"1",0,730,335,"??>78F8O","Arial Black",8,clr_Text);

            LabelCreate(0,but_app+"2",0,730,350," 2 ?>;L7C","Arial Black",8,clr_Text);

            LabelCreate(0,but_app+"3",0,730,365,"E>4OI53>","Arial Black",8,clr_Text);

           }

         else

            if(ap>1)

              {

               LabelCreate(0,but_app+"1",0,730,335,"5;KE","Arial Black",8,clr_Text);

               LabelCreate(0,but_app+"2",0,730,350,"1>;LH5","Arial Black",8,clr_Text);

               LabelCreate(0,but_app+"3",0,730,365,"=0 "+(string)(ap-1),"Arial Black",8,clr_Text);

              }

            else

              {

               LabelCreate(0,but_app+"1",0,730,335,"'5@=KE","Arial Black",8,clr_Text);

               LabelCreate(0,but_app+"2",0,730,350,"1>;LH5","Arial Black",8,clr_Text);

               LabelCreate(0,but_app+"3",0,730,365,"=0 "+(string)(-ap-1),"Arial Black",8,clr_Text);

              }

  }

//--------------------

void init_mas_pos()

  {

   ArrayInitialize(mas_pos, 0);

   ArrayInitialize(mas_id_pos, 0);

   ArrayInitialize(mas_id_stek_pos,0);

   ArrayInitialize(mas_stek_in_pos,0);

   ArrayInitialize(mas_end_xyd_pos,0);

  }

//-------------------

void clr_strel()

  {

   if(tek_pos_steka>=kol_stek-1)

      ObjectSetInteger(0,but_left,OBJPROP_COLOR,clr_Arrow);

   else

      ObjectSetInteger(0,but_left,OBJPROP_COLOR,clr_Text);

   if(tek_pos_steka==end_stek)

      ObjectSetInteger(0,but_right,OBJPROP_COLOR,clr_Arrow);

   else

      ObjectSetInteger(0,but_right,OBJPROP_COLOR,clr_Text);

  }

//---------------------

void put_stek()

  {

// 70?8A0BL 2 AB5: >G5@54=CN ?>78F8N

   if(end_stek==0)

     {

      // A428=CBL AB5:

      for(int k=kol_stek-1; k>=1; k--)

        {

         for(int i=0; i<4; i++)

            for(int j=0; j<8; j++)

               mas_stek[k][i][j]=mas_stek[k-1][i][j];



         mas_end_xyd[k][0]=mas_end_xyd[k-1][0];

         mas_end_xyd[k][1]=mas_end_xyd[k-1][1];

         mas_end_xyd[k][2]=mas_end_xyd[k-1][2];

        }

     }

   else

     {

      // A428=CBL C:070B5;L AB5:0

      if(end_stek==kol_stek)

         ArrayInitialize(mas_stek,0);

      end_stek=tek_pos_steka;

      end_stek--;

      tek_pos_steka=end_stek;



     }

//........................

   for(int i=0; i<4; i++) // 70?8A0BL ?>78F8N ?> C:070B5;N

      for(int j=0; j<8; j++)

         if(revers)

           {

            mas_stek[end_stek][i][j]=mas_ch[3-i][7-j];



            mas_end_xyd[end_stek][0]=3-X_Take;

            mas_end_xyd[end_stek][1]=7-Y_Take;

            mas_end_xyd[end_stek][2]=ust_checkers;

           }

         else

           {

            mas_stek[end_stek][i][j]=mas_ch[i][j];



            mas_end_xyd[end_stek][0]=X_Take;

            mas_end_xyd[end_stek][1]=Y_Take;

            mas_end_xyd[end_stek][2]=ust_checkers;

           }

  }

//------------------------

void get_stek()

  {

// ?@>G8B0BL AB5: ?> C:070B5;N B5:CI59 ?>78F88 AB5:0 8 ?5@5?8A0BL ?>78F8N

   if(tek_pos_steka>=end_stek && tek_pos_steka<kol_stek)

     {

      for(int i=0; i<4; i++)

         for(int j=0; j<8; j++)

            if(revers)

               mas_ch[3-i][7-j]=mas_stek[tek_pos_steka][i][j];

            else

               mas_ch[i][j]=mas_stek[tek_pos_steka][i][j];

      //...................

      if(revers)

        {

         X_Take=3-mas_end_xyd[tek_pos_steka][0];

         Y_Take=7-mas_end_xyd[tek_pos_steka][1];

         ust_checkers=mas_end_xyd[tek_pos_steka][2];

        }

      else

        {

         X_Take=mas_end_xyd[tek_pos_steka][0];

         Y_Take=mas_end_xyd[tek_pos_steka][1];

         ust_checkers=mas_end_xyd[tek_pos_steka][2];

        }

     }

  }

//------------------------

void Begin_pos()

  {

// CAB0=>28BL =0G0;L=>5 @0A?>;>65=85 H0H5:

   for(int i=0; i<4; i++)

      for(int j=0; j<8; j++)

        {

         mas_ch[i][j]=0;

         if(j!=3 && j!=4)

            if(j>3)

               mas_ch[i][j]=-1;

            else

               mas_ch[i][j]=1;

        }

   if(revers)

      Revers_pos();

  }

//--------------------------

void Revers_pos()

  {

   int mas_ch_tmp[4][8];

   ArrayInitialize(mas_ch_tmp,0);



   for(int i=0; i<4; i++)

      for(int j=0; j<8; j++)

         mas_ch_tmp[i][j]=mas_ch[i][j];

//...........................................

   for(int i=0; i<4; i++)

      for(int j=0; j<8; j++)

         mas_ch[3-i][7-j]=mas_ch_tmp[i][j];

  }

//--------------------------

void put_mas_pos()

  {

// 70?8A0BL >G5@54=CN ?>78F8N 2 <0AA82 <8=8<0;L=KE ?>78F89

   for(int i=kol_min_pos-1; i>=1; i--)

     {

      for(int j=0; j<4; j++)

         for(int k=0; k<8; k++)

            mas_pos[i][j][k]=mas_pos[i-1][j][k]; // A428=CBL <0AA82 <8=8<0;L=KE ?>78F89

      //.................

      mas_id_pos [i]      =mas_id_pos [i-1];     // A428=CBL <0AA82 =><5@>2 <8=8<0;L=KE ?>78F89

      mas_id_stek_pos[i]  =mas_id_stek_pos[i-1]; // A428=CBL <0AA82 =0G0;0 AB5:0 <8=8<0;L=KE ?>78F89

      //.................

      for(int p=0; p<kol_stek; p++) // A428=CBL <0AA82K 70?><=5==>3> AB5:0 2 <8=8<0;L=KE ?>78F8OE

        {

         for(int j=0; j<4; j++)

            for(int k=0; k<8; k++)

               mas_stek_in_pos[i][p][j][k]=mas_stek_in_pos[i-1][p][j][k];

         //.................

         mas_end_xyd_pos[i][p][0]=mas_end_xyd_pos[i-1][p][0];

         mas_end_xyd_pos[i][p][1]=mas_end_xyd_pos[i-1][p][1];

         mas_end_xyd_pos[i][p][2]=mas_end_xyd_pos[i-1][p][2];

        }

     }

//.......................

   mas_id_stek_pos[0]=end_stek; // 70?><=8BL B5:CI89 =><5@ AB5:0



   mas_id_pos[0]=0; // >1=C;8BL 1C4CICN AC<<C ?>78F89

   for(int j=0; j<4; j++) // @0AG8B0BL B5:ICN AC<<C ?>78F89

      for(int k=0; k<8; k++)

        {

         if(revers)

            mas_pos[0][j][k] = mas_ch[3-j][7-k];

         else

            mas_pos[0][j][k] = mas_ch[j][k];

         mas_id_pos[0]   +=(mas_ch[j][k]+3)*(k+1)*(j+1);

        }

// 70?><=8BL AB5:

   for(int p=0; p<kol_stek; p++)

     {

      for(int j=0; j<4; j++)

         for(int k=0; k<8; k++)

            mas_stek_in_pos[0][p][j][k]=mas_stek[p][j][k];

      //.......................

      mas_end_xyd_pos[0][p][0]=mas_end_xyd[p][0];

      mas_end_xyd_pos[0][p][1]=mas_end_xyd[p][1];

      mas_end_xyd_pos[0][p][2]=mas_end_xyd[p][2];

     }

  }

//-------------------------

void del_one_pos(int n_pos)

  {

// C40;8BL <8:@>?>78F8N A B5:CI8< =><5@>< i

   for(int i=n_pos; i<kol_min_pos-1; i++)

     {

      for(int j=0; j<4; j++)

         for(int k=0; k<8; k++)

            mas_pos[i][j][k]=mas_pos[i+1][j][k]; // A428=CBL <0AA82 <8=8<0;L=KE ?>78F89

      //.................

      mas_id_pos [i]      =mas_id_pos [i+1];     // A428=CBL <0AA82 =><5@>2 <8=8<0;L=KE ?>78F89

      mas_id_stek_pos[i]  =mas_id_stek_pos[i+1]; // A428=CBL <0AA82 =0G0;0 AB5:0 <8=8<0;L=KE ?>78F89

      //.................

      for(int p=0; p<kol_stek; p++) // A428=CBL <0AA82K 70?><=5==>3> AB5:0 2 <8=8<0;L=KE ?>78F8OE

        {

         for(int j=0; j<4; j++)

            for(int k=0; k<8; k++)

               mas_stek_in_pos[i][p][j][k]=mas_stek_in_pos[i+1][p][j][k];

         //.................

         mas_end_xyd_pos[i][p][0]=mas_end_xyd_pos[i+1][p][0];

         mas_end_xyd_pos[i][p][1]=mas_end_xyd_pos[i+1][p][1];

         mas_end_xyd_pos[i][p][2]=mas_end_xyd_pos[i+1][p][2];

        }

     }

   for(int j=0; j<4; j++)

      for(int k=0; k<8; k++)

         mas_pos[kol_min_pos-1][j][k]=0; // A428=CBL <0AA82 <8=8<0;L=KE ?>78F89

//.................

   mas_id_pos [kol_min_pos-1]    =0;     // A428=CBL <0AA82 =><5@>2 <8=8<0;L=KE ?>78F89

   mas_id_stek_pos[kol_min_pos-1]=0; // A428=CBL <0AA82 =0G0;0 AB5:0 <8=8<0;L=KE ?>78F89

//.................

   for(int p=0; p<kol_stek; p++) // A428=CBL <0AA82K 70?><=5==>3> AB5:0 2 <8=8<0;L=KE ?>78F8OE

     {

      for(int j=0; j<4; j++)

         for(int k=0; k<8; k++)

            mas_stek_in_pos[kol_min_pos-1][p][j][k]=0;

      //.................

      mas_end_xyd_pos[kol_min_pos-1][p][0]=0;

      mas_end_xyd_pos[kol_min_pos-1][p][1]=0;

      mas_end_xyd_pos[kol_min_pos-1][p][2]=0;

     }

  }

//-------------------------------

void get_mas_pos(int i)

  {

   for(int j=0; j<4; j++)

      for(int k=0; k<8; k++)

         if(revers)

            mas_ch[3-j][7-k]=mas_pos[i][j][k];

         else

            mas_ch[j][k]=mas_pos[i][j][k];



   end_stek=mas_id_stek_pos[i];

   tek_pos_steka=end_stek;

// ?5@5?8A0BL 70?><=5==K9 AB5:

   for(int p=0; p<kol_stek; p++)

     {

      for(int j=0; j<4; j++)

         for(int k=0; k<8; k++)

            mas_stek[p][j][k]=mas_stek_in_pos[i][p][j][k];

      //................

      mas_end_xyd[p][0]=mas_end_xyd_pos[i][p][0];

      mas_end_xyd[p][1]=mas_end_xyd_pos[i][p][1];

      mas_end_xyd[p][2]=mas_end_xyd_pos[i][p][2];

     }

  }

//---------------------

void out_mas_ch(int x0,int y0,int di)

  {

   for(int i=0; i<4; i++)

      for(int j=0; j<8; j++)

        {

         if(mas_ch[i][j]== 1 && ((!revers && j==7)||(revers && j==0)))

            mas_ch[i][j]= 2;

         if(mas_ch[i][j]==-1 && ((!revers && j==0)||(revers && j==7)))

            mas_ch[i][j]=-2;

         switch(mas_ch[i][j])

           {

            case 1 :

               out_Checkers(i,j,x0,y0,di,true,false);

               break;

            case 2 :

               out_Checkers(i,j,x0,y0,di,true,true);

               break;

            case -1 :

               out_Checkers(i,j,x0,y0,di,false,false);

               break;

            case -2 :

               out_Checkers(i,j,x0,y0,di,false,true);

               break;

            default :

               ObjectDelete(0,pref+StringConcatenate("s",i,j));

               break;

           }

        }

  }

//---------------------

void get_stek_form_TL()

  {

   if(tek_pos_steka<kol_stek-1)

     {

      if(mas_end_xyd[tek_pos_steka][2]==0 && mas_end_xyd[tek_pos_steka+1][2]!=0)

        {

         int x1=mas_end_xyd[tek_pos_steka+1][0];

         int y1=mas_end_xyd[tek_pos_steka+1][1];

         int x2=mas_end_xyd[tek_pos_steka][0];

         int y2=mas_end_xyd[tek_pos_steka][1];

         if(revers)

           {

            x1=3-x1;

            y1=7-y1;

            x2=3-x2;

            y2=7-y2;

           }

         form_TL(x1,y1,x2,y2);

        }

     }

   else

      ObjectDelete(0,name_TL);

  }

//------------------------

void out_Panel(int x0,int y0,int di,int x_take,int y_take)

  {

// 2K25AB8 ?>4;>6:C

   out_Rect(9,9,x0-7*di-20,y0-10,7*di+320,clrBlack,"p",0,BORDER_FLAT,CORNER_LEFT_UPPER,clrNONE,STYLE_SOLID,2,false);

//.....................

   for(int i=0; i<4; i++) // 2K25AB8 @01>G85 (83@>2K5) :;5B:8

      for(int j=0; j<8; j++)

        {

         int i_=2*i;

         if(MathMod(j,2)>0)

            i_=2*i+1;

         int xi=x0-di*(7-i_);

         int yi=y0+di*(7-j);

         if(i==x_take && j==y_take)

            out_Rect(i,j,xi,yi,di+2,clr_Take,"r");

         else

            out_Rect(i,j,xi,yi,di+2,clr_Osn,"r");

        }

//.....................

   for(int i=0; i<4; i++) // 2K25AB8 D>=>2K5 :;5B:8

      for(int j=0; j<8; j++)

        {

         int i_=2*i+1;

         if(MathMod(j,2)>0)

            i_=2*i;

         int xi=x0-di*(7-i_);

         int yi=y0+di*(7-j);

         out_Rect(i,j,xi,yi,di+2,clr_Fon,"f");

        }

//.....................

   out_cif(x0,y0,di);

//.....................

// 2K25AB8 2@5<O

   LabelCreate(0,pref+"t",0,x0+di+10,y0+di*8+8,TimeToString(TimeLocal(),TIME_MINUTES),"Arial Black",12,clr_Text,0,ANCHOR_LEFT_LOWER);

  }

//----------------------

void out_cif(int x0,int y0,int di)

  {

   if(revers)

      for(int i=0; i<8; i++)

        {

         // 2K25AB8 >:>;> ?0=5;8 1C:2K A=87C 8 F8D@K A;520

         LabelCreate(0,pref+"b"+(string)i,0,x0-di*(7-i)+di/2,y0+di*8+8,mas_abc[7-i],"Arial Black",10,clr_Fon_But);

         LabelCreate(0,pref+"c"+(string)i,0,x0-di*7-10,y0+di*i+di/2,(string)(i+1),"Arial Black",10,clr_Fon_But);

        }

   else

      for(int i=0; i<8; i++)

        {

         // 2K25AB8 >:>;> ?0=5;8 1C:2K A=87C 8 F8D@K A;520

         LabelCreate(0,pref+"b"+(string)i,0,x0-di*(7-i)+di/2,y0+di*8+8,mas_abc[i],"Arial Black",10,clr_Text);

         LabelCreate(0,pref+"c"+(string)i,0,x0-di*7-10,y0+di*i+di/2,(string)(8-i),"Arial Black",10,clr_Text);

        }

  }

//-----------------------

void out_mini_pos(int x0,int y0,int n)

  {

   int di=5;

   out_Rect(8,8,x0-di*7-1,y0,di*8+4,clr_Osn,"m"+(string)n,1,BORDER_FLAT,CORNER_LEFT_UPPER,clrNONE,STYLE_SOLID,0);



   for(int i=0; i<4; i++)

      for(int j=0; j<8; j++)

        {

         int i_=2*i;

         if(MathMod(j,2)>0)

            i_=2*i+1;

         int xi=x0-di*(7-i_);

         int yi=y0+di*(7-j);

         color clr=0;

         int i1=i;

         int j1=j;

         if(revers)

           {

            i1=3-i;

            j1=7-j;

           }

         if(mas_pos[n][i1][j1]>0)

           {

            clr=clrWhite;

            out_Rect(i1,j1,xi,yi+1,di+2,clr,"m"+(string)n,0,BORDER_FLAT,CORNER_LEFT_UPPER,clrNONE,STYLE_SOLID,0);

           }

         else

            if(mas_pos[n][i1][j1]<0)

              {

               clr=clrBlack;

               out_Rect(i1,j1,xi,yi+1,di+2,clr,"m"+(string)n,0,BORDER_FLAT,CORNER_LEFT_UPPER,clrNONE,STYLE_SOLID,0);

              }

            else

               ObjectDelete(0,pref+StringConcatenate("m"+(string)n,i1,j1));

        }

  }

//-----------------------------

void find_krd_panel(int& x0,int& y0,int& di)

  {

   double max=WindowPriceMax();

   double min=WindowPriceMin();

   int x_max,y_max;

   int x_min,y_min;

   ChartTimePriceToXY(0,0,Time[0],max,x_max,y_max);

   ChartTimePriceToXY(0,0,Time[0],min,x_min,y_min);



   x0=600;

   y0=y_max+10;

   int d=y_min-y0-20;

   di=(int)MathFloor(1.0*d/8.0);

  }

//+------------------------------------------------------------------+

void out_Checkers(int i_,int j,int x0,int y0,int d,bool ch_white,bool damka=false)

  {

   color clr=clrBlack;

   if(ch_white)

      clr=clrWhite;



   int i=2*i_;

   if(MathMod(j,2)>0)

      i=2*i_+1;

   int x=x0-d*(7-i);

   int y=y0+d*(7-j);



   if(damka)

      LabelCreate(0,pref+StringConcatenate("s",i_,j),0,x+d/2,(int)MathCeil(y+d/2+d*0.03),"m","wingdings",(int)MathCeil(d*0.6),clr,-70);

   else

      LabelCreate(0,pref+StringConcatenate("s",i_,j),0,x+d/2,(int)MathCeil(y+d/2+d*0.03),"l","wingdings",(int)MathCeil(d*0.7),clr);

  }

//-----------------------

void out_Rect(int i,int j,int x, int y,int width,color clr_fon,string s,

              long             z_order=1,                // ?@8>@8B5B =0 =060B85 <KHLN

              ENUM_BORDER_TYPE border=BORDER_FLAT,       // B8? 3@0=8FK

              ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // C3>; 3@0D8:0 4;O ?@82O7:8

              color            clr=clrBlue,              // F25B ?;>A:>9 3@0=8FK (Flat)

              ENUM_LINE_STYLE  style=STYLE_SOLID,        // AB8;L ?;>A:>9 3@0=8FK

              int              line_width=2,             // B>;I8=0 ?;>A:>9 3@0=8FK

              bool             back=false,               // =0 704=5< ?;0=5

              bool             selection=false,          // 2K45;8BL 4;O ?5@5<5I5=89

              bool             hidden=true               // A:@KB 2 A?8A:5 >1J5:B>2

             )

  {



   int height=width;

   string name=pref+StringConcatenate(s,i,j);;

   if(ObjectFind(0,name)<0)

     {

      ObjectCreate(0,name,OBJ_RECTANGLE_LABEL,0,0,0);

      //--- CAB0=>28< B8? 3@0=8FK

      ObjectSetInteger(0,name,OBJPROP_BORDER_TYPE,border);

      //--- CAB0=>28< C3>; 3@0D8:0, >B=>A8B5;L=> :>B>@>3> 1C4CB >?@545;OBLAO :>>@48=0BK B>G:8

      ObjectSetInteger(0,name,OBJPROP_CORNER,corner);

      //--- CAB0=>28< F25B ?;>A:>9 @0<:8 (2 @568<5 Flat)

      ObjectSetInteger(0,name,OBJPROP_COLOR,clr);

      //--- CAB0=>28< AB8;L ;8=88 ?;>A:>9 @0<:8

      ObjectSetInteger(0,name,OBJPROP_STYLE,style);

      //--- CAB0=>28< B>;I8=C ?;>A:>9 3@0=8FK

      ObjectSetInteger(0,name,OBJPROP_WIDTH,line_width);

      //--- 2:;NG8< (true) 8;8 >B:;NG8< (false) @568< ?5@5<5I5=8O <5B:8 <KHLN

      ObjectSetInteger(0,name,OBJPROP_SELECTABLE,selection);

      ObjectSetInteger(0,name,OBJPROP_SELECTED,selection);

      //--- A:@>5< (true) 8;8 >B>1@078< (false) 8<O 3@0D8G5A:>3> >1J5:B0 2 A?8A:5 >1J5:B>2

      ObjectSetInteger(0,name,OBJPROP_HIDDEN,hidden);

      //--- CAB0=>28< ?@8>@8B5B =0 ?>;CG5=85 A>1KB8O =060B8O <KH8 =0 3@0D8:5

      ObjectSetInteger(0,name,OBJPROP_ZORDER,z_order);

     }

//--- >B>1@078< =0 ?5@54=5< (false) 8;8 704=5< (true) ?;0=5

   ObjectSetInteger(0,name,OBJPROP_BACK,back);



   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);

   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);

//--- CAB0=>28< @07<5@K <5B:8

   ObjectSetInteger(0,name,OBJPROP_XSIZE,width);

   ObjectSetInteger(0,name,OBJPROP_YSIZE,height);

//--- CAB0=>28< F25B D>=0

   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,clr_fon);

  }

//-------------------------------

bool LabelCreate(const long              chart_ID=0,               // ID 3@0D8:0

                 const string            name="Label",             // 8<O <5B:8

                 const int               sub_window=0,             // =><5@ ?>4>:=0

                 const int               x=0,                      // :>>@48=0B0 ?> >A8 X

                 const int               y=0,                      // :>>@48=0B0 ?> >A8 Y

                 const string            text="Label",             // B5:AB

                 const string            font="Arial",             // H@8DB

                 const int               font_size=10,             // @07<5@ H@8DB0

                 const color             clr=clrRed,               // F25B

                 const double            angle=0.0,                // =0:;>= B5:AB0

                 const ENUM_ANCHOR_POINT anchor=ANCHOR_CENTER, // A?>A>1 ?@82O7:8

                 const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // C3>; 3@0D8:0 4;O ?@82O7:8

                 const bool              back=false,               // =0 704=5< ?;0=5

                 const bool              selection=false,          // 2K45;8BL 4;O ?5@5<5I5=89

                 const bool              hidden=true,              // A:@KB 2 A?8A:5 >1J5:B>2

                 const long              z_order=0)                // ?@8>@8B5B =0 =060B85 <KHLN

  {

//--- A1@>A8< 7=0G5=85 >H81:8

   ResetLastError();

//--- A>74048< B5:AB>2CN <5B:C

   if(ObjectFind(chart_ID,name)<0)

      ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0);

//--- CAB0=>28< :>>@48=0BK <5B:8

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);

   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);

//--- CAB0=>28< C3>; 3@0D8:0, >B=>A8B5;L=> :>B>@>3> 1C4CB >?@545;OBLAO :>>@48=0BK B>G:8

   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);

//--- CAB0=>28< B5:AB

   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);

//--- CAB0=>28< H@8DB B5:AB0

   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);

//--- CAB0=>28< @07<5@ H@8DB0

   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);

//--- CAB0=>28< C3>; =0:;>=0 B5:AB0

   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);

//--- CAB0=>28< A?>A>1 ?@82O7:8

   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);

//--- CAB0=>28< F25B

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);

//--- >B>1@078< =0 ?5@54=5< (false) 8;8 704=5< (true) ?;0=5

   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);

//--- 2:;NG8< (true) 8;8 >B:;NG8< (false) @568< ?5@5<5I5=8O <5B:8 <KHLN

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

//--- A:@>5< (true) 8;8 >B>1@078< (false) 8<O 3@0D8G5A:>3> >1J5:B0 2 A?8A:5 >1J5:B>2

   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);

//--- CAB0=>28< ?@8>@8B5B =0 ?>;CG5=85 A>1KB8O =060B8O <KH8 =0 3@0D8:5

   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);

//--- CA?5H=>5 2K?>;=5=85

   return(true);

  }

//+------------------------------------------------------------------+

bool ButtonCreate(const string  name="button",      // 8<O :=>?:8

                  const int x=0,                    // :>>@48=0B0 ?> >A8 X

                  const int y=0,                    // :>>@48=0B0 ?> >A8 Y

                  const int width=0,                // H8@8=0 :=>?:8

                  const int height=0,               // 2KA>B0 :=>?:8

                  const string text="",             // B5:AB

                  const int font_size=10,            // @07<5@ H@8DB0

                  const color  back_clr=clrYellow,    // F25B D>=0

                  const string  font="Arial Black",     // H@8DB

                  const bool back=false,            // =0 704=5< ?;0=5

                  const long z_order=1,             // ?@8>@8B5B =0 =060B85 <KHLN

                  const color clr=clrBlack,          // F25B B5:AB0

                  const bool state=false,           // =060B0/>B60B0

                  const color border_clr=clrBlue,   // F25B 3@0=8FK

                  //------------------------------------------------

                  const bool selection=false,       // 2K45;8BL 4;O ?5@5<5I5=89

                  const bool hidden=false)          // A:@KB 2 A?8A:5 >1J5:B>2

  {

//--- A1@>A8< 7=0G5=85 >H81:8

   ResetLastError();



   if(ObjectFind(name)==-1)

     {

      //--- A>74048< :=>?:C

      ObjectCreate(0,name,OBJ_BUTTON,0,0,0);

      //--- CAB0=>28< C3>; 3@0D8:0, >B=>A8B5;L=> :>B>@>3> 1C4CB >?@545;OBLAO :>>@48=0BK B>G:8

      ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);

      //--- A:@>5< (true) 8;8 >B>1@078< (false) 8<O 3@0D8G5A:>3> >1J5:B0 2 A?8A:5 >1J5:B>2

      ObjectSetInteger(0,name,OBJPROP_HIDDEN,hidden);

      //--- CAB0=>28< ?@8>@8B5B =0 ?>;CG5=85 A>1KB8O =060B8O <KH8 =0 3@0D8:5

      ObjectSetInteger(0,name,OBJPROP_ZORDER,z_order);

     }

//--- CAB0=>28< F25B B5:AB0

   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);

//--- CAB0=>28< @07<5@ H@8DB0

   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,font_size);

//--- CAB0=>28< H@8DB B5:AB0

   ObjectSetString(0,name,OBJPROP_FONT,font);

//--- >B>1@078< =0 ?5@54=5< (false) 8;8 704=5< (true) ?;0=5

   ObjectSetInteger(0,name,OBJPROP_BACK,back);

//--- CAB0=>28< F25B 3@0=8FK

   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,border_clr);

//--- CAB0=>28< F25B D>=0

   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,back_clr);

   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);



   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);

   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);

//--- CAB0=>28< @07<5@ :=>?:8

   ObjectSetInteger(0,name,OBJPROP_XSIZE,width);

   ObjectSetInteger(0,name,OBJPROP_YSIZE,height);

   ObjectSetString(0,name,OBJPROP_TEXT,text);

   ObjectSetInteger(0,name,OBJPROP_STATE,state);

//--- 2:;NG8< (true) 8;8 >B:;NG8< (false) @568< ?5@5<5I5=8O :=>?:8 <KHLN

   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,selection);

   ObjectSetInteger(0,name,OBJPROP_SELECTED,selection);

//--- CA?5H=>5 2K?>;=5=85

   return(true);

  }

//+------------------------------------------------------------------+

bool ButtonCreate_ch(const string  name="button",      // 8<O :=>?:8

                     const int x=0,                    // :>>@48=0B0 ?> >A8 X

                     const int y=0,                    // :>>@48=0B0 ?> >A8 Y

                     const int width=0,                // H8@8=0 :=>?:8

                     const int height=0,               // 2KA>B0 :=>?:8

                     const color  back_clr=clrBlack,    // F25B D>=0

                     const string text="",             // B5:AB

                     const string  font="",     // H@8DB

                     const int font_size=10,            // @07<5@ H@8DB0

                     const color clr=clrBlack,          // F25B B5:AB0

                     const bool state=false,           // =060B0/>B60B0

                     const color border_clr=clrBlue,   // F25B 3@0=8FK

                     //------------------------------------------------

                     const bool selection=false,       // 2K45;8BL 4;O ?5@5<5I5=89

                     const bool back=false,            // =0 704=5< ?;0=5

                     const bool hidden=false,          // A:@KB 2 A?8A:5 >1J5:B>2

                     const long z_order=1)             // ?@8>@8B5B =0 =060B85 <KHLN

  {

//--- A1@>A8< 7=0G5=85 >H81:8

   ResetLastError();



   if(ObjectFind(name)==-1)

     {

      //--- A>74048< :=>?:C

      ObjectCreate(0,name,OBJ_BUTTON,0,0,0);

      //--- CAB0=>28< C3>; 3@0D8:0, >B=>A8B5;L=> :>B>@>3> 1C4CB >?@545;OBLAO :>>@48=0BK B>G:8

      ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_LEFT_UPPER);

      //--- A:@>5< (true) 8;8 >B>1@078< (false) 8<O 3@0D8G5A:>3> >1J5:B0 2 A?8A:5 >1J5:B>2

      ObjectSetInteger(0,name,OBJPROP_HIDDEN,hidden);

      //--- CAB0=>28< ?@8>@8B5B =0 ?>;CG5=85 A>1KB8O =060B8O <KH8 =0 3@0D8:5

      ObjectSetInteger(0,name,OBJPROP_ZORDER,z_order);

     }

//--- CAB0=>28< F25B B5:AB0

   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);

//--- CAB0=>28< @07<5@ H@8DB0

   ObjectSetInteger(0,name,OBJPROP_FONTSIZE,font_size);

//--- CAB0=>28< H@8DB B5:AB0

   ObjectSetString(0,name,OBJPROP_FONT,font);

//--- >B>1@078< =0 ?5@54=5< (false) 8;8 704=5< (true) ?;0=5

   ObjectSetInteger(0,name,OBJPROP_BACK,back);

//--- CAB0=>28< F25B 3@0=8FK

   ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,border_clr);

//--- CAB0=>28< F25B D>=0

   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,back_clr);

   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);



   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);

   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);

//--- CAB0=>28< @07<5@ :=>?:8

   ObjectSetInteger(0,name,OBJPROP_XSIZE,width);

   ObjectSetInteger(0,name,OBJPROP_YSIZE,height);

   ObjectSetString(0,name,OBJPROP_TEXT,text);

   ObjectSetInteger(0,name,OBJPROP_STATE,state);

//--- 2:;NG8< (true) 8;8 >B:;NG8< (false) @568< ?5@5<5I5=8O :=>?:8 <KHLN

   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,selection);

   ObjectSetInteger(0,name,OBJPROP_SELECTED,selection);

//--- CA?5H=>5 2K?>;=5=85

   return(true);

  }

//+------------------------------------------------------------------+

void OnChartEvent(const int id,const long &lparam,const double &dparam,const string &sparam)

  {

// ?@>F54C@0 2K7K205BAO 2> 2@5<O :.-;. 459AB28O >?5@0B>@0

   ResetLastError();//--- A1@>A8< 7=0G5=85 >H81:8

//--- ?@>25@:0 A>1KB8O =060B8O :=>?:8 <KH8 =0 >1J5:B5

   if(id==CHARTEVENT_OBJECT_CLICK)

     {

      if(StringSubstr(sparam,0,4)==pref+"y") // =060B> ?>425@645=85 C40;5=8O >4=>9 <8:@>?>78F88

        {

         int i=StrToInteger(StringSubstr(sparam,6,1));

         del_one_pos(i);

         out_mas_pos();

         EventSetMillisecondTimer(1000);

         return;

        }

      else

        {

         int j=0;

         for(j=0; j<kol_min_pos; j++)

            if(ObjectFind(but_yes+(string)j)>=0)

               break;

         if(j<kol_min_pos)

           {

            out_mas_pos();

            EventSetMillisecondTimer(1000);

            return;

           }

        }

      //........................................................

      if(sparam==but_beg) // =060B0 :=>?:0 "=0G0;L=0O ?>78F8O"

        {

         //revers=false;

         //ObjectSetInteger(0,but_rev,OBJPROP_BGCOLOR,clr_Fon_off);

         Begin_pos();

         out_mas_ch(x0_,y0_,di_);

         if(game)

           {

            ust_checkers=0;

            ObjectDelete(0,but_checkers+"t");

           }

         ArrayInitialize(mas_stek,0);

         end_stek=kol_stek;

         tek_pos_steka=end_stek;

         put_stek();

         X_Take=-1;

         Y_Take=-1;

         out_Panel(x0_,y0_,di_,X_Take,Y_Take);

         ObjectDelete(0,name_TL);

         return;

        }

      if(sparam==but_del_all) // =060B0 :=>?:0 Clean (AB5@5BL ?>;5)

        {

         app=0;

         out_app(app);

         revers=false;

         ObjectSetInteger(0,but_rev,OBJPROP_BGCOLOR,clr_Fon_off);

         if(game)

           {

            ust_checkers=0;

            ObjectDelete(0,but_checkers+"t");

           }

         ArrayInitialize(mas_ch,0);

         out_mas_ch(x0_,y0_,di_);



         ArrayInitialize(mas_stek,0);

         end_stek=kol_stek;

         tek_pos_steka=end_stek;

         clr_strel();

         X_Take=-1;

         Y_Take=-1;

         out_Panel(x0_,y0_,di_,X_Take,Y_Take);

         ObjectDelete(0,name_TL);

         return;

        }

      if(sparam==but_left)  // AB@5;:0 2;52>

        {

         if(tek_pos_steka<kol_stek)

            tek_pos_steka++;

         get_stek();

         out_mas_ch(x0_,y0_,di_);

         clr_strel();



         out_Panel(x0_,y0_,di_,X_Take,Y_Take);

         out_ust_ch();

         get_stek_form_TL();

         return;

        }

      if(sparam==but_right) // AB@5;:0 2?@02>

        {

         if(tek_pos_steka>end_stek)

            tek_pos_steka--;

         get_stek();

         out_mas_ch(x0_,y0_,di_);

         clr_strel();



         out_Panel(x0_,y0_,di_,X_Take,Y_Take);

         out_ust_ch();

         get_stek_form_TL();

         return;

        }

      if(sparam==but_ust) // =060B0 :=>?:0 game/set

        {

         game=!game;

         if(game)

           {

            ObjectSetString(0,but_ust,OBJPROP_TEXT,"Game");

            ObjectSetInteger(0,but_ust,OBJPROP_FONTSIZE,11);

            ObjectSetInteger(0,but_ust,OBJPROP_BGCOLOR,clr_Fon_But);

            ust_checkers=0;

            ObjectDelete(0,but_checkers+"t");



            ArrayInitialize(mas_stek,0);

            end_stek=kol_stek;

            tek_pos_steka=end_stek;

            put_stek();

            get_stek_form_TL();

            //.........................

            put_mas_pos(); // 70?8A0BL 4>A:C 2 <8:@>?>78F8N (?>A;5 =>2>9 CAB0=>2:8 H0H5:)

            out_mas_pos();

           }

         else

           {

            ObjectSetString(0,but_ust,OBJPROP_TEXT,"Set");

            ObjectSetInteger(0,but_ust,OBJPROP_FONTSIZE,15);

            ObjectSetInteger(0,but_ust,OBJPROP_BGCOLOR,clrRed);

            ust_checkers=0;

            out_ust_ch_cicle();

            ObjectDelete(0,name_TL);

           }

         return;

        }

      if(!game && sparam==but_checkers) // =060B> 4>?.?>;5

        {

         out_ust_ch_cicle();

         return;

        }

      if(sparam==but_rev) // =060B0 :=>?:0 @525@A

        {

         revers=!revers;

         if(revers)

            ObjectSetInteger(0,but_rev,OBJPROP_BGCOLOR,clr_Fon_But);

         else

            ObjectSetInteger(0,but_rev,OBJPROP_BGCOLOR,clr_Fon_off);



         Revers_pos();

         out_mas_ch(x0_,y0_,di_);

         out_cif(x0_,y0_,di_);

         out_mas_pos();

         X_Take=3-X_Take;

         Y_Take=7-Y_Take;

         out_Panel(x0_,y0_,di_,X_Take,Y_Take);

         out_ust_ch();

         get_stek_form_TL();

         return;

        }

      if(StringSubstr(sparam,0,4)==pref+"r")  // =060B0 :;5B:0 =0 ?>;5

        {

         // >?@545;8BL 5Q :>>@48=0BK

         int i=StrToInteger(StringSubstr(sparam,4,1));

         int j=StrToInteger(StringSubstr(sparam,5,1));

         if(i>=0 && i<4 && j>=0 && j<8)

            if(game)  // @568< 83@K

              {

               if(mas_ch[i][j]==0)  // CAB0=>28BL H0H:C 87 4>?. ?>;O

                 {

                  mas_ch[i][j]=ust_checkers;

                  ust_checkers=0;

                  out_ust_ch();

                  X_Take=i;

                  Y_Take=j;

                  out_Panel(x0_,y0_,di_,X_Take,Y_Take);

                 }

               else

                 {

                  ust_checkers=mas_ch[i][j]; // C1@0BL H0H:C 2 4>?. ?>;5

                  mas_ch[i][j]=0;

                  out_ust_ch();

                  X_Take=i;

                  Y_Take=j;

                  out_Panel(x0_,y0_,di_,X_Take,Y_Take);

                 }

               put_stek();

               out_mas_ch(x0_,y0_,di_);

               get_stek_form_TL();

              }

            else // @568< CAB0=>2:8 H0H5:

              {

               if(mas_ch[i][j]==0)

                  mas_ch[i][j]=ust_checkers;

               else

                  mas_ch[i][j]=0;

               X_Take=-1;

               Y_Take=-1;

               out_Panel(x0_,y0_,di_,X_Take,Y_Take);

               out_mas_ch(x0_,y0_,di_);

              }

         return;

        }

      if(sparam==but_put) // =060B0 :=>?:0 70?8A0BL B5:CICN 4>A:C 2 <0AA82 <8:@>?>78F89

        {

         put_mas_pos();

         out_mas_pos();

         return;

        }

      if(sparam==but_clr) // =060B0 :=>?:0 C40;5=85 2A5E <8:@>?>78F89

        {

         init_mas_pos();

         out_mas_pos();

         return;

        }

      if(StringSubstr(sparam,0,10)==pref+"pos_del") // =060B> C40;5=85 >4=>9 <8:@>?>78F88

        {

         int i=StrToInteger(StringSubstr(sparam,10,1));

         ObjectDelete(but_del_pos+(string)i);

         LabelCreate(0,but_yes+(string)i,0,880,45*(i+1)+60,"?","Arial Black",10,clr_Text);

         EventKillTimer();

         return;

        }

      if(StringSubstr(sparam,0,4)==pref+"m") // =060B0 <8:@>?>78F8O (GB5=85)

        {

         int i=StrToInteger(StringSubstr(sparam,4,1));

         get_mas_pos(i);

         out_mas_ch(x0_,y0_,di_);

         //....................

         if(tek_pos_steka>=kol_stek)

            return;

         ust_checkers=mas_end_xyd[tek_pos_steka][2];

         out_ust_ch();

         //....................

         if(revers)

           {

            X_Take=3-mas_end_xyd[tek_pos_steka][0];

            Y_Take=7-mas_end_xyd[tek_pos_steka][1];

           }

         else

           {

            X_Take=mas_end_xyd[tek_pos_steka][0];

            Y_Take=mas_end_xyd[tek_pos_steka][1];

           }

         out_Panel(x0_,y0_,di_,X_Take,Y_Take);

         get_stek_form_TL();

         return;

        }

     }

  }

//------------------------

void out_mas_pos()

  {

   int kol_pos_=0;

   for(int i=0; i<kol_min_pos; i++)

      if(mas_id_pos[i]>0)

         kol_pos_++;

//..........................

   for(int i=0; i<kol_min_pos; i++)

      if(mas_id_pos[i]>0)

        {

         LabelCreate(0,but_pos+(string)i,0,810,45*(i+1)+60,(string)(kol_pos_-i),"Arial Black",12,clr_Text);

         LabelCreate(0,but_del_pos+(string)i,0,880,45*(i+1)+60,"X","Arial Black",10,clr_Text);

         ObjectDelete(but_yes+(string)i);

         out_mini_pos(860,45*(i+1)+40,i);

        }

      else

        {

         if(ObjectFind(0,but_pos+(string)i)>=0)

            ObjectDelete(but_pos+(string)i);

         ObjectsDeleteAll(0,pref+"m"+(string)i);

         if(ObjectFind(0,but_del_pos+(string)i)>=0)

            ObjectDelete(0,but_del_pos+(string)i);

         if(ObjectFind(0,but_yes+(string)i)>=0)

            ObjectDelete(0,but_yes+(string)i);

        }

  }

//----------------------------

void out_ust_ch_cicle()

  {

// CAB0=>28BL A;54CNI89 B8? H0H:8 2 4>?. ?>;5

   switch(ust_checkers)

     {

      case -1 :

         ust_checkers= 2;

         LabelCreate(0,but_checkers+"t",0,700+64/2,240+64/2,"m","wingdings",35,clrWhite,-70);

         break;

      case  1 :

         ust_checkers=-1;

         LabelCreate(0,but_checkers+"t",0,700+64/2,240+64/2,"l","wingdings",40,clrBlack);

         break;

      case  2 :

         ust_checkers=-2;

         LabelCreate(0,but_checkers+"t",0,700+64/2,240+64/2,"m","wingdings",35,clrBlack,-70);

         break;

      default :

         ust_checkers= 1;

         LabelCreate(0,but_checkers+"t",0,700+64/2,240+64/2,"l","wingdings",40,clrWhite);

         break;

     }

  }

//---------------------

void out_ust_ch()

  {

// CAB0=>28BL H0H:C 2 4>?. ?>;5

   switch(ust_checkers)

     {

      case  1 :

         LabelCreate(0,but_checkers+"t",0,700+64/2,240+64/2,"l","wingdings",40,clrWhite);

         break;

      case  2 :

         LabelCreate(0,but_checkers+"t",0,700+64/2,240+64/2,"m","wingdings",35,clrWhite,-70);

         break;

      case -1 :

         LabelCreate(0,but_checkers+"t",0,700+64/2,240+64/2,"l","wingdings",40,clrBlack);

         break;

      case -2 :

         LabelCreate(0,but_checkers+"t",0,700+64/2,240+64/2,"m","wingdings",35,clrBlack,-70);

         break;

      default :

         ObjectDelete(0,but_checkers+"t");

         break;

     }

  }

//---------------------

void Out_TL(datetime t1, double pr1, datetime t2, double pr2)

  {

   string name=name_TL;

   if(ObjectFind(name)<0)

      ObjectCreate(name,OBJ_TREND,0,0,0,0,0);



   ObjectSet(name,OBJPROP_TIME1,t1);

   ObjectSet(name,OBJPROP_TIME2,t2);

   ObjectSet(name,OBJPROP_PRICE1,pr1);

   ObjectSet(name,OBJPROP_PRICE2,pr2);

   ObjectSet(name,OBJPROP_COLOR,clr_TL);

   ObjectSet(name,OBJPROP_RAY,0);

   ObjectSet(name,OBJPROP_WIDTH,2);

   ObjectSet(name,OBJPROP_STYLE,STYLE_SOLID);

   ObjectSetInteger(0,name,OBJPROP_SELECTED,false);

   ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false);

  }

//------------------------------------

void form_TL(int x1,int y1,int x2,int y2)

  {

   datetime t1=0,t2=0;

   double pr1=0,pr2=0;



   calc_t_pr(x1,y1,t1,pr1);

   calc_t_pr(x2,y2,t2,pr2);



   Out_TL(t1, pr1, t2, pr2);

  }

//--------------------------

void calc_t_pr(int x,int y, datetime& t,double& pr)

  {

   int i=2*x;

   if(MathMod(y,2)>0)

      i=2*x+1;



   int x1=x0_-di_*(7-i);

   int y1=y0_+di_*(7-y);



   x1=x1+di_/2;

   y1=(int)MathCeil(y1+di_/2+di_*0.03);



   int sub=0;

   ChartXYToTimePrice(0,x1,y1,sub,t,pr);

  }

//--------------------

//+------------------------------------------------------------------+

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---