320x100
오늘의 이슈.
올게 왔군.
현재 블럭은 4x4 배열이다. 회전시 왼쪽, 시계반대방향으로 블럭이 회전시키자.
1 (0,0) | 2 (0,1) | 3 (0,2) | 4 (0,3) |
5 (1,0) | 6 (1,1) | 7 (1,2) | 8 (1,3) |
9 (2,0) | 10 (2,1) | 11 (2,2) | 12 (2,3) |
13 (3,0) | 14 (3,1) | 15 (3,2) | 16 (3,3) |
배열로 표현하면 위와 같은 걸 회전하면
4 (0,0) | 8 (0,1) | 12 (0,2) | 16 (0,3) |
3 (1,0) | 7 (1,1) | 11 (1,2) | 15 (1,3) |
2 (2,0) | 6 (2,1) | 10 (2,2) | 14 (2,3) |
1 (3,0) | 5 (3,1) | 9 (3,2) | 13 (3,3) |
위 배열로 바껴야한다.
(x, y) -> (size - y, x) 로 변경되는 것을 확인할 수 있다.
// js/blockType.js
const blockType = [
{
name: "O",
color: "skyblue",
shape: [[0, 0, 0, 0], [0, 1, 1, 0], [0, 1, 1, 0], [0, 0, 0, 0]] //수정
},
{
name: "S",
color: "red",
shape: [[0, 0, 0, 0], [0, 0, 1, 1], [0, 1, 1, 0], [0, 0, 0, 0]] //수정
},
{
name: "Z",
color: "purple",
shape: [[0, 0, 0, 0], [0, 1, 1, 0], [0, 0, 1, 1], [0, 0, 0, 0]] //수정
},
{
name: "I",
color: "darkred",
shape: [[0, 0, 0, 0], [0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0]] //수정
},
{
name: "T",
color: "#FFD300",
shape: [[0, 0, 0, 0], [0, 1, 1, 1], [0, 0, 1, 0], [0, 0, 0, 0]] //수정
},
{
name: "L",
color: "green",
shape: [[0, 0, 0, 0], [0, 1, 1, 1], [0, 1, 0, 0], [0, 0, 0, 0]] //수정
},
{
name: "J",
color: "blue",
shape: [[0, 0, 0, 0], [0, 1, 1, 1], [0, 0, 0, 1], [0, 0, 0, 0]] //수정
}
];
// js/block.js
function Block(blockTypeIndex, x, y) {
// ...
this.shape = [...this.type.shape];
this.rotation = function() {
// ...
var length = this.shape.length
var nextShape = [[],[],[],[]];
for (var i = 0; i < length; i++) {
for (var j = 0; j < length; j++) {
var nx = length - 1 - j;
var ny = i;
var old = this.shape[i][j];
nextShape[nx][ny] = old;
}
}
// ...
}
잔여 이슈
1. 회전 중심
I 자 블록 때문에 모든 shape를 4x4로 만들었는데 다른 블록들은 모두 3x3이다. 그래서 회전 중심이 어긋나서 z 블록 처럼 2번 회전시 원래 모양으로 돌아와야 하는데 한칸 왼쪽으로 이동한다던가 하는 문제가 있다.
shape를 3x3으로 만들고 SMALL_BLOCK_NUM(4) 상수에 의존하는 코드들을 모두 shape length를 보게 수정할 필요가 있다.
2. 배열 복사
var nextShape = [[],[],[],[]]; // #1
var nextShape = new Array(length).fill(Array(length)); // #2
임시로 #1 과 같은 방식으로 코딩해놨는데 #2 와 같은 방법으로 배열을 생성하면 회전시 블록 모양이 이상하게 변한다.
#2로 하면 위처럼 왼쪽 블록을 회전시키면 오른쪽모양으로 바뀜.. 아 자바스크립트~ 난 너를 모르겠따~~
오늘 다 하려고 했는데 2번 이슈에서 보틀넥 걸려서 1번을 못했다. :P
320x100
'Project > 테트리스' 카테고리의 다른 글
[테트리스] 21. 블록 이동, 바닥에 도달했을 때 로직 개선 (0) | 2022.02.28 |
---|---|
[테트리스] 20. 블록 회전 개선 (2) (0) | 2020.08.22 |
[테트리스] 18. 다음 블럭 정하는 난수 수정 (0) | 2020.08.16 |
[테트리스] 17. 캔버스 테두리 추가 (0) | 2020.08.08 |
[테트리스] 16. 초기 블럭 생성 위치 개선 (0) | 2020.08.01 |
댓글