본문 바로가기
[ C언어 ]/- C언어 문법공부

C언어 23장(c언어 게임만들기_2, 응용 함수, 전역변수, 조건문 활용, 콘솔글자색 바꾸기, 배경색)

by MRG 2020. 6. 2.
728x90
반응형
728x90

▣ 안녕하세요 ^^ 
저번장에서 배웠던 내용을 가지고 게임 잘 만들어 보셨나요??
오늘은 저번장에 있는 내용을 활용하여 
게임에 함수를 적용해보는 시간을 가져보겠습니다. 



▣ 참고로 다시 한번 말씀드리지만 
제 코딩이 정답은 아닙니다.
그리고 저는 누구나 쉽게 만들 수 있게 하기 위해서 
쉬운 코드를 위주로 진행했습니다.
그러니 코딩에 정리 및 활용은 여러분들에 몫입니다.
잊지 마시고. 
제 코딩은 참고만 해주세요. 

 

▣ 저번장에서 배웠던 
색을 넣는 함수를 우리가 만든 게임 프로젝트에 넣어보겠습니다.
우선 여기서 주의해야할건
매개변수 처음값이 배경색이라는 점 잊지 마세요^^
반대로 하시면 안 됩니다.
그리고 <<쉬프트 비트 연산자를 사용해야 합니다.
모르시는 분은 저번장을 꼭 공부하고 와주세요 ^^

 

▣ 색을 구분하기 위해 
enum 열겨형을 사용해서 만들었습니다.
이렇게 만들면 매개변수 안에 색에 값을 넣기 쉽겠죠?
열거형에 멤버 요소 값으로 값을 넣을 겁니다.
이것도 모르시는 분은 저번장에 꼭 꼭 공부해주세요 ^^;;

 

▣ 이렇게 게임 메뉴 함수에서 색을 지정해서 
출력을 해보면 배경색이랑 글자색이 잘 바뀌는 걸 볼 수 있습니다.
이제 이걸 이용해서 색을 우리가 만들었던
문들에 색을 넣어보겠습니다. 

 

▣ 우리가 printf를 해서하거나
putchar를 해서 각각 색을 지정해줄 수 도 있지만,
그럼 너무 많은 코딩을 해야 하기 때문에, 
이렇게 문에 모양을 2차원 배열을 사용해서 만들었습니다. 
#모양은 문에 틀
+모양은 문에 색
@모양은 문에 손잡이로 구분해서 지정했습니다.
이 문에 모양은 여러분들이 구분하고 싶으신 기호로 지정해주세요.

 

▣ 그리고 조건문을 활용하여 printf를 할 때 기호마다에 색을 지정해줍니다.
#모양일 경우 하얀색으로
+모양일 경우 회색으로
@모양일 경우 초록색으로
지정해주고 출력을 했습니다.
그럼 우리가 지정한 색으로 문에 색이 입혀진 게 보이죠?
아주 이쁩니다. ^^
문에 느낌을 잘 살렸네요.



▣ 여기서 중요한 건 저는 배경색과 글자색 둘 다 같은 색으로 지정해서 기호에 따라 
색을 구분하기만 했습니다.
좀 더 디테일하게 색을 넣고 모양을 내고 싶으시면
저처럼 하지 마시고 기호에 배경색과 글자색을 각각 다르게 신경 쓰셔서 만드셔도 됩니다. 




▣ 또 중요한 한 가지
문을 printf로 다 출력한 후에
밑에 코디에 또 배경색을 검은색 
글자색을 흰색으로 색을 바꿔주었습니다.
왜 그럴까요?
네 맞습니다.



▣ 우리가 마지막에 지정한 색으로 계속 이어져 가기 때문에 
색을 다시 초기화해줘야
게임에 정보 앞, 뒤, 현재 위치, 정보가 제대로 보이게 됩니다.
이점 주의해주세요.
컴퓨터는 절대 스스로 하지 않습니다. 
그럼 다른 게임 씬에 있는 문들도 바꿔볼까요?

 

▣ 모든 문이 모양에 크기와 반복 횟수가 다르기 때문에 배열 숫자와 
반복횟수 신경 써주셔서 만드세요.

 

▣ 이렇게 게임 씬 3까지 문에 색을 넣었습니다.
그리고 한번 실행해보면
우리가 처음 만든 것과 다르게 
컬러가 있어 더 게임다워졌습니다. 


▣ 자 이번에는 아이템을 획득하는걸 한번 해보겠습니다.
간단하게 말이죠.

 

▣ 먼저 게임 정보 함수에서 
아이템을 획득하는 키를 설명해주는 출력 구간을 만들어보겠습니다.
그리고 우리가 획득한 코인에 대한 정보도 표시하겠습니다. 



▣ 그런데 여기서 의문이 생깁니다. 
코인을 먹더라도 그 정보가 함수에 따라 변수가 지역변수이기 때문에 
함수가 끝나면 지역변수는 사라지는데 어떻게 공유할 수 있을까요?
라는 질문이 생깁니다.
여러분들이라면 어떻게 하실 건가요?

 

▣ 많은 방법이 있지만 저는 전역 변수를 만들었습니다.
포인터로 해도 되고, 
메모리 할당으로 해도 되고, 
아니면 static 변수를 사용해도 되고,
머 여러 가지 방법이 있습니다.
저는 그냥 좀 더 쉽게 전역 변수로 하겠습니다.
저랑 똑같이 하지 않으셔도 됩니다.
coinCount라는 변수가 전체 함수에 공유가 되면 됩니다. 
변수에 이름은 시작은 소문자로
함수에 이름은 시작은 대문자로 구분해주세요.
보통 게임 개발을 할 때 이렇게 합니다.

 

▣ 그리고 아이템이 있는 게임 씬 4를 만들어 보겠습니다. ^^
저는 이렇게 노란색으로 아이템 코인을 표현했습니다.
그럴싸하죠?


▣ 또 우리가 생각해야 하는 게 있습니다.
e키를 누르면 소리가 나고 아이템을 어떻게 획득할 것인가?
그리고 아이템이 어떻게 사라질 것인가입니다. 
여러 방법이 있지만, 
간단하게 해 봅시다.

 

▣ 우리가 e키를 눌렀을 때 획득하는걸 조건문으로 만들어보겠습니다.
그러기 위해서는 먼저 게임 씬 4로 가는 조건문부터 만들어야겠죠?
그리고 아이템 획득 조건을 만들어야 하는데 


▣ 조건을 하나하나 생각해보면
먼저 e키를 누르면 작동해야겠죠?
그리고 두 번째 조건은 아이템이 있는 게임 씬 4일 경우여야 합니다.


▣ 그건 우리가 mapNumber로 이미 지정했습니다.
그런 다음에 또 생각해야 하는 게 
아이템 획득은 한 번만 되어야 합니다.
e키를 누르면 계속 아이템을 획득하면 안 되겠죠?
그렇기 때문에 isGetGame4 Coin이라는 변수를 만들었습니다.
변수 이름에 의미는 게임 씬 4에서 획득한 코인이라는 의미인데, 
1이면 획득하게 되는 상황이라고 가정하겠습니다.
그럼 1이 아닐 경우에만 e키를 누를 수 있게 되는 것이죠. 


▣ 자 그럼 e키를 누르면
코인을 획득했으니 isGetGame4 Coin 변수에 값을 1로 하고 
코인 수를 +1을 하고 소리가 나고 다시 
게임 씬 4 함수를 호출하겠습니다.

▣ 그리고 이렇게 게임 씬 4에서 조건문을 추가하여
isGetGameCoin == 1이면 코인에 색을 블랙으로 색을 바꾸면 
코인이 사라지는 것처럼 보이게 됩니다. 
if와 else if는 위에 있는 조건이 거짓일 경우만 작동하기 때문에
다음 else if 문은 문제가 되지 않습니다. 



▣ 그런데 여기서 문제가 하나 더 있습니다.
게임 씬 4를 바로 호출하기 때문에 소리가 겹치게 됩니다.
소리를 내는 함수는 딱 한 가지 소리만 낼 수 있다고 했죠? 
그렇기 때문에 게임 씬 4 처음 소리 부분에서도

 

▣ 이렇게 조건문을 넣어 코딩하면 됩니다. 
그럼 획득한 후에는 소리가 나지 않습니다.

 

▣ 그리고 이렇게
전역 변수에 coinCount에 정보를 넣어주면

 

▣ 코인을 획득하지 않았을 때랑

 

▣ 코인을 획득했을 때 
조건문이 잘 작동되는 걸 확인할 수 있습니다. 


▣ 자 오늘은 이렇게 저번장에 배운 색을 바꾸는 함수를 이용하여 
게임에 색을 넣어주었습니다.
그리고 전역 변수를 활용해보았습니다. 
이렇게 간단한 게임을 만드는 데에도
이렇게 많은 생각을 해야 하고 코딩이 들어가야 한다는 거 아시겠죠? ^^


▣ 제가 위에서 한 코딩 중에서 코인을 획득하는 소리 부분에 겹치지 않게 한 조건문 부분이 문제가 있습니다.
코인을 획득한 후에는 게임 씬 4를 가더라도 발소리가 나지 않습니다.
그 부분은 일부로 남겨두었습니다. ^^
그건 스스로 생각해보시면서 고쳐보세요 ^^
숙제입니다. ^^
그리고 여러분들이 게임을 다르게 만들어보세요 ~~


▣ 제가 한 코딩이 절대 정답이 아닙니다.
그러니 여러분들이 생각한 다른 방법으로 코딩을 바꿔서 
좀 더 가독성 있게 만들어보세요 ^^
저는 쉽게 만들다 보니 가독성에 있어서 신경 쓰지 않았으니 이점 참고해주시고,
그렇다고 코딩이 무조건 복잡한 게 좋은 건 아닙니다. ^^
질문이 있으시거나 피드백이 필요하신 분은 댓글 남겨주세요 ^^
그럼 다음장에서 뵙겠습니다.


▣ 포기하지 마세요!!! 저도 했습니다!!! 파이팅!!! 

728x90
반응형

댓글