'분류 전체보기'에 해당되는 글 39건

  1. 2017.08.27 글자색 설정하기 1
  2. 2017.08.06 FLYA 1
  3. 2017.07.27 for문 증감문에 전위연산자와 후위연산자의 차이
  4. 2017.07.20 for / while
  5. 2017.07.19 선행처리기
  6. 2017.07.19 Hide And Solve(졸업작품?)
  7. 2017.07.19 #define / const
  8. 2017.07.18 십이장기 4
  9. 2017.07.18 자료형, 서식문자
posted by 구로보루 2017. 8. 27. 16:55

 저번에 C로 간단한 콘솔 포폴을 만들면서 검정색 흰색으로만 되어있어서 굉장히 밋밋했었다. 그래서 콘솔에 글자색을 바꿀 수 있는 방법을 알아봤다.

 

 우선 windows.h를 선언하고,

SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), 색깔번호);

함수를 활용해야 한다.

 

 색깔번호 같은경우는 총 16개가 있는데 0번부터 순서대로

0 : 검정색

1 : 어두운 파랑색

2 : 어두운 초록색

3 : 어두운 하늘색

4 : 어두운 빨강색

5 : 어두운 분홍색

6 : 어두운 노랑색

7 : 흰색 ? 회색?

8 : 회색

9 : 파랑색

10 : 초록색

11 : 하늘색

12 : 빨강색

13 : 분홍색

14 : 노랑색

15 : 흰색

 으로 정의되어 있다.

 

 코드로 구현하면 SetConsoleTextAttribute함수를 활용해서 처음에는 색깔을 출력할 핸들러를 받아와야 하기 때문에 GetStdHandle(STD_OUTPUT_HANDLE)을 통해 콘솔 핸들러를 불러오고 다음에는 숫자를 통해 색깔을 정의한다.

 

 

 

'공부 > C' 카테고리의 다른 글

system("cls") / SetConsoleCursorPosition  (0) 2017.08.27
for문 증감문에 전위연산자와 후위연산자의 차이  (0) 2017.07.27
for / while  (0) 2017.07.20
선행처리기  (0) 2017.07.19
#define / const  (0) 2017.07.19
posted by 구로보루 2017. 8. 6. 16:57

 

C를 이용한 간단한 비행기 게임.

비행기를 A로 사용해서 게임이름도 FLYA!!!

연결리스트를 이용해서 데이터 관리도 하고 데이터베이스 대신 메모장으로 랭킹시스템을 통해 파일입출력도 해보고 꽤 좋은 경험을 한 포폴!!

 

가끔 총알이랑 적이랑 충돌처리가 안되던데 어떤 상황에서 그러는지 확인을 못하겠다...

 

'포폴 > C/C++' 카테고리의 다른 글

CON PACK  (0) 2017.09.11
posted by 구로보루 2017. 7. 27. 11:49

 C언어를 공부하면서 처음 C를 배웠을 경우 for문에서 사용할 때

for(int i=0; i<10 ; i++)

이렇게 사용하면서 익숙해 졌다.

 

 그런데 학교에서 학년도 올라가고 다시 C를 공부하는데

for(int i=0; i<10; ++i)

이렇게 사용하는 경우를 많이 보게 되면서 증감식에 전위연산과 후위연산의 차이점에 대해 알아보게 되었다.

 

 우선 전위연산의 경우

int a = 1;

int b = ++a;

이 코드에서 ab를 출력하면 a = 2, b = 2가 된다.

 

 후위연산의 경우는

int a = 1;

int b = a++;

이 코드에서 a의 값을 b에 추가하고 a를 증가시키게 되어 a = 2, b = 1이 된다.

 

 후위 연산은 현재 코드를 실행하고 값을 증가시켜주기 때문에 그 값을 저장할 공간이 필요하다. 코드로 풀어보면

const int t = i;

i = i + 1;

return t;

로 풀이되어 t라는 저장공간이 필요하게 된다.

 

 전위 연산을 코드로 풀어주면

i = i + 1;

return i;

로 풀이된다.

 

 이렇게 상대적으로 전위연산이 후위연산보다 낭비가 적으며 for문의 반복횟수가 많을수록 전위연산의 경우가 더 효율적으로 돌아가게 된다.

 

 그러나 이제는 컴파일러가 발전해서 for문과 같이 그 사본이 사용되지 않는 경우에는 더 빠른 방법인 전위연산으로 바꿔서 실행한다고 하니 이제는 특별히 차이가 없다고 한다.

'공부 > C' 카테고리의 다른 글

system("cls") / SetConsoleCursorPosition  (0) 2017.08.27
글자색 설정하기  (1) 2017.08.27
for / while  (0) 2017.07.20
선행처리기  (0) 2017.07.19
#define / const  (0) 2017.07.19
posted by 구로보루 2017. 7. 20. 12:17

for 반복문

 for문은 for(초기식 ; 조건식 ; 증감식)으로 구성되어 초기식에 값으로 시작하여 조건이 거짓이 될 때까지 증감식만큼 값을 변형시키면서 반복한다

for(int i=0; i<10; ++i)

 이면 i=0 부터 시작해서 한번 반복할 때마다 1씩 증가시켜 10 미만일 경우까지 반복한다. 그래서 0, 1, 2, 3, 4, 5, 6, 7, 8, 910번 반복하게 된다.

 

while 반복문

 while문은 while(조건식)을 통해 조건식이 참일겨우에 계속 반복한다.

while(i<10) ++i;

 이면 while문 외부에서 초기값이 저장된 i값부터 시작해서 10보다 작다는 조건이 참이면 반복하고 반복문 안에서 증가시킨다.

 


 

 두가지 반복문은 서로 사용하는 방법이 다르지만 결과는 똑같이 나온다. 두가지에 차이점을 찾아봐도 사용법만 다를 뿐 결과는 똑같고 속도차이는 for문이 더 빠르다는 경우가 많더라. 이번에 C언어를 배우면서 이 두가지에 결정적인 차이점에 대해서 들었다. for문의 조건에 사용할 변수를 생성하는 초기식에서 int i = 0으로 for문에서만 사용할 변수를 생성할 경우 CPU의 캐시메모리에 그 값을 저장하는데 while문의 경우는 함수내의 지역변수를 사용하여 조건식을 생성하는 경우가 많기 때문에 이는 메모리에 저장된다.

 

 

 이 구조에서 for문은 CPU에 있는 캐시메모리를 while문의 경우는 그냥 메모리에서 사용하므로 for문의 수행속도가 더 빠르다.(여기저기 검색해보면 반복의 횟수가 적을경우는 while문이 더 빠르다는 말도 있다.)

 

 만약 for문의 조건변수가 캐시에 들어가는 최적화가 싫다면

for(volatile int i =0 ; i < 10; ++i)

 이런식으로 정의하여 막을 수 있다. (임베디드에서 주로 쓴다고 함)

'공부 > C' 카테고리의 다른 글

글자색 설정하기  (1) 2017.08.27
for문 증감문에 전위연산자와 후위연산자의 차이  (0) 2017.07.27
선행처리기  (0) 2017.07.19
#define / const  (0) 2017.07.19
자료형, 서식문자  (0) 2017.07.18
posted by 구로보루 2017. 7. 19. 22:07

 코드를 짜서 실행을 하면 컴파일러보다 먼저 수행되도록 하는 부분이다. #include가 가장 흔히 보는 선행처리기로 앞부분에 #을 통해 표시한다. 그리고 뒤에는 ; 가 없는게 특징이다.

 

 종류는 크게 3가지가 있는데 앞서 말한 #include, 상수나 매크로를 설정하는 #define, #if #endif 등이 있다.

 

#include

 먼저 #include는 해더파일과 같이 이 소스에 다른 파일에 포함하는 방식이다.

 #include <stdio.h>   --> C컴파일러에서 검색

 #include "hello.h"    --> 디렉토리에서 검색

 

#define

 다음으로 #defiine은 매크로 상수, 함수등을 정의한다.

매크로 상수

#define PI 3.141592

 이렇게 하면 다음부터 PI는 3.141592로 사용한다.

 

매크로 함수

 매크로 함수를 통해 보통 함수호출보다 빠르게 함수의 작업을 수행하도록 매크로를 만들 수 있다. 가령 자주 쓰는 printf의 매크로 함수를 만들어 본다면

#define P(...) printf(__VA_ARGS__);

 이렇게 정의하면 다음부터는 printf대신 P를 통해 printf와 같은 작업을 수행할 수 있다.

 

 그리고 매크로 함수를 만들 때 주의할 점이 있는데 아래처럼 매크로 함수를 정의하고

#define square(x) x * x

 사용할 때 square(3+1)을 사용하면 x라는 글자가 변경 매칭되어 변경되기 때문에 square(3+1) 매크로 함수가 3 + 1 * 3 + 1 식으로 지정된다. 그러면 본래 원하는 값이 16인데 위의 계산값이 7이 나오게 된다.

 그러므로

#define square(x) (x) * (x)

 이렇게 사용하는게 안정적이다.

 

 

#if #endif

 이 선행처리기는 보통 우리가 사용하는 if문가 같은 방식인데 컴파일하기전에 먼저 수행되는 if문이라고 보면된다. #if의 조건에 부합하지 않으면 코드를 통해 컴파일하기 전에 아예 해당 코드를 수행하지 않게 된다.

#if 조건

코드

#else

코드

#endif

 만약 우리가 코드를 작성하여 런칭을 할 때 한글판과 영문판이 필요하다 이런식이면 위의 방법을 통해 하나의 코드에서 두가지 출력을 만들 수 있다.

 

 

 이런식의 코드를 통해 NATION만 바꿔주면 바로 영문판과 한글판의 실행이 가능하다.

 

#pragam

컴파일러에게 직접 명령을 내리는 지시자이다.

 

#pragma region Name

코드

#pragma endregion

 지정된 지역을 함수처럼 접고 열기가 가능하게 되어 가독성이 편해진다.

 

 

 

 이렇게 접았다가 폈다가 가능

 

'공부 > C' 카테고리의 다른 글

글자색 설정하기  (1) 2017.08.27
for문 증감문에 전위연산자와 후위연산자의 차이  (0) 2017.07.27
for / while  (0) 2017.07.20
#define / const  (0) 2017.07.19
자료형, 서식문자  (0) 2017.07.18
posted by 구로보루 2017. 7. 19. 13:39

 대학교 4학년 1학기에 졸업작품 개념으로 게임 프로젝트를 3인팀으로 진행했다. 컴퓨터공학과라는 학과 특성상 그래픽디자이너가 없어서 리소스지원을 받았지만 한학기 동안 3명이서 만든 프로젝트도 포트폴리오니까 여기에 올려야지...

 

 

 술래잡기게임인데 팀원중에 서버에 관심있는 사람도 있고 해서 유니티에서 제공해주는 좋은 네트워크 컨트롤러를 버리고 직접 C++ 서버를 만들어서 유니티에 C#으로 네트워크 매니져를 만들어서 5명이서 할 수 있게 만든 게임. 하지만 학과 프젝실에서 서버를 안켜주면 시작조차 못하는 실용성 없는 게임이다....

 

 팀장은 나니까 내꺼에 올려야지 팀원 여러분 모두 고생하셨습니다!!!!

'포폴 > Unity' 카테고리의 다른 글

십이장기  (4) 2017.07.18
posted by 구로보루 2017. 7. 19. 13:28

 이번에 C를 다시시작하면서 상수화시키는 방법인 #define을 다시 배웠다.

 

 

 

 이런식으로 맨날 쓰기 귀찮은 printf도 매크로를 만들어 한글자로 줄일 수 있고, 수학에서 파이와 같은3.141592... 이런 값을 #define PI 3.141592 정의하여 쓴다.

 그런데 함수내에서 const를 사용하여 변수를 지정하여 쓰는것도 상수화 시키는 방식인데 가령 const float PI = 3.141592 이렇게 정의하면 위의 #define과 마찬가지로 PI라는 상수를 이용하는게 가능하다.

 

 위 2가지 상수화 방법의 차이점은

const의 경우는 자료형을 기록하고 #define은 자료형을 기록하지 않는다. 다시말해 const는 변수를 상수화 하는 경우이고 #define은 그렇지 않다. 때문에 const를 사용하면 디버깅시 값을 확인할 수 있고 #define보다 안전하다. 그래서 위의 printf 매크로 처럼  #define만 할 수 있는 작업이 아니면 const를 추천한다.

 

 여담 : 여기에 대해 알아보면서 #define을 통해 여러줄의 함수를 매크로로 만들때 \을 사용할 수 있다고 한다.

 

 요런 식으로...

'공부 > C' 카테고리의 다른 글

글자색 설정하기  (1) 2017.08.27
for문 증감문에 전위연산자와 후위연산자의 차이  (0) 2017.07.27
for / while  (0) 2017.07.20
선행처리기  (0) 2017.07.19
자료형, 서식문자  (0) 2017.07.18
posted by 구로보루 2017. 7. 18. 11:48

 학교에서 기회가 생겨서 만들었던 Unity 프로젝트 십이장기로 시간관계상 AI나 네트워크는 만들지 못 했지만 처음으로 만들었다는 의미가 큰 프로제트다.

 

 십이장기는 더 지니어스라는 프로그램에서 나왔던 보드게임(?)으로 그 당시에 재밌어 보였으나 할 방법이 없었고, 짧은 시간동안 하기에 적당한 난이도일거 같아서 직접 만들게 되었다.



 처음으로 만들어본 게임이라 굉장히 의미가 큰 프로젝트지만 역시 부족한 점도 많은 프로젝트이다. 나중에 아주 나중에 기회가 되면 한번 업그레이드 시키고 싶다(하지만 한번 끝낸 포폴은 손대지 않는 법칙...)

'포폴 > Unity' 카테고리의 다른 글

Hide And Solve(졸업작품?)  (0) 2017.07.19
posted by 구로보루 2017. 7. 18. 11:30

# 자료형

정수형

char : 1byte (-128 ~ 127)

unsing char : 1byte (0 ~ 128 + 127)

short : 2byte (-32768 ~ 32767)

unsigned short : 2byte (0 ~ 32768 + 32767)

int : 4byte (-2147483648 ~ 2147483647)

unsinged int : 4byte (0 ~ 2147483648 + 2147483647)

long : 4byte (-2147483648 ~ 2147483647)

unsinged long : 4byte (0 ~ 2147483648 + 2147483647)

long long : 8byte (-9223372036854775808 ~ 9223372036854775807)

unsinge long long : 8byte (0 ~ 9223372036854775808 + 9223372036854775807)


실수형

float : 4byte

double : 8byte

long double : 8byte 이상

 

 


 

 

# 서식문자

정수형

%d : 10진수 정수

%ld : 10진수 정수

%lld : 10진수 정수

%i : 10진수 정수

%u : 부호가 없는 10진수 정수

%o : 부호가 없는 8진수 정수

%x : 부호가 없는 16진수 정수 (영어를 소문자로 표기)

%X : 부호가 없는 16진수 정수 (영어를 대문자로 표기)

 

실수형

%f : 10진수 실수

%lf : 10진수 실수

%e : 부동 소수점 실수 (영어를 소문자로 표기)

%E : 부동 소수점 실수 (영어를 대문자로 표기)

%g : 값에 따라 10진수와 부동 소수점 선택 (영어를 소문자로 표기)

%G : 값에 따라 10진수와 부동 소수점 선택 (영어를 대문자로 표기)

 

문자형

%c : 문자 하나

%s : 문자열

 

주소값

%p : 주소값

 

서식문자 필드 폭 지정

%+5d, %5d : 오른쪽 정렬

%05d : 오른쪽 정렬하고 0으로 채움

%-5d : 왼쪽 정렬

'공부 > C' 카테고리의 다른 글

글자색 설정하기  (1) 2017.08.27
for문 증감문에 전위연산자와 후위연산자의 차이  (0) 2017.07.27
for / while  (0) 2017.07.20
선행처리기  (0) 2017.07.19
#define / const  (0) 2017.07.19