본문 바로가기

Programming Language

[Snake Game] 4. 뱀과 먹이 관련 작업하기 4. 뱀과 먹이 관련 작업하기 1. Intro지난 시간까지의 코드는 단순히 하나의 점을 입력받은 방향으로 움직이는 것에 지나지 않았다. 이러한 움직임이 게임이 되기 위해선 현재 상황에 대한 정보를 처리해야 한다. 뱀의 위치, 각 몸의 좌표, 먹이의 위치, 벽의 위치, 뱀의 이동 속도, 현재 점수와 같은 것들을 다루어야 한다. 2. 맵 정보 처리하기맵의 정보를 처리하는 방법은 크게 두 가지가 있다. 첫째로, 맵의 정보를 통째로 저장하는 2차원 배열을 만들어 사용할 수 있다. 이 경우, 30*27의 큰 배열이 필요하지만 정보를 저장하고 관리하는데 매우 편하며 디버깅 할 때 확인이 편하다는 이점이 있다. 둘째로, 배열을 사용하지 않고 몸의 각 부분의 좌표와 먹이의 좌표만 저장하여 비교할 수 있다. 이 경우 첫..
[Snake Game] 3. 중간 점검, 코드 다듬기 3. 중간 점검, 코드 다듬기 1. Intro좋은 코드는 다른 사람이 그것을 보았을 때, 그리고 나중에 개발자 본인이 읽었을 때 쉽게 이해할 수 있는 코드이다. 좋은 코드를 만들기 위해 함수와 변수 이름을 정하는 규칙을 따르고, 별도의 헤더 파일을 만들고, 상수를 선언해 사용한다. 이번 시간에는 지금까지의 우리의 코드를 보다 예쁘게 다듬어보도록 하자. 2. 상수 선언상수란 변하지 않는 수이다. 수학에서 3.141592...를 π로 부르고, 2.718281828...을 e로 불러 유의미한 수로 취급한다. 개발을 하다 보면 비슷하게 유의미하면서 변하지 않는 수를 다루어야 하는 경우가 빈번히 발생한다. 이 때, 그 수가 상수임을 명시하기 위해 #define이나 const 등을 사용한다.우리의 코드에서 상수로 ..
[Snake Game] 2. 키보드로 플레이어 움직이기 2. 키보드로 플레이어 움직이기 Intro보통 키보드로 입력을 받을 때는 scanf 함수를 사용하지만, 게임의 조작키를 입력받을 경우에는 여기서 다룰 kbhit()과 getch()를 사용한다. 우리가 입력받을 키는 키보드의 상하좌우키 이다. WASD를 사용하고 싶다면 그에 맞게 적절히 고치면 된다. 입력을 받을 때 알아두어야 할 것은 입력받을 값의 ASCII 코드 값이다. 아래의 표를 잘 살펴보자. 위 아스키코드 표는 IBM Knowledge Center에서 가져왔다. 그런데 자세히 살펴보아도 방향키에 대한 코드가 보이지 않는다. 그래서 구글 검색을 통해 상:72, 하:80, 좌:75, 우:77임을 알아내었다. 왜 그런지는 여기를 참고하도록 하자. 일단 맵 출력하는 코드가 보기에 좋지 않기 때문에, 별도..
[Snake Game] 1. 맵과 플레이어 출력하기 1. 맵과 플레이어 출력하기 0. Intro최종 결과물의 모습은 대략 아래와 비슷할 것이다. ■는 맵의 테두리이고, ▲은 뱀(플레이어)이며, ♥은 먹이이다. 오른쪽에 배치된 글씨들은 현재 게임 상태를 나타내는 것으로, 기본적인 뱀게임 시스템을 모두 구현한 다음에 건드릴 부분이다. 1. 맵 출력하기맵을 출력하는 방법은 특별할 것 없이, printf 구문을 이용해 ■(키보드 한글의 'ㅁ'키를 누른 상태로 한자키를 누르면 사용할 수 있다)와 공백을 적절히 출력하는 것이다. 아래의 코드가 그것이다. #include // ■ ▲ ▼ ◀ ▶ ♥ int main() { printf("■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n"); printf("■ ■\n"); printf("■ ■\n"); print..
[Snake Game] 0. 뱀 게임(Snake Game) 0. 뱀 게임 (Snake Game) 0. Intro 프로그래밍 언어를 효과적으로 공부하는 방법이 여럿 있겠지만, 무언가를 직접 만들면서 공부하는 것이 가장 으뜸이라 생각한다. 본인도 중학교 고등학교 다닐 때 테트리스나 에니그마 같은 것들을 코드로 작성해보며 c와 C#을 공부했다. c언어로 만들 수 있는 간단한 것들 중 가장 대표적인 것이 바로 뱀 게임이다. 앞으로 c언어로 뱀게임을 만들어 보면서 basic c language 카테고리의 글의 내용을 직접 사용해 볼 것이다. 1. 뱀 게임이란Snake game은 1970년대부터 지금까지 꾸준히 생산되고 소비되는 매우 간단하고 직관적인 게임이다. 본인의 아버지께서 1969년 출생이시고, 회사에 들어가고 나서 콘솔을 처음 접하셨다고 하니, 뱀게임의 역사가 상..
8. 구조체 8. 구조체 1. Intro 지금까지 우리는 변수를 사용해 데이터를 저장하고 반복문, 조건문을 이용해 데이터를 가공하며 함수를 이용해 코드를 있어보이게 다듬는 과정을 살펴보았다. 그 내용을 잘 이해하고 익숙해지면 본인이 필요한 간단한 프로그램을 만드는 것이 어렵지는 않을 것이다. 하지만 좀 더 많은 자료, 복잡한 자료를 우리가 다룬 변수와 배열만 사용해 처리하고자 한다면 코드가 상당히 복잡해질 것이다. 이러한 부분을 보완하기 위해, 어떤 구조를 가지고 있는 고차원의 변수를 생성할 수 있도록 존재하는 개념이 바로 구조체이다. 2. Struct 학생들의 성적을 관리하는 프로그램을 만들어 보자. 학생의 이름, 학번, 단과대학, 학부, 과목, 성적 정보를 입력하고, 어떤 학생의 학번을 입력했을 때 그 학생의 정..
5. 함수 5. 함수 1. Intro 수학을 공부하다 보면 복잡한 수식을 f(x), g(x) 따위의 함수로 바꾸어 편하게 계산하곤 한다. 이렇게 함수를 사용하는 덕분에 복잡한 식을 보다 간단하게 풀고 직관적인 형식으로 표현할 수 있다. c언어에도 이러한 함수라는 개념이 존재한다. 함수를 사용하는 덕분에 길고 복잡하며 반복되는 코드를 보기 좋게 정리할 수 있으며, 체계적인 코드를 작성할 수 있다. 2. 함수의 선언 함수의 기본 틀은 다음과 같다. int function(int argument) { return argument; } [반환자료형] [함수이름]([인자자료형] [인자이름]) { // [1] [2] [3] [4] [함수내용]; [함수반환값]; // [5] }[1]. 반환 자료형c언어의 함수는 자판기와 비슷하..
4. 제어문 - if, else if, else, switch~case 4. 제어문 - if, else if, else, switch~case 1. Intro 이전 단원을 통해 많은 정보를 반복 작업을 통해 간단하게 처리하는 방법에 대해 알아보았다. 하지만 우리는 그러한 단순 일괄 계산보다 더 많은 것을 원할 때가 있다. 예를 들어 1부터 10까지의 정수를 출력하는 데, 2의 배수는 2배를, 3의 배수는 3배를 해서 출력한다고 하자. 단순 반복문에 의한 일괄 계산으로는 하지 못할 것이다. 이러한 연산의 방향을 제어하는데 필요한 개념이 제어문이다. 1. if 영어 단어 if는 '만약에 ~라면'이라는 뜻을 가진다. 동일하게, 조건문 if는 실행 조건이 참일때 동작을 하도록 하는 조건문이다. 기본 형식은 아래와 같다. if (/*조건식*/) { 실행할 동작; }예제를 통해 실제로..