티스토리 뷰
자 여러가지 불편함을 느끼셨을 거라고 생각합니다.
필자도 많은 불편함을 느꼈습니다. 필자가 느낀 부분을 적어볼게요. 여러분이 느끼신건 여러분이 직접 만들어 보셔도 좋고
여러분이 생각한것중에 필자가 생각한것과 겹치는것도 있겠네요
필자가 생각한 첫번째 불편한 점은 꾹 눌러도 계속해서 움직이지 않는다는 것입니다.
이거 상당히 불편합니다. 이걸 어떻게 개선할 수 있을까요????
두번째 불편한 점은 떨어지는 위치가 보이지 않아서 블럭을 자꾸 실수로 놓게 된다는것이네요.....
현대 테트리스에서는 이것을 고스트 라고 부른답니다.
세번째는 다음 블럭이 나타나지 않아서 게임이 힘들다는 생각은 안해보셨나요?
이것은 넥스트 블럭 입니다.
네번째는 현대 테트리스를 해보신 분이면 아시겠지만
블럭을 저장하고 바꾸는 기능이 있습니다. 이것을 홀드 라고합니다.
다섯번째는 혹시. 블럭을 회전하다가 회전이 되야하는데 안되서 불편한적 있지 않으셨나요...?
필자는 블럭이 높게 쌓이면 회전이 안되서 자꾸 죽더라구요...
원래는 벽에 막히는게 맞지만, 인간이 볼때 자연스러운 방향으로 회전시켜주는 기법을
슈퍼 로테이션 시스템 이라고 합니다. SRS 라고 검색하시면 보실 수 있습니다.
우선은 이정도가 필자가 불편했던 점이네요.
현대 테트리스에 모두 있는 내용이고, 실제로 이것들이 적용되어있지 않아서 게임 자체가 많이 힘들었습니다.
이제 차차 위에 언급한 내용들을 고쳐보겠습니다
1. 꾹 누르면 누르고 있는동안 계속 움직이게 만들기.
이것을 구현하기 위해서는 누름과 동시에 키를 떼는 동작도 같이 받아야합니다.
나중에 코드를 한번 싹 정리하는 시간을 가질건데요
우선 제품(?) 을 만드는데 집중합시다. 만들고 수정하는것까지 보여드릴게요.
처음에 필자는 이동 변수 하나에 여러가지 상태를 저장하는 방식을 쓰고 싶었습니다.
MovingSTATE 라는 변수에 0이면 이동 안함 1이면 왼쪽 2면 오른쪽 3이면 아래.... 뭐 이런식으로 하고 싶었는데
KEYUP 이 될때 다른걸 누른상태에서 KEYUP이 되니 문제가 생기더라구요. 이동하다가 멈춰버리고 키를 들었다가 놔야했습니다
그래서 이동 변수는 총 세개를 선언했습니다 당연히 While 루프 바깥쪽에 미리 선언하는겁니다.
더불어서 블록이 이동하는 시간이 1프레임이 되면 누르자마자 엄청난 기세로 이동하면서 도저히 조작 불가능한 상태가 됩니다.
이것도 수정해주어야 해서, BlockMovingTime 이라는 변수를 하나 선언했습니다.
네 이렇게 총 네개의 변수를 선언했습니다.
키를 누른 그 당시에는 바로 이동하고, 꾹 누르고 있는 상태라면 더 이동해야합니다.
어떤 느낌인지는 아시겠지요?
네 코드를 위와 같이 고칩니다. else 부분은 이동중에 부딫히고 다시 이동하려고 하면 STATE 류 변수들이 0이 되어있지 않아서, 0으로 만들기 위해 넣었습니다
그리고 KEYDOWN 이벤트 발생시 어떤 이벤트라 하더라도 이동 시간은 초기화가 되어야해서 마지막에 BlockMovingTime 은 0으로 초기화 시켰습니다.
네 위의 코드는 이벤트를 받는 for 문 바깥에 작성되어야합니다.
마지막으로 스테이트가 1일때 BlockMovingTime 이 8보다 작으면 1씩 더해주고 8보다 크면 이동 후 0으로 다시 초기화 합니다.
이제 버튼을 꾹 누르는것만으로도 블럭이 움직이는데요 아직 조금 어색하다는 생각이 들겁니다
가속과 블럭이 자연스럽게 돌아가게 하는 것(돌아가는 위치에 블럭이 있지만 인간이 보기에는 돌아가야하는 블럭 (슈퍼 로테이션 시스템))
넥스트 블럭, 시간이 지나면 블럭의낙하속도가 올라가게 하는 것들을 만들 수 있습니다.
위의 것들은 여러분이 직접 한번 만들어 보시는것을 추천드립니다......
여기까지 테트리스 만들기였습니다. 감사합니다.
'Game with Python' 카테고리의 다른 글
| 오목 만들기 올린다고 해놓고 아직 안올렸네요. 시작하겠습니다 오목 만들기 - (1) (1) | 2017.10.18 |
|---|---|
| 테트리스 만들기는 여기서 종료하도록 하겠습니다. (0) | 2017.10.08 |
| 테트리스 제작 - (6) (0) | 2017.07.01 |
| 테트리스 제작 - (5) (0) | 2017.06.28 |
| 테트리스 제작 - (4) (0) | 2017.06.27 |
