daily pastebin goal
5%
SHARE
TWEET

Untitled

a guest Sep 13th, 2017 73 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. struct hra
  2. {
  3.   bool Koniec, Animacie;
  4.   int X,Y,Pocet,Rozlisenie;
  5.   AnsiString Resolution;
  6. };
  7.  
  8. struct mina
  9. {
  10.  bool Otocena;
  11.  int Faza, FVybuch;
  12.  int Hodnota;
  13.  
  14. };
  15.  
  16. class TPlocha
  17. {
  18. private:
  19.   mina **Mina;
  20.   hra Hra;
  21.   int bumX, bumY;
  22. //////////////////
  23.  Graphics::TBitmap *obr[6];
  24.  Graphics::TBitmap *vybuch[7];
  25. //////////////////
  26. public:
  27.   int bum;
  28.   TPlocha(int nHraX, int nHraY);
  29.   ~TPlocha();
  30.   void Nastav(int nHraPocet, int nHraRozlisenie, AnsiString nHraResolution);
  31.   void Inic(int x, int y);
  32.   void PolozMinu();
  33.   void Kresli(TCanvas *Canvas);
  34.   void Kresli(TCanvas *Canvas, int y, int x);
  35.   void Otoc(TCanvas *Canvas,TTimer *Timer, int y, int x, TTimer *Casomiera);
  36.   void OtocPravy(TCanvas *Canvas, int y, int x);
  37.   bool JeMina(int y, int x);
  38.   void OtocLavy(TCanvas *Canvas,TTimer *Timer, int y, int x, TTimer *Casomiera);
  39.   int DajFazu(int y, int x);
  40.   void NeanVybuch(TCanvas *Canvas);
  41.   void KresliVybuch(TCanvas *Canvas, int y, int x);
  42.   void NastavVybuch(int nbumY, int nbumX);
  43.   void AnVybuch(TCanvas *Canvas, TTimer *Timer);
  44.   void VybuchPole(TCanvas *Canvas, int y, int x);
  45.   void Koniec();
  46.   bool DajKoniec();
  47.   bool JeKoniec();
  48.   bool JePocitadlo();
  49.   int DajRozlisenie();
  50. };
  51.  
  52.  
  53. TPlocha::TPlocha(int nHraX, int nHraY)
  54. {
  55.  Hra.X=nHraX;
  56.  Hra.Y=nHraY;
  57.  
  58.  Mina=new mina*[Hra.Y];
  59.  
  60.  for (int i=0; i<Hra.Y; i++)
  61.    Mina[i]=new mina[Hra.X];
  62. }
  63. void TPlocha::Nastav(int nHraPocet, int nHraRozlisenie, AnsiString nHraResolution)
  64. {
  65.  Hra.Pocet=nHraPocet;
  66.  Hra.Rozlisenie=nHraRozlisenie;
  67.  Hra.Resolution=nHraResolution;
  68.  Hra.Koniec=false;
  69.  bum=0;
  70.  
  71.  Inic(Hra.X, Hra.Y);
  72. }
  73.  
  74.  
  75. void TPlocha::NastavVybuch(int nbumY, int nbumX)
  76. {
  77. bumX=nbumX;
  78. bumY=nbumY;
  79. }
  80.  
  81. TPlocha::~TPlocha()
  82. {
  83. /* destruktor sa upravi toto ide von
  84. for (int y=0; y<Hra.Y; y++)
  85.    for (int x=0; x<Hra.X; x++)
  86.      {
  87.        for (int a=0; a<6; a++)
  88.        {
  89.        delete Mina[y][x].obr[a];
  90.        }
  91.  
  92.        if (Mina[y][x].Hodnota==10)
  93.          for (int a=0; a<7; a++)
  94.          {
  95.          delete Mina[y][x].vybuch[a];
  96.          }
  97.      }
  98. */
  99. /////////////// Miesto toho staci takto
  100. for (int a=0; a<6; a++)
  101.        {
  102.        delete obr[a];
  103.        }
  104.  
  105.          for (int a=0; a<7; a++)
  106.          {
  107.          delete vybuch[a];
  108.          }
  109. ////////////////
  110.  for (int y=0;y<Hra.Y;y++)
  111.    delete[] Mina[y];
  112.  
  113. }
  114.  
  115.  
  116. void TPlocha::PolozMinu()
  117. {
  118. int dx,dy;
  119.  
  120.   dx=random(Hra.X);
  121.   dy=random(Hra.Y);
  122.  
  123.   if (Mina[dy][dx].Hodnota==10)
  124.     {
  125.     PolozMinu();
  126.     }
  127.     else
  128.       {
  129.       Mina[dy][dx].Hodnota=10;
  130.       }
  131.  
  132. }
  133.  
  134.  
  135. void TPlocha::Inic(int x, int y)
  136. {
  137. int pocet;
  138. ///////////////
  139.       obr[0]=new Graphics::TBitmap;
  140.       obr[0]->LoadFromFile(Hra.Resolution+"/empty.bmp");
  141.       obr[1]=new Graphics::TBitmap;
  142.       obr[1]->LoadFromFile(Hra.Resolution+"/LB/"+Mina[j][i].Hodnota+".bmp");
  143.       obr[2]=new Graphics::TBitmap;
  144.       obr[2]->LoadFromFile(Hra.Resolution+"/RB/F.bmp");
  145.       obr[3]=new Graphics::TBitmap;
  146.       obr[3]->LoadFromFile(Hra.Resolution+"/RB/O.bmp");
  147.       obr[4]=new Graphics::TBitmap;
  148.       obr[4]->LoadFromFile(Hra.Resolution+"/RB/A.bmp");
  149.       obr[5]=new Graphics::TBitmap;
  150.       obr[5]->LoadFromFile(Hra.Resolution+"/RB/B.bmp");
  151.  
  152.       vybuch[a]=new Graphics::TBitmap;
  153.       vybuch[a]->LoadFromFile(Hra.Resolution+"/V/"+a+".bmp");
  154. /////////////////
  155.   for (int j=0; j<y; j++)
  156.     for (int i=0; i<x; i++)
  157.       {
  158.       Mina[j][i].Hodnota=9;
  159.       Mina[j][i].Faza=0;
  160.       Mina[j][i].FVybuch=0;
  161.       }
  162.  
  163.   for (int i=0; i<Hra.Pocet; i++)
  164.     PolozMinu();
  165.  
  166.   for (int j=0; j<y; j++)
  167.     for (int i=0; i<x; i++)
  168.       {
  169.       if (Mina[j][i].Hodnota!=10)
  170.         {
  171.         pocet=0;
  172.  
  173.         for (int dj=(-1); dj<2; dj++)
  174.           for (int di=(-1); di<2; di++)
  175.             {
  176.             if (  ((dj+j)>=0 && (dj+j)<y ) && ((di+i)>=0 && (di+i)<x )  )
  177.                {
  178.                if (Mina[j+dj][i+di].Hodnota==10)
  179.                  pocet++;
  180.                }
  181.             }
  182.  
  183.         Mina[j][i].Hodnota=pocet;
  184.         }
  185.  
  186. ////////////
  187.  
  188. /////////////
  189.  
  190.  /* Toto tu uz netreba ak spravne chapem
  191.  
  192.      if (Mina[j][i].Hodnota==10)
  193.         {
  194.         for (int a=0; a<7; a++)
  195.           {
  196.  
  197.           }
  198.         }
  199.  
  200. */
  201.       }
  202. }
  203.  
  204. void TPlocha::Kresli(TCanvas *Canvas)
  205. {
  206.  for (int j=0; j<Hra.Y; j++)
  207.    for (int i=0; i<Hra.X; i++)
  208.      {
  209.      Kresli(Canvas,j,i);
  210.      }
  211. }
  212.  
  213. void TPlocha::Kresli(TCanvas *Canvas, int y, int x)
  214. {
  215. /////////////
  216. obr[Mina[y][x].Faza]->Transparent=true;
  217. Canvas->Draw(x*Hra.Rozlisenie,y*Hra.Rozlisenie,obr[Mina[y][x].Faza]);
  218. /////////////////
  219. }
  220.  
  221. void TPlocha::KresliVybuch(TCanvas *Canvas, int y, int x)
  222. {
  223. ///////////////
  224. vybuch[Mina[y][x].FVybuch]->Transparent=true;
  225. Canvas->Draw(x*Hra.Rozlisenie,y*Hra.Rozlisenie,vybuch[Mina[y][x].FVybuch]);
  226. //////////////
  227. }
  228.  
  229. void TPlocha::Otoc(TCanvas *Canvas,TTimer *Timer, int y, int x, TTimer *Casomiera)
  230. {
  231. if (Mina[y][x].Faza==0)
  232.   {
  233.   Mina[y][x].Faza=1;
  234.   Kresli(Canvas,y,x);
  235.   }
  236.  
  237. if (Mina[y][x].Hodnota==0)
  238.   {
  239.   for (int i=-1; i<2; i++)
  240.     for (int j=-1; j<2; j++)
  241.        if (  ((y+j)>=0 && (y+j)<Hra.Y ) && ((x+i)>=0 && (x+i)<Hra.X )  )
  242.           {
  243.           if (Mina[y+j][x+i].Faza==0)
  244.             Otoc(Canvas,Timer, y+j, x+i, Casomiera);
  245.           }
  246.   Kresli(Canvas,y,x);
  247.   }
  248.   else
  249.     if (Mina[y][x].Hodnota==10)
  250.       {
  251.       Koniec();
  252.       NastavVybuch(y,x);
  253.       Timer->Enabled=true;
  254.       Casomiera->Enabled=false;
  255.       }
  256.  
  257.  
  258. }
  259.  
  260. void TPlocha::OtocPravy(TCanvas *Canvas, int y, int x)
  261. {
  262. if (Mina[y][x].Faza!=1)
  263.   {
  264.   Mina[y][x].Faza++;
  265.  
  266.   if (Mina[y][x].Faza==1)
  267.     Mina[y][x].Faza++;
  268.  
  269.   Mina[y][x].Faza=Mina[y][x].Faza%6;
  270.  
  271.   Kresli(Canvas, y, x);
  272.   }
  273. }
  274.  
  275. void TPlocha::OtocLavy(TCanvas *Canvas,TTimer *Timer, int y, int x, TTimer *Casomiera)
  276. {
  277.   int pocet=0;
  278.  
  279.         for (int dy=(-1); dy<2; dy++)
  280.           for (int dx=(-1); dx<2; dx++)
  281.             {
  282.             if (  ((dy+y)>=0 && (dy+y)<Hra.Y ) && ((dx+x)>=0 && (dx+x)<Hra.X )  )
  283.                {
  284.                if (Mina[y+dy][x+dx].Faza==2)
  285.                  pocet++;
  286.                }
  287.             }
  288.   if (Mina[y][x].Hodnota==pocet)
  289.     {
  290.     for (int dy=(-1); dy<2; dy++)
  291.       for (int dx=(-1); dx<2; dx++)
  292.         if (  ((dy+y)>=0 && (dy+y)<Hra.Y ) && ((dx+x)>=0 && (dx+x)<Hra.X )  )
  293.           if (Mina[dy+y][dx+x].Faza==0)
  294.             Otoc(Canvas,Timer, y+dy, x+dx, Casomiera);
  295.  
  296.     }
  297.  
  298. }
  299.  
  300. bool TPlocha::JeMina(int y, int x)
  301. {
  302. return ((Mina[y][x].Hodnota==10) && (Mina[y][x].Faza==0));
  303. }
  304.  
  305. int TPlocha::DajFazu(int y, int x)
  306. {
  307. return Mina[y][x].Faza;
  308. }
  309.  
  310. void TPlocha::NeanVybuch(TCanvas *Canvas)
  311. {
  312. for (int y=0; y<Hra.Y; y++)
  313.   for (int x=0; x<Hra.X; x++)
  314.     {
  315.     if (Mina[y][x].Hodnota==10)
  316.       {
  317.       KresliVybuch(Canvas, y, x);
  318.       }
  319.     }
  320. }
  321.  
  322. void TPlocha::VybuchPole(TCanvas *Canvas, int y, int x)
  323. {
  324. if (Mina[y][x].FVybuch<6)
  325.   {
  326.   Mina[y][x].FVybuch++;
  327.   KresliVybuch(Canvas, y, x);
  328.   }
  329. }
  330.  
  331. void TPlocha::AnVybuch(TCanvas *Canvas, TTimer *Timer)
  332. {
  333. bool timer=false;
  334.  
  335. for (int y=0; y<Hra.Y; y++)
  336.   for (int x=0; x<Hra.X; x++)
  337.     {
  338.     if ( fabs(y-bumY)+fabs(x-bumX)<bum )
  339.       if (y>=0 && y<Hra.Y && x>=0 && x<Hra.X)
  340.         if (Mina[y][x].Hodnota==10)
  341.           VybuchPole(Canvas, y, x);
  342.     }
  343. for (int y=0; y<Hra.Y; y++)
  344.   for (int x=0; x<Hra.X; x++)
  345.     if (Mina[y][x].Hodnota==10)
  346.       if (Mina[y][x].FVybuch!=6)
  347.         timer=true;
  348.  
  349. Timer->Enabled=timer;
  350. }
  351.  
  352. void TPlocha::Koniec()
  353. {
  354. Hra.Koniec=true;
  355. }
  356.  
  357. bool TPlocha::DajKoniec()
  358. {
  359. return Hra.Koniec;
  360. }
  361.  
  362. bool TPlocha::JeKoniec()
  363. {
  364. int pocet=0;
  365.  
  366. for (int y=0; y<Hra.Y; y++)
  367.   for (int x=0; x<Hra.X; x++)
  368.     {
  369.     if (Mina[y][x].Faza==0 || Mina[y][x].Faza==2)
  370.       pocet++;
  371.     }
  372.  
  373. if (pocet==Hra.Pocet) return true;
  374.   else
  375.     return false;
  376. }
  377.  
  378. bool TPlocha::JePocitadlo()
  379. {
  380. int pocet=0;
  381.  
  382. for (int y=0; y<Hra.Y; y++)
  383.   for (int x=0; x<Hra.X; x++)
  384.     {
  385.     if (Mina[y][x].Faza==2)
  386.       pocet++;
  387.     }
  388.  
  389. return (pocet<=Hra.Pocet);
  390. }
  391.  
  392. int TPlocha::DajRozlisenie()
  393. {
  394. return Hra.Rozlisenie;
  395. }
RAW Paste Data
Top