카테고리: 테트리스

안녕하세요. 언휴예요.

이번 강의는 미니 프로젝트 “테트리스” 만들기 중에 첫 번째 파트입니다.

테트리스는 총 4개의 파트로 나누어져 있으며 동영상 강의 기준으로 80여분 요구합니다.

이번 강의에서는 사각형 하나를 키보드로 이동시키고 타이머로 내리기입니다.

GameRule 만들기

먼저 게임의 보드 공간의 폭과 너비, 게임 좌표, 시작 좌표를 정의할게요.

테트리스 게임 상수

벽돌 정의

 이제 벽돌을 정의합시다. 이번 강의 Part1에서는 벽돌 모양과 회전은 반영하지 않습니다. 화면에서도 단순히 사각형을 표시합니다.

 벽돌 형식을 Diagram 클래스로 정의할게요. 

이번 강의에서 벽돌을 좌, 우, 아래로 이동시키는 실습입니다. 벽돌에는 현재 X, Y 좌표를 속성으로 캡슐화 합시다. 가져오기 블록은 다른 형식에서 접근할 수 있게 정의할게요.

생성자에서는 시작 좌표로 설정합니다. 차후에 벽돌이 맨 아래에 이동 후에 새로운 벽돌이 시작 좌표로 설정하는 부분이 필요하므로 별도의 메서드를 만들어 호출하는 형태로 작성할게요.

벽돌이 왼쪽, 오른쪽, 아래로 이동하는 메서드를 제공합시다.

 다음은 벽돌을 정의한 Diagram.cs 소스 코드입니다.

Game 클래스 정의

 Game 형식 개체는 단 하나만 존재하기에 단일체로 표현할게요. 

 생성자은 디폴트 가시성인 private으로 접근 지정하고 정적 멤버로 단일체를 생성합니다. 여기에서는 정적 생성자에서 단일체를 생성할게요.

 멤버 필드로 벽돌 개체를 참조할 now를 선언하고 now의 현재 좌표를 속성으로 접근할 수 있게 정의할게요.

 생성자에서 벽돌 개체를 생성하는 구문을 추가하세요.

 벽돌을 왼쪽, 오른쪽, 아래 방향으로 이동하는 메서드를 제공합니다. 각 메서드에서는 현재 좌표에서 이동할 좌표가 보드 공간 좌표 이내인지 확인하여 이동 가능하면 벽돌을 이동시킵니다.

 다음은 Game.cs 소스 코드입니다.

Form 구현

이제 사용자와 상호 작용하는 Form (Form1 클래스)을 작성합시다.

 폼에서 자주 사용할 값을 멤버 필드로 선언할게요.

Load 이벤트 핸들러를 등록하여 멤버 필드를 초기 설정합니다. GameRule 형식의 상수 멤버를 이용하여 설정하세요. 그리고 클라이언트 크기를 SetClientSizeCore 메서드를 호출하여 설정합니다.

 Paint 이벤트 핸들러를 등록합니다. 그리고 여기에서는 모눈을 그리는 메서드와 벽돌을 그리는 메서드를 호출합니다. 물론 두 개의 메서드를 새로 추가합니다.

 벽돌은 현재 좌표를 얻어온 후에 Graphics 개체를 이용하여 사각형으로 그릴게요. 여기서는 사각형을 채우지 않았지만 원하시면 FillRectangle 메서드를 호출하세요.

 모눈을 그리는 메서드는 수직선을 그리는 메서드와 수평선을 그리는 메서드로 분리하여 정의할게요. 각 메서드에서는 게임 좌표에 맞게 선을 그립니다.