Добавил:
masterdos
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Курсовая работа / курсач / project / Piece
.cpp//---------------------------------------------------------------------------
#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);
// }
//}
//---------------------------------------------------------------------------
Соседние файлы в папке project