Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
6
Добавлен:
30.05.2020
Размер:
6.46 Кб
Скачать
//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Piece.h"
#pragma package(smart_init)


//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
static inline void ValidCtrCheck(tPiece *)  {
  new tPiece(NULL, 0, clBlack);
  return;
}


//---------------------------------------------------------------------------
__fastcall tPiece::tPiece(TComponent* Owner, int PieceType, TColor Background) : TPanel(Owner) {
  BevelInner = bvNone;
  BevelOuter = bvNone;
  BackColor = Background;
  Kind = PieceType;

  switch (Kind)  {
    case  1:
    case  2: Color = clRed;                        // 1. Square
             Height = 25 * 2;                      //   XX
             Width = 25 * 2;                       //   XX
             break;
    case  3: Width = 25 * 3;
    case  4: Color = clBlue;                       // 2. Line 2-4
             Height = 25;                          //   XXxx
             if(Kind == 4) Width = 25 * 4;
             break;
    case  5:
    case  6: Color = clFuchsia;                    // 3. Half Cross
            Height = 25 * 2;                      //     0X2   X1   XXX   0X
            Width = 25 * 3;                       //     XXX   XX   3X5   XX
            break;                                //           X5         4X
    case  7:
    case  8: Color = clGreen;                      // 4. Right Hitch    5. Left Hitch
            Height = 25 * 2;                      //     0XX   X1          XX2   0X
            Width = 25 * 3;                       //     XX5   XX          3XX   XX
            break;                                //           4X                X5
    case  9:
    case 10: Color = clTeal;                      // 6. Right "L"         7. Left "L"
            Height = 25 * 3;                      //  XX  XXX  0X  X12     XX  01X  X1  XXX
            Width = 25 * 2;                       //  X3  34X  2X  XXX     2X  XXX  X3  X45
            break;                                //  X5       XX          4X       XX

    Default : Color = clWhite;  break;
    }

  Blocks = (Width / 25) * (Height / 25);

  for(int x = 0; x < Blocks; x++)  {
    Divs[x] = new TPanel(this);
    Divs[x]->Height = 25;
    Divs[x]->Width = 25;
    Block(x, true);
    this->InsertControl(Divs[x]);
    }

  switch (Kind)  {
    case  5:
    case  6: Block(0, false);  Block(2, false);  break;
    case  7: Block(0, false);  Block(5, false);  break;
    case  8: Block(2, false);  Block(3, false);  break;
    case  9: Block(3, false);  Block(5, false);  break;
    case 10: Block(2, false);  Block(4, false);  break;
    }

  int x = (rand() % 7) + 1;   // 1-7
  for(int y = 0; y < x; y++) Rotate(0);


}


//---------------------------------------------------------------------------
void __fastcall tPiece::Rotate(int Direction)  {
  int Temp;
  // Direction:  0=Right,  1 = Left

  switch (Kind)  {
    case  1:
    case  2: Arrange();  break;
    case  3:
    case  4: Temp = Height;  Height = Width;  Width = Temp;  Arrange();  break;
    case  5:
    case  6: Temp = Height;  Height = Width;  Width = Temp;
             if(Divs[2]->Color == BackColor)  { Arrange();  Block(1, false);  Block(5, false);  break; }
             if(Divs[1]->Color == BackColor)  { Arrange();  Block(3, false);  Block(5, false);  break; }
             if(Divs[3]->Color == BackColor)  { Arrange();  Block(0, false);  Block(4, false);  break; }
             if(Divs[4]->Color == BackColor)  { Arrange();  Block(0, false);  Block(2, false);  break; }
    case  7: Temp = Height;  Height = Width;  Width = Temp;
             if(Divs[0]->Color == BackColor)  { Arrange();  Block(1, false);  Block(4, false);  break; }
             if(Divs[1]->Color == BackColor)  { Arrange();  Block(0, false);  Block(5, false);  break; }
    case  8: Temp = Height;  Height = Width;  Width = Temp;
             if(Divs[2]->Color == BackColor)  { Arrange();  Block(0, false);  Block(5, false);  break; }
             if(Divs[0]->Color == BackColor)  { Arrange();  Block(2, false);  Block(3, false);  break; }
    case  9: Temp = Height;  Height = Width;  Width = Temp;
             if(Divs[5]->Color == BackColor)  { Arrange();  Block(3, false);  Block(4, false);  break; }
             if(Divs[4]->Color == BackColor)  { Arrange();  Block(0, false);  Block(2, false);  break; }
             if(Divs[0]->Color == BackColor)  { Arrange();  Block(1, false);  Block(2, false);  break; }
             if(Divs[1]->Color == BackColor)  { Arrange();  Block(3, false);  Block(5, false);  break; }
    case 10: Temp = Height;  Height = Width;  Width = Temp;
             if(Divs[2]->Color == BackColor)  { Arrange();  Block(1, false);  Block(0, false);  break; }
             if(Divs[0]->Color == BackColor)  { Arrange();  Block(3, false);  Block(1, false);  break; }
             if(Divs[3]->Color == BackColor)  { Arrange();  Block(5, false);  Block(4, false);  break; }
             if(Divs[5]->Color == BackColor)  { Arrange();  Block(4, false);  Block(2, false);  break; }

    Default : break;
    }

  return;
}


//---------------------------------------------------------------------------
void __fastcall tPiece::Block(int x, bool Seen)  {
  if(Seen) {
    Divs[x]->Color = Color;
    Divs[x]->BevelInner = bvRaised;
    Divs[x]->BevelOuter = bvLowered;
    return;
    }

  Divs[x]->Color = BackColor;
  Divs[x]->BevelInner = bvNone;
  Divs[x]->BevelOuter = bvNone;
  return;
}


//---------------------------------------------------------------------------
void __fastcall tPiece::Arrange(void)  {
    for(int x = 0; x < Blocks; x++)  {
      Block(x, true);
      div_t  N = div(x, (Width / 25));
      Divs[x]->Left = N.rem * 25;
      Divs[x]->Top = N.quot * 25;  
      // Divs[x]->Caption = x;
      }

  return;
}


//---------------------------------------------------------------------------
//namespace Piece  {
//  void __fastcall PACKAGE Register()  {
//    TComponentClass classes[1] = {__classid(tPiece)};
//    RegisterComponents("My Components", classes, 0);
//    }
//}


//---------------------------------------------------------------------------
 
Соседние файлы в папке Tetris Project
  • #
    30.05.202035.32 Кб6Main.obj
  • #
    30.05.202013.37 Кб6Main.~cpp
  • #
    30.05.202051 б6Main.~ddp
  • #
    30.05.202011.44 Кб6Main.~dfm
  • #
    30.05.20202.96 Кб6Main.~h
  • #
    30.05.20206.46 Кб6Piece.cpp
  • #
    30.05.2020957 б6Piece.h
  • #
    30.05.202024.18 Кб6Piece.obj
  • #
    30.05.20201.76 Кб6Rotate.wav
  • #
    30.05.20205.47 Кб6Tetris.bpr
  • #
    30.05.20201.28 Кб6Tetris.cpp