IT/프로젝트

[테트리스3] 블럭 변경하기

안녕하세요. 컴퓨터 못하는 컴퓨터공학생 입니다.


이번에는 블럭 변경하는 법을 보도록 하겠습니다.


사실 블럭 변경하는 법은 간단합니다. 

1. 블럭을 변경할 수 있는 공간이 있는지 체크를 하고 

2. 블럭을 지운 뒤

3. 블럭모양의 인덱스 값을 바꾼 뒤 다시 블럭을 그려주면 됩니다.


BrickChange 함수를 선언해서 사용하겠습니다.



1
2
3
4
5
6
7
8
9
10
11
12
procedure TFrmMain.BrickChange;
begin
  if CheckBrick(iXY, iDown) then
  begin
    PrintBrick(false);
    if iBrickRotation = 3 then
      iBrickRotation := 0
    else
      inc(iBrickRotation);
    PrintBrick(True);
  end;
end;
cs



함수안에는 CheckBrick 함수를 사용합니다.

CheckBrick(iXY, iDown) 와 같이 호출 하여서 변경이 가능한지 유무를 확인합니다.

iXY는 현재 가로위치이고, iDown은 현재 세로위치입니다.


주위에 블록이나 벽인지 체크를 한 뒤 가능하면 블럭을 없애고, 블럭모양의 index인 iBrickRotation를 증가하고,

iBrickRotation에 맞는 블럭을 그립니다.


printBrick함수는 다음과 같습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
procedure TFrmMain.PrintBrick(bShow : Boolean);
var
  i : integer;
begin
   if (bShow) then
   begin
     for i := 0 to 3 do
     begin
       MCanvas.brush.Color := BlockColor[iBrickIndex];
       MCanvas.Pen.Style := psClear;
       MCanvas.Rectangle( (shape[iBrickIndex][iBrickRotation][i]._iX * 15) + iXY + ( 15* 5 ),
                         (shape[iBrickIndex][iBrickRotation][i]._iY * 15) + iDown + 15,
                         (shape[iBrickIndex][iBrickRotation][i]._iX * 15) + 15+ iXY + ( 15* 5),
                         (shape[iBrickIndex][iBrickRotation][i]._iY * 15) + iDown + 15+ 5
                       );
     end;
   end
   else
   begin
     for i := 0 to 3 do
     begin
       MCanvas.brush.Color := clSilver;
       MCanvas.Pen.Style := psClear;
       MCanvas.Rectangle( (shape[iBrickIndex][iBrickRotation][i]._iX * 15) + iXY + ( 15* 5),
                         (shape[iBrickIndex][iBrickRotation][i]._iY * 15) + iDown + 15,
                         (shape[iBrickIndex][iBrickRotation][i]._iX * 15) + 15 + iXY + ( 15* 5),
                         (shape[iBrickIndex][iBrickRotation][i]._iY * 15) + iDown + 15+ cBrickSize
                       );
     end;
   end;
end;
cs



저번시간에 사용했던 함수를 하나로 묶은 것입니다.


다음 시간에는 블럭쌓기와 블럭 한줄 없애기에 대해서 살펴보겠습니다.


감사합니다.

,

최근 댓글

최근 트랙백

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.

링크

카운터

Today :
Yesterday :
Total :