티스토리 뷰



* 프로그램 제작 배경 및 참고자료 (제가 만든 게임은 본 포스팅의 하단 부에 위치해 있습니다.)


#1 참고자료 (1)


 http://www.soen.kr/


 첫 번째 줄에 있는 링크는 '소프트웨어 공학 연구소 홈페이지'다. 이 홈페이지에 들어가서 C언어 목록을 들어가 보면, 테트리스에 대한 이론적 배경과 구현 방법을 아주 상세히 소개하고 있다. (물론 소스코드도 다 포함되어 있다.) 홈페이지에 들어가 C/C++ 목록을 클릭하고 2부. C 고급 항목으로 들어가면 저렇게 테트리스에 대해 자세히 기술해 놓은 자료들이 있다. 소스코드와 함께 홈페이지에 기술되어 있는 이론공부를 병행하면 테트리스에 대한 기본적인 이해를 할 수 있다.


/* 본 배틀 테트리스는 홈페이지의 소스코드와 자료들을 바탕으로 응용해서 개발했다. */




#2 제작 배경 및 간략 소감


  '프로그래밍랩 수업 기말프로젝트'로 테트리스 개발을 시작하게 됐다. 처음에는 아주 막막했다. 블록의 모양은 어떻게 저장하는 것이며, 블록의 이동은 또 어떻게 표현한단 말인가? 더군다나 두 플레이어가 동시다발적으로 게임을 즐길 수 있게 프로그램을 짜려면 어떤 식으로 코드를 디자인 해야할까? 등 고민만 산더미처럼 많았다. 그럼에도 대학교 '프로그래밍 랩' 수업 때 배웠던 내용과 소스코드들을 바탕으로 공부하고 적용하다 보니 완성할 수 있었다. 첫 게임 프로그래밍으로 배틀 테트리스를 구현했는데, 아주 뿌듯하다.


 아래는 프로그래밍랩 시간 때 배웠던 자료들을 나열해 놓았다. 각 사진별 소스코드는 첨부자료로 첨부되어 있으니 화면 캡쳐를 보고 필요한 자료가 있으면 참고할 수 있다. 



 #3 참고자료 (2)


<1> - 지렁이 게임



/* 화면에 보이는 * (스타)가 움직이면서 흔적을 남긴다. 방향키로 방향 조작이 가능하며 프로그램을 종료하지 않는 한 자동으로 방향에 따라 움직인다. */


/* 소스코드는 1번게임.c로 첨부되어 있습니다. */




<2> - 지렁이 게임 (2인용)



/* 위의 지렁이 게임에서 2인용 시스템을 도입했다. 1P는 방향키로, 2P는 WASD로 방향을 설정할 수 있다. */


/* 소스코드는 2번게임.c로 첨부되어 있습니다. */




<3> - 지렁이 게임 응용편 (2인용 + 플레이어 경쟁 시스템 도입)



/* 화면에 정해진 시간 간격으로 랜덤하게 출력되는 노란 별을 먹으며 점수를 획득하는 시스템이 추가됐다. 이로써 양 플레이어간

경쟁을 하며 게임에 재미를 더할 수 있다. */


/* 소스코드는 3번게임.c로 첨부되어 있습니다. */




* 매트가 제작한 배틀 테트리스


  정말 담백한 배틀 테트리스다. 기본적인 기능 구현에 충실했다. 룰은 간단하다. 점수가 가장 높은 Player가 우승을 가져가는 시스템이다. 블럭이 낙하하는 속도는 벽돌 갯수가 10의 배수가 될 때마다 1씩 증가한다. (게임 소스코드를 보면 알겠지만, 0.05초가 빨라진다는 뜻이다. 기본 설정은 1초에 한 번씩 떨어지게끔 설정되어 있다.)

 

<1>


/* 플레이 화면이다. 1P가 긴 블럭을 떨어뜨리기 직전의 모습이다. 이 블럭을 떨어뜨리면 상대방에게 공격이 가해진다. */



<2>


/* 1P의 공격으로 2P는 밑에 네 줄의 더미블럭이 형성되었다. (파란색의 구멍이 하나씩 뚫린 더미블럭) */


#구동영상



  게임에 대한 이론적인 배경은 위에 서술해 놓은 링크를 따라가면 충분히 공부할 수 있을 것이다. 구현에 대한 자세한 설명은 영상으로 대체한다. 이 게임의 소스코드와 구동에 필요한 헤더파일을 첨부파일에 첨부했다. (Battle.h, Battle.c)



* 아쉬운 점


  게임 배경음악을 넣는 데는 성공했지만, 블록이 떨어질 때 게임이 끝났을 때 등 여러 상황에서 적절한 음악을 나오게하는 것은 구현하지 못했다. mci 관련 함수와 playsound 함수를 조합하여 사용하려 했으나, mci는 작동하지 않았다. 어떤 이유에서인지 사실 아직도 잘 모르겠다. 윈도우 관련 함수를 좀 더 심도있게 공부해야 알 수 있을 것 같은데.. 윈도우 프로그래밍 관련 공부를 할 지는 아직 모르겠다.


 참고로 playsound() 함수를 이용하여 .wav파일을 재생할 때는 크기제한이 있다. 얼마가 한도인지는 자세히 알지 못하나, 인터넷에서 테트리스 bgm을 다운 받아 wav로 변환하여 사용했을 때 작동하지 않아 혹시나 하고 파일 크기를 줄여주는 프로그램을 이용하여 파일 크기를 줄이니 정상작동하였다. 혹여나 게임에 배경음악 삽입하실 때 이 부분 때문에 크게 고생하지 않길 바라는 마음에서 적었습니다.


/* 제 소스코드의 단점을 보완하신 분은 댓글이나 dlgusdn616@naver.com로 메일 부탁드립니다. */

 

/* 소스코드는 아래 Git link로 첨부합니다. 궁금하신 게 있다면 댓글에 달아주시면 감사하겠습니다. */

 

https://github.com/dlgusdn616/C-program-1


/* 게임에 사용된 배경음악 파일은 저작권 문제로 업로드하지 못한 점 양해바랍니다. */

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday