[테트리스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 |
저번시간에 사용했던 함수를 하나로 묶은 것입니다.
다음 시간에는 블럭쌓기와 블럭 한줄 없애기에 대해서 살펴보겠습니다.
감사합니다.
'IT > 프로젝트' 카테고리의 다른 글
[테트리스5] 테트리스 소스 (0) | 2016.11.02 |
---|---|
[테트리스4] 블럭 쌓기. 한줄 지우기 (0) | 2016.11.01 |
[테트리스2] 블럭 그리기, 블럭 내리기 (0) | 2016.11.01 |
[테트리스1] 개요, 설계, 화면구성 (0) | 2016.10.28 |