ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3차원 배열의 활용 - 테트리스 블록
    C/다차원 배열 2020. 10. 25. 21:48

    참고 문헌

    윤성우의 파워C 프로그래밍

     

    커서의 위치를 원하는 위치로 이동시켜 테트리스 블록 몇 개를 그려보는 것이 이 에제의 주제이다.

    이 예제에서 API함수를 이용하는데, 이는 그냥 넘어가도록 하자.

    3차원 배열이 그냥 이렇게도 쓸 수 있다는 사실을 보여주고 싶었다.

     

    우선 테트리스 블록은 2개로 가정하자.

    테트리스 하나의 블록 정보를 표현은 2차원 배열로 표현한다. 크기는 4X4로 표현했다.

    아래에서 전역변수로 쓰인 blockModel 변수를 보자.

    blockModel 배열은 총 2개의 블록정보를 담고 있다.

     

    그리고, 총 3개의 별도의 함수를 정의하는데, 이는 다음과 같다.

    아래에서 COORD는 처음보는 데이터 타입인데 이는 구조체로

    단순히 커서의 x좌표와 y좌표를 가지고 있는 데이터라고 보자.

    GetCurrentCursorPos함수와 SetCurrentCursorPos함수는 API함수를 활용하기 때문에 이에 대한 설명은 생략하고

    다만 저렇게 하면 커서의 위치를 이동시키거나 커서의 위치를 얻어 올 수 있다는 것만 알아두자.

    GetCurrentCursorPos함수

    SetCurrentCursorPos함수

     

    ShowBlock 함수를 분석 해보자.

    ShowBlock 함수는 설명이 필요할 것 깉다.

    ShowBlock 함수는 콘솔 출력 창에 블록을 그리는 역할을 담당한다.

    이 함수의 인자로 전달되는 정보를 토대로 블록을 그리게 된다.

    위의 ShowBlock함수에서 GetCurrentCursorPos함수를 호출해서 커서의 위치정보를 얻는다.

    그리고 중첩 for문을 보자.

    함수의 인자로 전달된 배열 전체 정보를 참조하기 위한 구성이 바로 위의 중첩된 for 문의 역할이다.

    위의 중첩for문에서 SetCurrentCursorPos함수를 이용해서 커서의 위치를 이동시키고 있음을 알 수 있다.

    이는 테트리스 블록을 그리기 위해서 커서의 위치를 이동시키고 있는 것이다.

    그런데 여기서 특이한 점 한가지를 발견할 수 있다.

    그것은 y좌표와 달리 x 좌표는 2의 배수로 증가가 되고 있다는 사실이다.

    이는 콘솔 출력 창의 특성 때문에 그렇다. 위에서 printf 함수로 출력하는 특수 문자는 출력 시 가로로 두 칸을 차지한다.

    때문에 x좌표는 2의 배수로 증가시켜야 한다.

     

    아래는 메인 함수

     

    프로그램 실행결과

    소스 파일

    main.c
    0.00MB

    'C > 다차원 배열' 카테고리의 다른 글

    3차원 배열의 활용 - 영한사전 만들기  (2) 2020.10.25
    3차원 배열의 개념  (0) 2020.10.25

    댓글

Designed by Tistory.