스터디 인원들 중 예정대로 끝난 분들도 계시고 시간을 좀 더 주게 된 분들도 계셔서 상대적으로 글을 늦게 올린 점 죄송합니다. 중간에 SVN을 너무 참고하기에 커밋도 하지 않고 있었네요.


이전 글에 이어서 진행을 하도록 하겠습니다.

[Applications/SnakeGame] - Snake Game(뱀 게임) - 3



이번 글로 목표했던 부분은 완성을 했습니다.

전체 소스는 아래의 링크로 체크아웃 받아서 확인하실 수 있습니다.

http://gaucho1218-sample-project.googlecode.com/svn/trunk/SnakeGame


평소와 마찬가지로 변경된 부분을 위주로 설명하겠습니다.


GameBase.h


GameBase.c


우선 GameBase 부분에서는 수정된 사항이 많이 있습니다. 본격적으로 뱀이 생기고, 움직이기 시작하면서 Init관련 부분도 손을 많이 보았고요. 마찬가지로 Update 관련된 부분도 많은 변경이 있었습니다. Draw관련 함수에서는 뱀과 음식에 대한 printf도 추가되었습니다. 조금 민망하기는 하지만 1초에 한번 업데이트를 하기로 했었는데, 중간에 의견을 모아 너무 갑갑하다고 해서 0.5초로 변경을 하기도 하였습니다. 키보드 입력 처리에 대해서는 아래의 MyKeyboard에서 설명하도록 하겠습니다. NewFood() 함수는 뱀은 별도의 자료구조로 관리를 하다보니 이러한 방식으로 처리하는 것이 적절하다는 생각에 그렇게 하였습니다.



Map.h


Map.c


지도 관련 부분에서는 너비를 5에서 10으로 늘린 것 외에는 특별한 사항이 없습니다.



MyKeyboard.h


MyKeyboard.c


Windows에서는 getch()함수를 사용하여 편리하게 특정 키보드 값이 들어왔는지의 여부를 확인하면 됩니다만, 맥에서는 생각보다 좀 애매하더군요. 그래서 여기 저기 알아보다가 적혀있는 주소 링크를 참고해서 커스텀한 getch()함수와 kbhit()함수를 만들어서 사용했습니다. 원리는 기본적으로 stdin에 input이 있는지의 여부를 select를 이용하여 알아보고, 읽어들여서 사용하는 방법입니다. 블로그에 select와 이에 대한 비동기적인 사용법에 관련된 내용이 충분히 있으리라고 생각됩니다.



SnakeBody.h


SnakeBody.c


별도의 키보드 설정을 따르다보니 Terminal에서 \r\n으로 적어주어야 하는 문제점과 같은 사소한 것은 일단 제외를 하였습니다. 변화가 있다고 할 수 있는 부분은 뱀이 이동가능한지의 여부를 확인하는 CheckSnakeMovable()함수와 새로 추가된 뱀의 길이를 알아내는 GetSnakeLength()함수입니다. CheckSnakeMovable()함수는 키보드 입력에 따라 Head의 방향이 달라졌는지를 확인하고, 이동하기에 앞서 그 자리에 다른 무엇이 있는지를 확인합니다. 뱀 노드는 별도의 자료구조로 관리되기 때문에 배열에 대한 확인을 한 다음에 뱀 노드를 확인하였습니다.



main.cpp


메인에서는 키보드 상태를 업데이트 하는 부분이 추가되었습니다.



이런 저런 우여곡절 끝에 일단 뱀 게임 제작이 약 한달 전에 마무리가 되었습니다. 일단은 멤버들도 바쁘다고 하고 그래서 다음 프로젝트는 지금의 상태를 살짝 업그레이드 하는 수준으로 정하기는 했는데, 어떻게 잘 마무리가 될지는 잘 모르겠습니다. 혹시 지금까지 따라오신 분들은 어떻게 잘 하셨는지 궁금하네요.


감사합니다.

저작자 표시 비영리 변경 금지
신고

'Applications > SnakeGame' 카테고리의 다른 글

Snake Game(뱀 게임) - 4  (0) 2014.05.18
Snake Game(뱀 게임) 제작 규칙 수정  (0) 2014.03.27
Snake Game(뱀 게임) - 3  (0) 2014.03.27
Snake Game(뱀 게임) - 2  (0) 2014.03.14
Snake Game(뱀 게임) - 1  (0) 2014.03.11
Snake 게임 제작  (0) 2014.03.10
by 가우초 2014.05.18 00:29
| 1 2 3 4 5 6 ··· 26 |

티스토리 툴바