Skip to content
Home » C 언어 게임 소스 코드 | C 언어 무료 강의 (입문부터 게임 개발까지) 답을 믿으세요

C 언어 게임 소스 코드 | C 언어 무료 강의 (입문부터 게임 개발까지) 답을 믿으세요

당신은 주제를 찾고 있습니까 “c 언어 게임 소스 코드 – C 언어 무료 강의 (입문부터 게임 개발까지)“? 다음 카테고리의 웹사이트 https://ro.taphoamini.com 에서 귀하의 모든 질문에 답변해 드립니다: https://ro.taphoamini.com/wiki. 바로 아래에서 답을 찾을 수 있습니다. 작성자 나도코딩 이(가) 작성한 기사에는 조회수 1,323,219회 및 좋아요 31,592개 개의 좋아요가 있습니다.

c 언어 게임 소스 코드 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 C 언어 무료 강의 (입문부터 게임 개발까지) – c 언어 게임 소스 코드 주제에 대한 세부정보를 참조하세요

9가지 게임을 만들며 누구나 쉽고 재미있게 C 를 배울 수 있습니다.
컴퓨터 전공자, IT 개발자로 진로를 희망하시는 분들에게 C 는 선택이 아닌 필수입니다. 더 이상 포인터에서 좌절하지 마시고, 나도코딩과 함께 C 를 마스터하세요.
인프런 C 분야 최고의 인기 강의, 지금 바로 만나보세요!
(Visual Studio 2019 환경설정 업데이트)

[목차]0:00:00 소개
0:03:09 환경설정
게임 #1
0:07:58 경찰서 조서 쓰기
0:10:19 정수형 변수
0:16:11 주석
0:19:02 실수형 변수
0:21:26 상수
0:23:05 printf
0:26:17 scanf
0:32:00 프로젝트
게임 #2
0:37:24 피라미드를 쌓아라
0:38:46 뿔뿔
0:45:44 for
0:48:18 while
0:50:39 do while
0:51:35 이중 반복문 (구구단)
0:56:45 이중 반복문 파헤치기
1:05:40 이중 반복문(거꾸로 별)
1:08:39 프로젝트
게임 #3
1:13:43 Up \u0026 Down
1:16:44 if else
1:25:22 break continue
1:31:33 and or
1:34:56 랜덤
1:40:36 switch case
1:51:44 프로젝트
게임 #4
1:58:31 비밀번호 마스터
2:00:36 계산기
2:06:37 함수의 형태
2:09:11 반환값이 없는 함수
2:10:54 반환값이 있는 함수
2:12:37 전달값이 없는 함수
2:13:43 전달값이 있는 함수
2:15:21 반환값과 전달값이 있는 함수
2:19:29 함수를 이용한 계산기
2:23:44 프로젝트
게임 #5
2:37:41 아빠는 대머리
2:39:08 배열 기초
2:44:08 값 설정
2:49:32 문자 vs 문자열
2:56:48 문자열 심화
3:02:44 아스키 코드
3:08:39 프로젝트
게임 #6
3:23:05 물고기 키우기
3:25:30 친구들의 주소
3:29:26 미션맨(포인터)의 등장
3:35:01 스파이(또다른 포인터)의 등장
3:40:57 배열과 포인터의 관계
3:49:39 Swap
3:56:40 포인터로 배열 값 변경하기
4:00:06 프로젝트(전반전)
4:11:18 프로젝트(후반전)
4:19:45 프로젝트(연장전)
게임 #7
4:27:34 동물 뒤집기
4:29:31 다차원 배열 기본
4:33:13 다차원 배열 접근
4:36:57 다차원 배열 선언
4:41:19 다차원 배열 사용
4:45:55 프로젝트(전반전)
5:02:25 프로젝트(후반전)
5:11:51 프로젝트(연장전)
게임 #8
5:27:17 너, 내 집사가 되어라
5:31:29 구조체 기본
5:34:41 구조체 사용
5:38:23 구조체 배열
5:39:26 구조체 포인터
5:43:25 구조체 안의 구조체
5:45:46 typedef
5:51:28 프로젝트(전반전)
6:00:36 프로젝트(후반전)
게임 #9
6:09:25 비밀 일기
6:12:09 파일 쓰기 fputs
6:19:22 파일 읽기 fgets
6:22:43 또다른 파일 쓰기 fprintf
6:26:39 또다른 파일 읽기 fscanf
6:29:55 프로젝트(전반전)
6:35:43 프로젝트(후반전)

[소스코드]강의에 사용된 소스코드는 아래 경로에서 가입 없이 다운로드 가능합니다.
https://cafe.naver.com/nadocoding
(참고 : 현재는 운영되고 있지 않은 카페입니다)

Designed by freepik
: https://www.freepik.com

c 언어 게임 소스 코드 주제에 대한 자세한 내용은 여기를 참조하세요.

[C언어 게임] 구글 공룡 게임 만들기 (충돌처리 추가)

C언어 구글 게임 소스 코드 v1.0 (공룡 움직임, 점프, 나무 움직이기 등 기본 세팅). 4. 공룡 게임 소스코드 v2.0 (충돌, 시간에따른 점수 추가).

+ 여기에 더 보기

Source: blockdmask.tistory.com

Date Published: 10/9/2021

View: 9388

[C언어 게임 만들기] 테트리스 게임 (Tetris) – 네이버 블로그

Text Game Maker JS/Games: Tetris – A MEAN Blog … [C언어 게임 만들기] 테트리스 게임 (Tetris) 소스 코드 보기 …

+ 여기를 클릭

Source: m.blog.naver.com

Date Published: 1/2/2021

View: 373

c언어 뱀게임 소스코드 – Kocaine! 의 코딩하는 블로그

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 …

+ 여기에 보기

Source: kocaine.tistory.com

Date Published: 11/20/2022

View: 5359

C언어로 게임 만들기 1. 기초 & 플레이어 움직이기 (1) 기초 함수들

본 강의는 윈도우를 기준으로 하므로, 이후에는 계속 이 버전이 등장할 예정입니다. // ANSI escape code 버전 vo gotoxy(int x, int y) …

+ 더 읽기

Source: blog.moon44432.dev

Date Published: 5/23/2022

View: 114

무한의 땅굴(게임프로젝트) 소스코드 – 고딩개발자

c언어. 무한의 땅굴(게임프로젝트) 소스코드. 행운의다섯 2017. 7 …

+ 자세한 내용은 여기를 클릭하십시오

Source: jiminon5.tistory.com

Date Published: 5/14/2021

View: 1677

C언어 공룡게임 만들기 2 – Ro_ll_ing

저번에 올렸던 소스코드에 시작메뉴와 충돌처리, 결과창 등을 추가하여 만들어 보았습니다. #define _CRT_SECURE_NO_WARNINGS #define TreeHigh 19 …

+ 여기에 보기

Source: confidence-10211.tistory.com

Date Published: 8/11/2022

View: 5162

[C언어 소스] 3X3 퍼즐 게임 – 언제나 휴일

3X3 배열에 1부터 8까지의 수를 순서대로 나타날 수 있게 방향 키로 이동하는 단순한 콘솔 게임입니다. 3X3 퍼즐 게임. 소스 코드 //3X3 퍼즐 게임 #include …

+ 자세한 내용은 여기를 클릭하십시오

Source: ehpub.co.kr

Date Published: 1/1/2022

View: 960

Best c 언어 게임 만들기 Update

게임 화면을 마우스로 한번 클릭한 후에 키입력을 해주시기 바랍니다. 소스코드: https://github.com/a-mean-blogger/TM-Tetris 제작자: …

+ 여기에 표시

Source: pe.foci.com.vn

Date Published: 4/5/2022

View: 2827

주제와 관련된 이미지 c 언어 게임 소스 코드

주제와 관련된 더 많은 사진을 참조하십시오 C 언어 무료 강의 (입문부터 게임 개발까지). 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

C 언어 무료 강의 (입문부터 게임 개발까지)
C 언어 무료 강의 (입문부터 게임 개발까지)

주제에 대한 기사 평가 c 언어 게임 소스 코드

  • Author: 나도코딩
  • Views: 조회수 1,323,219회
  • Likes: 좋아요 31,592개
  • Date Published: 2020. 9. 15.
  • Video Url link: https://www.youtube.com/watch?v=q6fPjQAzll8

[C언어 게임] 구글 공룡 게임 만들기 (충돌처리 추가)

반응형

안녕하세요. BlockDMask 입니다.

C언어나 C++을 책만보고 공부만하면 재미가 없잖아요. 그래서 제가 간단한 게임을 만들어서 소개해보려 합니다.

제가 만든 게임이 게임성이 없는 프로그램 일 수 있습니다. 순전히 예제, 연습용 게임들이니 너그럽게 이해해주시면 감사하겠습니다.

오늘은 “C/C++로 게임을 만들어보자” 그 첫번째 게임인 “구글 공룡 게임”을 만들어 보았습니다.

사실 게임이라고 하기도 좀 그런게, 충돌판정이나 게임오버 점수주기 이런게 아무것도 없이, 캐릭터 움직임, 점프, 장애물 이동하기 이 세개만 만들어 보았습니다.

이영상을 통해서 “아 C/C++을 이용해서 이렇게 간단히 게임을 만들 수 있구나”를 보여드리고 싶었습니다.

<목차> 1. 게임 이름 및 설명 2. 게임영상 3. C언어 구글 게임 소스 코드 v1.0 (공룡 움직임, 점프, 나무 움직이기 등 기본 세팅) 4. 공룡 게임 소스코드 v2.0 (충돌, 시간에따른 점수 추가)

1. 게임이름 및 설명

▶ C/C++로 만든 구글 공룡 게임

▶ 구글 공룡게임 v1.0

1. z를 누르면 점프를 할 수 있습니다.

2. 공룡의 발을 번갈아 가며 출력합니다.

3. 장애물이 생성 됩니다.

2. 게임영상 (v1.0)

영상 바로가기 : https://youtu.be/TXSmQ6tpRQ4

영상 댓글에 공룡 모양을 복사할 수 있도록 댓글에 작성 해 놓았습니다.

3. 소스코드(v1.0)

코드에 주석을 최대한 자세히 달았으니, 주석을 보고도 이해가 가지 않는다면 댓글 달아주시면 답변 드리겠습니다.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 //[C/C++ game] very simple google dinosaur. //BlockDMask. #include < stdio.h > #include < Windows.h > #include < conio.h > #define DINO_BOTTOM_Y 12 #define TREE_BOTTOM_Y 20 #define TREE_BOTTOM_X 45 //콘솔 창의 크기와 제목을 지정하는 함수 void SetConsoleView() { system( “mode con:cols=100 lines=25” ); system( “title Google Dinosaurs. By BlockDMask” ); } //커서의 위치를 x, y로 이동하는 함수 void GotoXY( int x, int y) { COORD Pos; Pos.X = 2 * x; Pos.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos); } //키보드의 입력을 받고, 입력된 키의 값을 반환하는 함수 int GetKeyDown() { if (_kbhit() ! = 0 ) { return _getch(); } return 0 ; } void DrawDino( int dinoY) { GotoXY( 0 , dinoY); static bool legFlag = true ; printf ( ” $$$$$$$

” ); printf ( ” $$ $$$$$$

” ); printf ( ” $$$$$$$$$

” ); printf ( “$ $$$

” ); printf ( “$$ $$$$$$$

” ); printf ( “$$$ $$$$$

” ); printf ( ” $$ $$$$$$$$$$

” ); printf ( ” $$$$$$$$$$$

” ); printf ( ” $$$$$$$$$$

” ); printf ( ” $$$$$$$$

” ); printf ( ” $$$$$$

” ); if (legFlag) { printf ( ” $ $$$

” ); printf ( ” $$ ” ); legFlag = false ; } else { printf ( ” $$$ $

” ); printf ( ” $$ ” ); legFlag = true ; } } void DrawTree( int treeX) { GotoXY(treeX, TREE_BOTTOM_Y); printf ( “$$$$” ); GotoXY(treeX, TREE_BOTTOM_Y + 1 ); printf ( ” $$ ” ); GotoXY(treeX, TREE_BOTTOM_Y + 2 ); printf ( ” $$ ” ); GotoXY(treeX, TREE_BOTTOM_Y + 3 ); printf ( ” $$ ” ); GotoXY(treeX, TREE_BOTTOM_Y + 4 ); printf ( ” $$ ” ); } int main( void ) { SetConsoleView(); bool isJumping = false ; bool isBottom = true ; const int gravity = 3 ; int dinoY = DINO_BOTTOM_Y; int treeX = TREE_BOTTOM_X; while ( true ) { //z키가 눌렸고, 바닥이 아닐때만 점프가능. if (GetKeyDown() = = ‘z’ & & isBottom) { isJumping = true ; isBottom = false ; } //점프중 = y감소 //점프끝 = y증가 if (isJumping) { dinoY – = gravity; } else { dinoY + = gravity; } //Y가 계속해서 증가하는걸 막기위해 바닥을 지정. //Y가 증가한다는 것은 공룡이 아래로 내려온다는 뜻. if (dinoY > = DINO_BOTTOM_Y) { dinoY = DINO_BOTTOM_Y; isBottom = true ; } //점프의 맨 위를 찍으면 점프가 끝난 상황 if (dinoY < = 3 ) { isJumping = false ; } //나무가 왼쪽으로 가도록 하고(x의 음수방향) //나무의 위치가 왼쪽 끝으로가면 다시 초기 위치로 소환 treeX - = 2 ; if (treeX < = 0 ) { treeX = TREE_BOTTOM_X; } DrawDino(dinoY); //draw dino DrawTree(treeX); //draw tree Sleep( 80 ); system( "cls" ); //clear } system( "pause" ); return 0 ; } Colored by Color Scripter cs 4. 구글 공룡게임 소스코드 충돌처리 및 시간 추가 ▶ 구글 공룡게임 v2 .0 1. 시간에 따라서 점수가 올라가도록 코드 추가하였습니다. 2. 충돌 처리를 넣어달라는 요청이 있어서 간단하게 한번 넣어 보았습니다. ▶ 충돌 처리 간단 설명 간단하게 충돌을 설명해보겠습니다. 제가 직접 그림을 그려보았습니다. 일단 이 게 임에서 x, y는 왼쪽위부터 0,0 이고 오른쪽으로 갈수록 x가 증가 하고 아래쪽으로 갈수록 y가 증가 하는 구조 입니다. 우리가 현재 가지고 있는것은 공룡의 Y축 좌표와 나무의 X좌표 뿐입니다. 따로 좌표를 추가하지않고 우리는 이 두가지 좌표를 통해서 "충돌" 체크를 할 수 있습니다. 말로 한번 설명 드리겠습니다. 나무의 위치X가 공룡몸통에 위치하고 && 공룡의 높이(Y위치)가 적당히 낮을때 충돌이다! 이렇게 판단할 수 있습니다. 그쵸? 그림으로 한번 표현해보겠습니다. 이해가 쑥쑥 가시죠..? 공룡의 머리 기준으로 출력하기 때문에 공룡이 평소에는 y가 12인데 점프를 뛰면 대략 3까지 올라가더군요 그래서 중간 정도인 6정도가 딱 바 에서 나무가 오면 부딪히는걸로 간주하겠다고. 코드를 작성한 것이고 나무의 위치를 보니 공룡쪽으로 오는 X가 4~8 정도가 적당하다고 판단했습니다. 그래서 생겨난 코드가 bool isCollision(const int treeX, const int dinoY) 이 함수입니다. 해당함수 내부를 보면 if (treeX <= 8 && treeX >= 4 && dinoY > 8) 만약에 X(나무)의 위치가 4~8 사이이고 공룡 머머리의 Y가 8보다 높을때(바닥에 가까울때) 충돌했다! 라고 판단하면됩니다.

▶ 구글 공룡게임 v2.0 움짤

공룡이 나무에 부딪히면 게임오버 하는걸 확인할 수 있습니다.

▶ 소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 //[C/C++ game] very simple google dinosaur. (by. BlockDMask) //2019.12.03 (v2.0)점수 추가, 충돌처리 추가. #include < stdio.h > #include < windows.h > #include < conio.h > #include < time.h > #define DINO_BOTTOM_Y 12 #define TREE_BOTTOM_Y 20 #define TREE_BOTTOM_X 45 //콘솔 창의 크기와 제목을 지정하는 함수 void SetConsoleView() { system( “mode con:cols=100 lines=25” ); system( “title Google Dinosaurs. By BlockDMask.” ); } //커서의 위치를 x, y로 이동하는 함수 void GotoXY( int x, int y) { COORD Pos; Pos.X = 2 * x; Pos.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos); } //키보드의 입력을 받고, 입력된 키의 값을 반환하는 함수 int GetKeyDown() { if (_kbhit() ! = 0 ) { return _getch(); } return 0 ; } //공룡을 그리는 함수 void DrawDino( int dinoY) { GotoXY( 0 , dinoY); static bool legFlag = true ; printf ( ” $$$$$$$

” ); printf ( ” $$ $$$$$$

” ); printf ( ” $$$$$$$$$

” ); printf ( “$ $$$

” ); printf ( “$$ $$$$$$$

” ); printf ( “$$$ $$$$$

” ); printf ( ” $$ $$$$$$$$$$

” ); printf ( ” $$$$$$$$$$$

” ); printf ( ” $$$$$$$$$$

” ); printf ( ” $$$$$$$$

” ); printf ( ” $$$$$$

” ); if (legFlag) { printf ( ” $ $$$

” ); printf ( ” $$ ” ); legFlag = false ; } else { printf ( ” $$$ $

” ); printf ( ” $$ ” ); legFlag = true ; } } //나무를 그리는 함수 void DrawTree( int treeX) { GotoXY(treeX, TREE_BOTTOM_Y); printf ( “$$$$” ); GotoXY(treeX, TREE_BOTTOM_Y + 1 ); printf ( ” $$ ” ); GotoXY(treeX, TREE_BOTTOM_Y + 2 ); printf ( ” $$ ” ); GotoXY(treeX, TREE_BOTTOM_Y + 3 ); printf ( ” $$ ” ); GotoXY(treeX, TREE_BOTTOM_Y + 4 ); printf ( ” $$ ” ); } //(v2.0) 충돌 했을때 게임오버 그려줌 void DrawGameOver( const int score) { system( “cls” ); int x = 18 ; int y = 8 ; GotoXY(x, y); printf ( “===========================” ); GotoXY(x, y + 1 ); printf ( “======G A M E O V E R======” ); GotoXY(x, y + 2 ); printf ( “===========================” ); GotoXY(x, y + 5 ); printf ( “SCORE : %d” , score); printf ( ”

” ); system( “pause” ); } //(v2.0) 충돌했으면 true, 아니면 false bool isCollision( const int treeX, const int dinoY) { //트리의 X가 공룡의 몸체쪽에 있을때, //공룡의 높이가 충분하지 않다면 충돌로 처리 GotoXY( 0 , 0 ); printf ( “treeX : %d, dinoY : %d” , treeX, dinoY); //이런식으로 적절한 X, Y를 찾습니다. if (treeX < = 8 & & treeX > = 4 & & dinoY > 8 ) { return true ; } return false ; } int main() { SetConsoleView(); while ( true ) //(v2.0) 게임 루프 { //게임 시작시 초기화 bool isJumping = false ; bool isBottom = true ; const int gravity = 3 ; int dinoY = DINO_BOTTOM_Y; int treeX = TREE_BOTTOM_X; int score = 0 ; clock_t start, curr; //점수 변수 초기화 start = clock(); //시작시간 초기화 while ( true ) //한 판에 대한 루프 { //(v2.0) 충돌체크 트리의 x값과 공룡의 y값으로 판단 if (isCollision(treeX, dinoY)) break ; //z키가 눌렸고, 바닥이 아닐때 점프 if (GetKeyDown() = = ‘z’ & & isBottom) { isJumping = true ; isBottom = false ; } //점프중이라면 Y를 감소, 점프가 끝났으면 Y를 증가. if (isJumping) { dinoY – = gravity; } else { dinoY + = gravity; } //Y가 계속해서 증가하는걸 막기위해 바닥을 지정. if (dinoY > = DINO_BOTTOM_Y) { dinoY = DINO_BOTTOM_Y; isBottom = true ; } //나무가 왼쪽으로 (x음수) 가도록하고 //나무의 위치가 왼쪽 끝으로가면 다시 오른쪽 끝으로 소환. treeX – = 2 ; if (treeX < = 0 ) { treeX = TREE_BOTTOM_X; } //점프의 맨위를 찍으면 점프가 끝난 상황. if (dinoY < = 3 ) { isJumping = false ; } DrawDino(dinoY); //draw dino DrawTree(treeX); //draw Tree //(v2.0) curr = clock(); //현재시간 받아오기 if (((curr - start) / CLOCKS_PER_SEC) > = 1 ) // 1초가 넘었을떄 { score + + ; //스코어 UP start = clock(); //시작시간 초기화 } Sleep( 60 ); system( “cls” ); //clear //(v2.0) 점수출력을 1초마다 해주는것이 아니라 항상 출력해주면서, 1초가 지났을때 ++ 해줍니다. GotoXY( 22 , 0 ); //커서를 가운데 위쪽으로 옮긴다. 콘솔창이 cols=100이니까 2*x이므로 22정도 넣어줌 printf ( “Score : %d ” , score); //점수 출력해줌. } //(v2.0) 게임 오버 메뉴 DrawGameOver(score); } return 0 ; } Colored by Color Scripter cs

C언어로 구글 공룡게임 만들기 이상입니다. 질문이 있다면 아래 댓글로 남겨주세요. 간단한 공룡게임 특성상 더이상 확장할것은 없을것 같네요.

소스코드 : https://github.com/BlockDMask/Google_Dino

반응형

[C언어 게임 만들기] 테트리스 게임 (Tetris)

#include < stdio.h >

#include < windows.h >

#include < conio.h >

#include < time.h >

#include < stdlib.h >

#define LEFT 75 //좌로 이동 //키보드값들

#define RIGHT 77 //우로 이동

#define UP 72 //회전

#define DOWN 80 //soft drop

#define SPACE 32 //hard drop

#define p 112 //일시정지

#define P 80 //일시정지

#define ESC 27 //게임종료

#define false 0

#define true 1

#define ACTIVE_BLOCK – 2 // 게임판배열에 저장될 블록의 상태들

#define CEILLING – 1 // 블록이 이동할 수 있는 공간은 0 또는 음의 정수료 표현

#define EMPTY 0 // 블록이 이동할 수 없는 공간은 양수로 표현

#define WALL 1

#define INACTIVE_BLOCK 2 // 이동이 완료된 블록값

#define MAIN_X 11 //게임판 가로크기

#define MAIN_Y 23 //게임판 세로크기

#define MAIN_X_ADJ 3 //게임판 위치조정

#define MAIN_Y_ADJ 1 //게임판 위치조정

#define STATUS_X_ADJ MAIN_X_ADJ + MAIN_X + 1 //게임정보표시 위치조정

int STATUS_Y_GOAL; //GOAL 정보표시위치Y 좌표 저장

int STATUS_Y_LEVEL; //LEVEL 정보표시위치Y 좌표 저장

int STATUS_Y_SCORE; //SCORE 정보표시위치Y 좌표 저장

int blocks[ 7 ][ 4 ][ 4 ][ 4 ] = {

{{ 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 },{ 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 },{ 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 }},

{{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 },{ 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 },{ 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 }},

{{ 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 },{ 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 },{ 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 0 , 0 }},

{{ 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 },{ 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 1 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 },{ 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 1 , 0 , 0 }},

{{ 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 },{ 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 0 , 1 , 0 , 0 , 0 },{ 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 1 , 0 }},

{{ 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 },{ 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 0 , 0 , 0 , 1 , 0 },{ 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 }},

{{ 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 },{ 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 0 , 0 , 1 , 0 , 0 },{ 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 1 , 0 , 0 }}

}; //블록모양 저장 4*4공간에 블록을 표현 blcoks[b_type][b_rotation][i][j]로 사용

int b_type; //블록 종류를 저장

int b_rotation; //블록 회전값 저장

int b_type_next; //다음 블록값 저장

int main_org[MAIN_Y][MAIN_X]; //게임판의 정보를 저장하는 배열 모니터에 표시후에 main_cpy로 복사됨

int main_cpy[MAIN_Y][MAIN_X]; //즉 maincpy는 게임판이 모니터에 표시되기 전의 정보를 가지고 있음

//main의 전체를 계속 모니터에 표시하지 않고(이렇게 하면 모니터가 깜빡거림)

//main_cpy와 배열을 비교해서 값이 달라진 곳만 모니터에 고침

int bx,by; //이동중인 블록의 게임판상의 x,y좌표를 저장

int key; //키보드로 입력받은 키값을 저장

int speed; //게임진행속도

int level; //현재 level

int level_goal; //다음레벨로 넘어가기 위한 목표점수

int cnt; //현재 레벨에서 제거한 줄 수를 저장

int score; //현재 점수

int last_score = 0 ; //마지막게임점수

int best_score = 0 ; //최고게임점수

int new_block_on = 0 ; //새로운 블럭이 필요함을 알리는 flag

int crush_on = 0 ; //현재 이동중인 블록이 충돌상태인지 알려주는 flag

int level_up_on = 0 ; //다음레벨로 진행(현재 레벨목표가 완료되었음을) 알리는 flag

int space_key_on = 0 ; //hard drop상태임을 알려주는 flag

void title( void ); //게임시작화면

void reset( void ); //게임판 초기화

void reset_main( void ); //메인 게임판(main_org[][]를 초기화)

void reset_main_cpy( void ); //copy 게임판(main_cpy[][]를 초기화)

void draw_map( void ); //게임 전체 인터페이스를 표시

void draw_main( void ); //게임판을 그림

void new_block( void ); //새로운 블록을 하나 만듦

void check_key( void ); //키보드로 키를 입력받음

void drop_block( void ); //블록을 아래로 떨어트림

int check_crush( int bx, int by, int rotation); //bx, by위치에 rotation회전값을 같는 경우 충돌 판단

void move_block( int dir); //dir방향으로 블록을 움직임

void check_line( void ); //줄이 가득찼는지를 판단하고 지움

void check_level_up( void ); //레벨목표가 달성되었는지를 판단하고 levelup시킴

void check_game_over( void ); //게임오버인지 판단하고 게임오버를 진행

void pause( void ); //게임을 일시정지시킴

void gotoxy( int x, int y) { //gotoxy함수

COORD pos = { 2 * x,y};

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);

}

typedef enum { NOCURSOR, SOLIDCURSOR, NORMALCURSOR } CURSOR_TYPE; //커서숨기는 함수에 사용되는 열거형

void setcursortype(CURSOR_TYPE c){ //커서숨기는 함수

CONSOLE_CURSOR_INFO CurInfo;

switch (c) {

case NOCURSOR:

CurInfo.dwSize = 1 ;

CurInfo.bVisible = FALSE;

break ;

case SOLIDCURSOR:

CurInfo.dwSize = 100 ;

CurInfo.bVisible = TRUE;

break ;

case NORMALCURSOR:

CurInfo.dwSize = 20 ;

CurInfo.bVisible = TRUE;

break ;

}

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&CurInfo);

}

int main(){

int i;

srand(( unsigned )time(NULL)); //난수표생성

setcursortype(NOCURSOR); //커서 없앰

title(); //메인타이틀 호출

reset(); //게임판 리셋

while ( 1 ){

for (i = 0 ;i < 5 ;i + + ){ //블록이 한칸떨어지는동안 5번 키입력받을 수 있음 check_key(); //키입력확인 draw_main(); //화면을 그림 Sleep(speed); //게임속도조절 if (crush_on&&check_crush(bx,by + 1 , b_rotation) = = false ) Sleep( 100 ); //블록이 충돌중인경우 추가로 이동및 회전할 시간을 갖음 if (space_key_on = = 1 ) { //스페이스바를 누른경우(hard drop) 추가로 이동및 회전할수 없음 break; space_key_on = 0 ; break ; } } drop_block(); // 블록을 한칸 내림 check_level_up(); // 레벨업을 체크 check_game_over(); //게임오버를 체크 if (new_block_on = = 1 ) new_block(); // 뉴 블럭 flag가 있는 경우 새로운 블럭 생성 } } void title( void ){ int x = 5 ; //타이틀화면이 표시되는 x좌표 int y = 4 ; //타이틀화면이 표시되는 y좌표 int cnt; //타이틀 프레임을 세는 변수 gotoxy(x,y + 0 );printf( "■□□□■■■□□■■□□■■" );Sleep( 100 ); gotoxy(x,y + 1 );printf( "■■■□ ■□□ ■■□□■" );Sleep( 100 ); gotoxy(x,y + 2 );printf( "□□□■ □■ ■" );Sleep( 100 ); gotoxy(x,y + 3 );printf( "■■□■■ □ ■ □□■□□" );Sleep( 100 ); gotoxy(x,y + 4 );printf( "■■ ■□□□■■■□■■□□" );Sleep( 100 ); gotoxy(x,y + 5 );printf( " blog.naver.com/azure0777" );Sleep( 100 ); gotoxy(x + 5 ,y + 2 );printf( "T E T R I S" );Sleep( 100 ); gotoxy(x,y + 7 );printf( "Please Enter Any Key to Start.." ); gotoxy(x,y + 9 ); printf( " △ : Shift" ); gotoxy(x,y + 10 ); printf( "◁ ▷ : Left / Right" ); gotoxy(x,y + 11 ); printf( " ▽ : Soft Drop" ); gotoxy(x,y + 12 ); printf( " SPACE : Hard Drop" ); gotoxy(x,y + 13 ); printf( " P : Pause" ); gotoxy(x,y + 14 ); printf( " ESC : Quit" ); gotoxy(x,y + 16 ); printf( "BONUS FOR HARD DROPS / COMBOS" ); for (cnt = 0 ;;cnt + + ){ //cnt를 1씩 증가시키면서 계속 반복 //하나도 안중요한 별 반짝이는 애니메이션효과 if (kbhit()) break ; //키입력이 있으면 무한루프 종료 if (cnt% 200 = = 0 ){gotoxy(x + 4 ,y + 1 );printf( "★" );} //cnt가 200으로 나누어 떨어질때 별을 표시 if ((cnt% 200 - 100 ) = = 0 ){gotoxy(x + 4 ,y + 1 );printf( " " );} //위 카운트에서 100카운트 간격으로 별을 지움 if ((cnt% 350 ) = = 0 ){gotoxy(x + 13 ,y + 2 );printf( "☆" );} //윗별과 같지만 시간차를 뒀음 if ((cnt% 350 - 100 ) = = 0 ){gotoxy(x + 13 ,y + 2 );printf( " " );} Sleep( 10 ); // 00.1초 딜레이 } while (kbhit()) getch(); //버퍼에 기록된 키값을 버림 } void reset( void ){ FILE * file = fopen( "score.dat" , "rt" ); // score.dat파일을 연결 if (file = = 0 ){best_score = 0 ;} //파일이 없으면 걍 최고점수에 0을 넣음 else { fscanf(file, "%d" , &best_score); // 파일이 열리면 최고점수를 불러옴 fclose(file); //파일 닫음 } level = 1 ; //각종변수 초기화 score = 0 ; level_goal = 1000 ; key = 0 ; crush_on = 0 ; cnt = 0 ; speed = 100 ; system( "cls" ); //화면지움 reset_main(); // main_org를 초기화 draw_map(); // 게임화면을 그림 draw_main(); // 게임판을 그림 b_type_next = rand()% 7 ; //다음번에 나올 블록 종류를 랜덤하게 생성 new_block(); //새로운 블록을 하나 만듦 } void reset_main( void ){ //게임판을 초기화 int i,j; for (i = 0 ;i < MAIN_Y;i + + ){ // 게임판을 0으로 초기화 for (j = 0 ;j < MAIN_X;j + + ){ main_org[i][j] = 0 ; main_cpy[i][j] = 100 ; } } for (j = 1 ;j < MAIN_X;j + + ){ //y값이 3인 위치에 천장을 만듦 main_org[ 3 ][j] = CEILLING; } for (i = 1 ;i < MAIN_Y - 1 ;i + + ){ //좌우 벽을 만듦 main_org[i][ 0 ] = WALL; main_org[i][MAIN_X - 1 ] = WALL; } for (j = 0 ;j < MAIN_X;j + + ){ //바닥벽을 만듦 main_org[MAIN_Y - 1 ][j] = WALL; } } void reset_main_cpy( void ){ //main_cpy를 초기화 int i, j; for (i = 0 ;i < MAIN_Y;i + + ){ //게임판에 게임에 사용되지 않는 숫자를 넣음 for (j = 0 ;j < MAIN_X;j + + ){ //이는 main_org와 같은 숫자가 없게 하기 위함 main_cpy[i][j] = 100 ; } } } void draw_map( void ){ //게임 상태 표시를 나타내는 함수 int y = 3 ; // level, goal, score만 게임중에 값이 바뀔수 도 있음 그 y값을 따로 저장해둠 // 그래서 혹시 게임 상태 표시 위치가 바뀌어도 그 함수에서 안바꿔도 되게.. gotoxy(STATUS_X_ADJ, STATUS_Y_LEVEL = y); printf( " LEVEL : %5d" , level); gotoxy(STATUS_X_ADJ, STATUS_Y_GOAL = y + 1 ); printf( " GOAL : %5d" , 10 - cnt); gotoxy(STATUS_X_ADJ, y + 2 ); printf( "+- N E X T -+ " ); gotoxy(STATUS_X_ADJ, y + 3 ); printf( "| | " ); gotoxy(STATUS_X_ADJ, y + 4 ); printf( "| | " ); gotoxy(STATUS_X_ADJ, y + 5 ); printf( "| | " ); gotoxy(STATUS_X_ADJ, y + 6 ); printf( "| | " ); gotoxy(STATUS_X_ADJ, y + 7 ); printf( "+-- - - - --+ " ); gotoxy(STATUS_X_ADJ, y + 8 ); printf( " YOUR SCORE :" ); gotoxy(STATUS_X_ADJ, STATUS_Y_SCORE = y + 9 ); printf( " %6d" , score); gotoxy(STATUS_X_ADJ, y + 10 ); printf( " LAST SCORE :" ); gotoxy(STATUS_X_ADJ, y + 11 ); printf( " %6d" , last_score); gotoxy(STATUS_X_ADJ, y + 12 ); printf( " BEST SCORE :" ); gotoxy(STATUS_X_ADJ, y + 13 ); printf( " %6d" , best_score); gotoxy(STATUS_X_ADJ, y + 15 ); printf( " △ : Shift SPACE : Hard Drop" ); gotoxy(STATUS_X_ADJ, y + 16 ); printf( "◁ ▷ : Left / Right P : Pause" ); gotoxy(STATUS_X_ADJ, y + 17 ); printf( " ▽ : Soft Drop ESC : Quit" ); gotoxy(STATUS_X_ADJ, y + 20 );printf( "blog.naver.com/azure0777" ); } void draw_main( void ){ //게임판 그리는 함수 int i, j; for (j = 1 ;j < MAIN_X - 1 ;j + + ){ //천장은 계속 새로운블럭이 지나가서 지워지면 새로 그려줌 if (main_org[ 3 ][j] = = EMPTY) main_org[ 3 ][j] = CEILLING; } for (i = 0 ;i < MAIN_Y;i + + ){ for (j = 0 ;j < MAIN_X;j + + ){ if (main_cpy[i][j] ! = main_org[i][j]){ //cpy랑 비교해서 값이 달라진 부분만 새로 그려줌. //이게 없으면 게임판전체를 계속 그려서 느려지고 반짝거림 gotoxy(MAIN_X_ADJ + j,MAIN_Y_ADJ + i); switch (main_org[i][j]){ case EMPTY: //빈칸모양 printf( " " ); break ; case CEILLING: //천장모양 printf( ". " ); break ; case WALL: //벽모양 printf( "▩" ); break ; case INACTIVE_BLOCK: //굳은 블럭 모양 printf( "□" ); break ; case ACTIVE_BLOCK: //움직이고있는 블럭 모양 printf( "■" ); break ; } } } } for (i = 0 ;i < MAIN_Y;i + + ){ //게임판을 그린 후 main_cpy에 복사 for (j = 0 ;j < MAIN_X;j + + ){ main_cpy[i][j] = main_org[i][j]; } } } void new_block( void ){ //새로운 블록 생성 int i, j; bx = (MAIN_X / 2 ) - 1 ; //블록 생성 위치x좌표(게임판의 가운데) by = 0 ; //블록 생성위치 y좌표(제일 위) b_type = b_type_next; //다음블럭값을 가져옴 b_type_next = rand()% 7 ; //다음 블럭을 만듦 b_rotation = 0 ; //회전은 0번으로 가져옴 new_block_on = 0 ; //new_block flag를 끔 for (i = 0 ;i < 4 ;i + + ){ //게임판 bx, by위치에 블럭생성 for (j = 0 ;j < 4 ;j + + ){ if (blocks[b_type][b_rotation][i][j] = = 1 ) main_org[by + i][bx + j] = ACTIVE_BLOCK; } } for (i = 1 ;i < 3 ;i + + ){ //게임상태표시에 다음에 나올블럭을 그림 for (j = 0 ;j < 4 ;j + + ){ if (blocks[b_type_next][ 0 ][i][j] = = 1 ) { gotoxy(STATUS_X_ADJ + 2 + j,i + 6 ); printf( "■" ); } else { gotoxy(STATUS_X_ADJ + 2 + j,i + 6 ); printf( " " ); } } } } void check_key( void ){ key = 0 ; //키값 초기화 if (kbhit()){ //키입력이 있는 경우 key = getch(); //키값을 받음 if (key = = 224 ){ //방향키인경우 do {key = getch();} while (key = = 224 ); //방향키지시값을 버림 switch (key){ case LEFT: //왼쪽키 눌렀을때 if (check_crush(bx - 1 ,by,b_rotation) = = true ) move_block(LEFT); break ; //왼쪽으로 갈 수 있는지 체크 후 가능하면 이동 case RIGHT: //오른쪽 방향키 눌렀을때- 위와 동일하게 처리됨 if (check_crush(bx + 1 ,by,b_rotation) = = true ) move_block(RIGHT); break ; case DOWN: //아래쪽 방향키 눌렀을때-위와 동일하게 처리됨 if (check_crush(bx,by + 1 ,b_rotation) = = true ) move_block(DOWN); break ; case UP: //위쪽 방향키 눌렀을때 if (check_crush(bx,by,(b_rotation + 1 )% 4 ) = = true ) move_block(UP); //회전할 수 있는지 체크 후 가능하면 회전 else if (crush_on = = 1&&check_crush(bx,by - 1 ,(b_rotation + 1 )% 4 ) = = true ) move_block( 100 ); } //바닥에 닿은 경우 위쪽으로 한칸띄워서 회전이 가능하면 그렇게 함(특수동작) } else { //방향키가 아닌경우 switch (key){ case SPACE: //스페이스키 눌렀을때 space_key_on = 1 ; //스페이스키 flag를 띄움 while (crush_on = = 0 ){ //바닥에 닿을때까지 이동시킴 drop_block(); score + = level; // hard drop 보너스 gotoxy(STATUS_X_ADJ, STATUS_Y_SCORE); printf( " %6d" , score); //점수 표시 } break ; case P: //P(대문자) 눌렀을때 case p: //p(소문자) 눌렀을때 pause(); //일시정지 break ; case ESC: //ESC눌렀을때 system( "cls" ); //화면을 지우고 exit( 0 ); //게임종료 } } } while (kbhit()) getch(); //키버퍼를 비움 } void drop_block( void ){ int i,j; if (crush_on&&check_crush(bx,by + 1 , b_rotation) = = true ) crush_on = 0 ; //밑이 비어있으면 crush flag 끔 if (crush_on&&check_crush(bx,by + 1 , b_rotation) = = false ){ //밑이 비어있지않고 crush flag가 켜저있으면 for (i = 0 ;i < MAIN_Y;i + + ){ //현재 조작중인 블럭을 굳힘 for (j = 0 ;j < MAIN_X;j + + ){ if (main_org[i][j] = = ACTIVE_BLOCK) main_org[i][j] = INACTIVE_BLOCK; } } crush_on = 0 ; //flag를 끔 check_line(); //라인체크를 함 new_block_on = 1 ; //새로운 블럭생성 flag를 켬 return ; //함수 종료 } if (check_crush(bx,by + 1 , b_rotation) = = true ) move_block(DOWN); //밑이 비어있으면 밑으로 한칸 이동 if (check_crush(bx,by + 1 , b_rotation) = = false ) crush_on + + ; //밑으로 이동이 안되면 crush flag를 켬 } int check_crush( int bx, int by, int b_rotation){ //지정된 좌표와 회전값으로 충돌이 있는지 검사 int i,j; for (i = 0 ;i < 4 ;i + + ){ for (j = 0 ;j < 4 ;j + + ){ //지정된 위치의 게임판과 블럭모양을 비교해서 겹치면 false를 리턴 if (blocks[b_type][b_rotation][i][j] = = 1&&main_org[by + i][bx + j] > 0 ) return false ;

}

}

return true ; //하나도 안겹치면 true리턴

};

void move_block( int dir){ //블록을 이동시킴

int i,j;

switch (dir){

case LEFT: //왼쪽방향

for (i = 0 ;i < 4 ;i + + ){ //현재좌표의 블럭을 지움 for (j = 0 ;j < 4 ;j + + ){ if (blocks[b_type][b_rotation][i][j] = = 1 ) main_org[by + i][bx + j] = EMPTY; } } for (i = 0 ;i < 4 ;i + + ){ //왼쪽으로 한칸가서 active block을 찍음 for (j = 0 ;j < 4 ;j + + ){ if (blocks[b_type][b_rotation][i][j] = = 1 ) main_org[by + i][bx + j - 1 ] = ACTIVE_BLOCK; } } bx - - ; //좌표값 이동 break ; case RIGHT: //오른쪽 방향. 왼쪽방향이랑 같은 원리로 동작 for (i = 0 ;i < 4 ;i + + ){ for (j = 0 ;j < 4 ;j + + ){ if (blocks[b_type][b_rotation][i][j] = = 1 ) main_org[by + i][bx + j] = EMPTY; } } for (i = 0 ;i < 4 ;i + + ){ for (j = 0 ;j < 4 ;j + + ){ if (blocks[b_type][b_rotation][i][j] = = 1 ) main_org[by + i][bx + j + 1 ] = ACTIVE_BLOCK; } } bx + + ; break ; case DOWN: //아래쪽 방향. 왼쪽방향이랑 같은 원리로 동작 for (i = 0 ;i < 4 ;i + + ){ for (j = 0 ;j < 4 ;j + + ){ if (blocks[b_type][b_rotation][i][j] = = 1 ) main_org[by + i][bx + j] = EMPTY; } } for (i = 0 ;i < 4 ;i + + ){ for (j = 0 ;j < 4 ;j + + ){ if (blocks[b_type][b_rotation][i][j] = = 1 ) main_org[by + i + 1 ][bx + j] = ACTIVE_BLOCK; } } by + + ; break ; case UP: //키보드 위쪽 눌렀을때 회전시킴. for (i = 0 ;i < 4 ;i + + ){ //현재좌표의 블럭을 지움 for (j = 0 ;j < 4 ;j + + ){ if (blocks[b_type][b_rotation][i][j] = = 1 ) main_org[by + i][bx + j] = EMPTY; } } b_rotation = (b_rotation + 1 )% 4 ; //회전값을 1증가시킴(3에서 4가 되는 경우는 0으로 되돌림) for (i = 0 ;i < 4 ;i + + ){ //회전된 블록을 찍음 for (j = 0 ;j < 4 ;j + + ){ if (blocks[b_type][b_rotation][i][j] = = 1 ) main_org[by + i][bx + j] = ACTIVE_BLOCK; } } break ; case 100 : //블록이 바닥, 혹은 다른 블록과 닿은 상태에서 한칸위로 올려 회전이 가능한 경우 //이를 동작시키는 특수동작 for (i = 0 ;i < 4 ;i + + ){ for (j = 0 ;j < 4 ;j + + ){ if (blocks[b_type][b_rotation][i][j] = = 1 ) main_org[by + i][bx + j] = EMPTY; } } b_rotation = (b_rotation + 1 )% 4 ; for (i = 0 ;i < 4 ;i + + ){ for (j = 0 ;j < 4 ;j + + ){ if (blocks[b_type][b_rotation][i][j] = = 1 ) main_org[by + i - 1 ][bx + j] = ACTIVE_BLOCK; } } by - - ; break ; } } void check_line( void ){ int i, j, k, l; int block_amount; //한줄의 블록갯수를 저장하는 변수 int combo = 0 ; //콤보갯수 저장하는 변수 지정및 초기화 for (i = MAIN_Y - 2 ;i > 3 ;){ //i=MAIN_Y-2 : 밑쪽벽의 윗칸부터, i>3 : 천장(3)아래까지 검사

block_amount = 0 ; //블록갯수 저장 변수 초기화

for (j = 1 ;j < MAIN_X - 1 ;j + + ){ //벽과 벽사이의 블록갯루를 셈 if (main_org[i][j] > 0 ) block_amount + + ;

}

if (block_amount = = MAIN_X – 2 ){ //블록이 가득 찬 경우

if (level_up_on = = 0 ){ //레벨업상태가 아닌 경우에(레벨업이 되면 자동 줄삭제가 있음)

score + = 100 * level; //점수추가

cnt + + ; //지운 줄 갯수 카운트 증가

combo + + ; //콤보수 증가

}

for (k = i;k > 1 ;k – – ){ //윗줄을 한칸씩 모두 내림(윗줄이 천장이 아닌 경우에만)

for (l = 1 ;l < MAIN_X - 1 ;l + + ){ if (main_org[k - 1 ][l] ! = CEILLING) main_org[k][l] = main_org[k - 1 ][l]; if (main_org[k - 1 ][l] = = CEILLING) main_org[k][l] = EMPTY; //윗줄이 천장인 경우에는 천장을 한칸 내리면 안되니까 빈칸을 넣음 } } } else i - - ; } if (combo){ //줄 삭제가 있는 경우 점수와 레벨 목표를 새로 표시함 if (combo > 1 ){ //2콤보이상인 경우 경우 보너스및 메세지를 게임판에 띄웠다가 지움

gotoxy(MAIN_X_ADJ + (MAIN_X / 2 ) – 1 ,MAIN_Y_ADJ + by – 2 );printf( “%d COMBO!” ,combo);

Sleep( 500 );

score + = (combo * level * 100 );

reset_main_cpy(); //텍스트를 지우기 위해 main_cpy을 초기화.

//(main_cpy와 main_org가 전부 다르므로 다음번 draw()호출시 게임판 전체를 새로 그리게 됨)

}

gotoxy(STATUS_X_ADJ, STATUS_Y_GOAL); printf( ” GOAL : %5d” , (cnt < = 10 )? 10 - cnt: 0 ); gotoxy(STATUS_X_ADJ, STATUS_Y_SCORE); printf( " %6d" , score); } } void check_level_up( void ){ int i, j; if (cnt > = 10 ){ //레벨별로 10줄씩 없애야함. 10줄이상 없앤 경우

draw_main();

level_up_on = 1 ; //레벨업 flag를 띄움

level + = 1 ; //레벨을 1 올림

cnt = 0 ; //지운 줄수 초기화

for (i = 0 ;i < 4 ;i + + ){ gotoxy(MAIN_X_ADJ + (MAIN_X / 2 ) - 3 ,MAIN_Y_ADJ + 4 ); printf( " " ); gotoxy(MAIN_X_ADJ + (MAIN_X / 2 ) - 2 ,MAIN_Y_ADJ + 6 ); printf( " " ); Sleep( 200 ); gotoxy(MAIN_X_ADJ + (MAIN_X / 2 ) - 3 ,MAIN_Y_ADJ + 4 ); printf( "☆LEVEL UP!☆" ); gotoxy(MAIN_X_ADJ + (MAIN_X / 2 ) - 2 ,MAIN_Y_ADJ + 6 ); printf( "☆SPEED UP!☆" ); Sleep( 200 ); } reset_main_cpy(); //텍스트를 지우기 위해 main_cpy을 초기화. //(main_cpy와 main_org가 전부 다르므로 다음번 draw()호출시 게임판 전체를 새로 그리게 됨) for (i = MAIN_Y - 2 ;i > MAIN_Y – 2 – (level – 1 );i – – ){ //레벨업보상으로 각 레벨-1의 수만큼 아랫쪽 줄을 지워줌

for (j = 1 ;j < MAIN_X - 1 ;j + + ){ main_org[i][j] = INACTIVE_BLOCK; // 줄을 블록으로 모두 채우고 gotoxy(MAIN_X_ADJ + j,MAIN_Y_ADJ + i); // 별을 찍어줌.. 이뻐보이게 printf( "★" ); Sleep( 20 ); } } Sleep( 100 ); //별찍은거 보여주기 위해 delay check_line(); //블록으로 모두 채운것 지우기 //.check_line()함수 내부에서 level up flag가 켜져있는 경우 점수는 없음. switch (level){ //레벨별로 속도를 조절해줌. case 2 : speed = 50 ; break ; case 3 : speed = 25 ; break ; case 4 : speed = 10 ; break ; case 5 : speed = 5 ; break ; case 6 : speed = 4 ; break ; case 7 : speed = 3 ; break ; case 8 : speed = 2 ; break ; case 9 : speed = 1 ; break ; case 10 : speed = 0 ; break ; } level_up_on = 0 ; //레벨업 flag꺼줌 gotoxy(STATUS_X_ADJ, STATUS_Y_LEVEL); printf( " LEVEL : %5d" , level); //레벨표시 gotoxy(STATUS_X_ADJ, STATUS_Y_GOAL); printf( " GOAL : %5d" , 10 - cnt); // 레벨목표 표시 } } void check_game_over( void ){ int i; int x = 5 ; int y = 5 ; for (i = 1 ;i < MAIN_X - 2 ;i + + ){ if (main_org[ 3 ][i] > 0 ){ //천장(위에서 세번째 줄)에 inactive가 생성되면 게임 오버

gotoxy(x,y + 0 ); printf( “▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤” ); //게임오버 메세지

gotoxy(x,y + 1 ); printf( “▤ ▤” );

gotoxy(x,y + 2 ); printf( “▤ +———————–+ ▤” );

gotoxy(x,y + 3 ); printf( “▤ | G A M E O V E R.. | ▤” );

gotoxy(x,y + 4 ); printf( “▤ +———————–+ ▤” );

gotoxy(x,y + 5 ); printf( “▤ YOUR SCORE: %6d ▤” ,score);

gotoxy(x,y + 6 ); printf( “▤ ▤” );

gotoxy(x,y + 7 ); printf( “▤ Press any key to restart.. ▤” );

gotoxy(x,y + 8 ); printf( “▤ ▤” );

gotoxy(x,y + 9 ); printf( “▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤” );

last_score = score; //게임점수를 옮김

if (score > best_score){ //최고기록 갱신시

FILE * file = fopen( “score.dat” , “wt” ); //score.dat에 점수 저장

gotoxy(x,y + 6 ); printf( “▤ ★★★ BEST SCORE! ★★★ ▤ ” );

if (file = = 0 ){ //파일 에러메세지

gotoxy( 0 , 0 );

printf( “FILE ERROR: SYSTEM CANNOT WRITE BEST SCORE ON \”SCORE.DAT\”” );

}

else {

fprintf(file, “%d” , score);

fclose(file);

}

}

Sleep( 1000 );

while (kbhit()) getch();

key = getch();

reset();

}

}

}

void pause( void ){ //게임 일시정지 함수

int i,j;

int x = 5 ;

int y = 5 ;

for (i = 1 ;i < MAIN_X - 2 ;i + + ){ //게임 일시정지 메세지 gotoxy(x,y + 0 ); printf( "▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤" ); gotoxy(x,y + 1 ); printf( "▤ ▤" ); gotoxy(x,y + 2 ); printf( "▤ +-----------------------+ ▤" ); gotoxy(x,y + 3 ); printf( "▤ | P A U S E | ▤" ); gotoxy(x,y + 4 ); printf( "▤ +-----------------------+ ▤" ); gotoxy(x,y + 5 ); printf( "▤ Press any key to resume.. ▤" ); gotoxy(x,y + 6 ); printf( "▤ ▤" ); gotoxy(x,y + 7 ); printf( "▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤▤" ); } getch(); //키입력시까지 대기 system( "cls" ); //화면 지우고 새로 그림 reset_main_cpy(); draw_main(); draw_map(); for (i = 1 ;i < 3 ;i + + ){ // 다음블록 그림 for (j = 0 ;j < 4 ;j + + ){ if (blocks[b_type_next][ 0 ][i][j] = = 1 ) { gotoxy(MAIN_X + MAIN_X_ADJ + 3 + j,i + 6 ); printf( "■" ); } else { gotoxy(MAIN_X + MAIN_X_ADJ + 3 + j,i + 6 ); printf( " " ); } } }

c언어 뱀게임 소스코드

/*************

작성일자 : 2018.10.23

작성자 : Kocaine

게임이름 : Snake Game 1.2

**************/

#include < stdio.h >

#include < Windows.h >

#include < conio.h >

#include < stdlib.h >

#include < stdbool.h >

#include < time.h >

#define DOWN 80

#define LEFT 75

#define RIGHT 77

#define UP 72

#define MAPWIDTH 20

#define MAPHEIGHT 20

#define SNAKELENGTH 17

typedef struct _body

{

int x;

int y;

}Body;

Body body[ 18 ][ 18 ];

Body Temp[ 18 ][ 18 ];

typedef struct _food

{

int x;

int y;

}Food;

Food food;

int i, j;

typedef struct _logic

{

bool Up;

bool Down;

bool Right;

bool Left;

}Logic;

Logic l;

int snake[ 18 ][ 18 ] =

{

{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 },

{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 }

};

int map[ 20 ][ 20 ] =

{

{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 },

{ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 },

{ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 },

{ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 },

{ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 },

{ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 },

{ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 },

{ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 },

{ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 },

{ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 },

{ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 },

{ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 },

{ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 },

{ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 },

{ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 },

{ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 },

{ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 },

{ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 },

{ 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 },

{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 }

};

void Map();

void Init();

void TempToBody();

void MoveCoor();

void BodyToTemp();

void Delete();

void Output();

void Move();

void FoodOutput();

void Eat();

void BodyPlus();

void Score();

void Clear();

void GameOver();

void GameExplain();

void gotoxy( int x, int y);

void CursorView( char show); //커서숨기기

void Map()

{

for (i = 0 ; i < MAPHEIGHT; i + + ) { for (j = 0 ; j < MAPWIDTH; j + + ) { if (map[i][j] = = 1 ) printf ( "■" ); else printf ( " " ); } printf ( " " ); } } void Init() { l.Up = false ; l.Down = false ; l.Right = false ; l.Left = false ; body[ 17 ][ 17 ].x = 14 ; body[ 17 ][ 17 ].y = 14 ; body[ 17 ][ 16 ].x = 12 ; body[ 17 ][ 16 ].y = 14 ; body[ 17 ][ 15 ].x = 10 ; body[ 17 ][ 15 ].y = 14 ; } void TempToBody() { bool ExitOutLoop = false ; for (i = 17 ; i > = 0 ; i – – )

{

for (j = 17 ; j > = 0 ; j – – )

{

if (snake[i][j] = = 1 )

{

Temp[i][j].x = body[i][j].x;

Temp[i][j].y = body[i][j].y;

}

if (snake[i][j] = = 0 )

{

ExitOutLoop = true ;

break ;

}

}

if (ExitOutLoop = = true )

{

ExitOutLoop = false ;

break ;

}

}

}

void MoveCoor()

{

if (l.Up = = true )

{

TempToBody();

body[ 17 ][ 17 ].y – – ;

BodyToTemp();

}

if (l.Down = = true )

{

TempToBody();

body[ 17 ][ 17 ].y + + ;

BodyToTemp();

}

if (l.Right = = true )

{

TempToBody();

body[ 17 ][ 17 ].x + = 2 ;

BodyToTemp();

}

if (l.Left = = true )

{

TempToBody();

body[ 17 ][ 17 ].x – = 2 ;

BodyToTemp();

}

}

void BodyToTemp()

{

bool ExitOutLoop = false ;

for (i = 17 ; i > 0 ; i – – )

{

for (j = 17 ; j > = 0 ; j – – )

{

if (snake[i][j] = = 0 & & j = = 0 )

{

body[i – 1 ][ 17 ].x = Temp[i][j].x;

body[i – 1 ][ 17 ].y = Temp[i][j].y;

ExitOutLoop = true ;

break ;

}

body[i][j – 1 ].x = Temp[i][j].x;

body[i][j – 1 ].y = Temp[i][j].y;

}

if (ExitOutLoop = = true )

{

ExitOutLoop = false ;

break ;

}

}

}

void Delete()

{

bool ExitOutLoop = false ;

for (i = 17 ; i > = 0 ; i – – )

{

for (j = 17 ; j > = 0 ; j – – )

{

if (snake[i][j] = = 1 )

{

gotoxy(body[i][j].x, body[i][j].y);

printf ( ” ” );

}

else

{

ExitOutLoop = true ;

break ;

}

}

if (ExitOutLoop = = true )

{

ExitOutLoop = false ;

break ;

}

}

}

void Output()

{

bool ExitOutLoop = false ;

for (i = 17 ; i > = 0 ; i – – )

{

for (j = 17 ; j > = 0 ; j – – )

{

if (snake[i][j] = = 1 )

{

gotoxy(body[i][j].x, body[i][j].y);

printf ( “■” );

}

else

{

ExitOutLoop = true ;

break ;

}

}

if (ExitOutLoop = = true )

{

ExitOutLoop = false ;

break ;

}

}

}

void Move()

{

int Time = 150 ;

while ( 1 )

{

Sleep(Time);

Delete();

MoveCoor();

Output();

Eat();

GameOver();

if (_kbhit())

break ;

}

}

void FoodOutput()

{

bool ExitOutLoop = false ;

srand(time( NULL ));

food.x = (rand() % 18 + 1 ) * 2 ;

food.y = rand() % 18 + 1 ;

for (i = 17 ; i > = 0 ; i – – )

{

for (j = 17 ; j > = 0 ; j – – )

{

if (body[i][j].x = = food.x & & body[i][j].y = = food.y)

{

food.x = (rand() % 18 + 1 ) * 2 ;

food.y = rand() % 18 + 1 ;

}

}

}

gotoxy(food.x, food.y);

printf ( “★” );

}

void Eat()

{

if (body[ 17 ][ 17 ].x = = food.x & & body[ 17 ][ 17 ].y = = food.y)

{

Score();

BodyPlus();

FoodOutput();

}

}

void BodyPlus()

{

bool ExitOutLoop = false ;

for (i = 17 ; i > = 0 ; i – – )

{

for (j = 17 ; j > = 0 ; j – – )

{

if (snake[i][j] = = 0 )

{

snake[i][j] = 1 ;

ExitOutLoop = true ;

break ;

}

}

if (ExitOutLoop = = true )

{

ExitOutLoop = false ;

break ;

}

}

}

void Score()

{

static int score = 0 ;

score + = 100 ;

gotoxy( 70 , 20 );

printf ( “점수 : %d” , score);

if (score = = 30000 )

Clear();

}

void GameOver()

{

if (body[ 17 ][ 17 ].x > = 38 | | body[ 17 ][ 17 ].x < = 0 ) { system( "cls" ); printf ( "게임 오버" ); exit( 0 ); } if (body[ 17 ][ 17 ].y > = 19 | | body[ 17 ][ 17 ].y < = 0 ) { system( "cls" ); printf ( "게임 오버" ); exit( 0 ); } for (i = 17 ; i > = 0 ; i – – )

{

for (j = 16 ; j > = 0 ; j – – )

{

if (body[ 17 ][ 17 ].x = = body[i][j].x & &

body[ 17 ][ 17 ].y = = body[i][j].y)

{

system( “cls” );

printf ( “게임 오버” );

exit( 0 );

}

}

}

}

void GameExplain()

{

gotoxy( 70 , 10 );

puts( “처음엔 왼쪽키 안됨” );

gotoxy( 70 , 11 );

puts( “방향키 : 이동” );

gotoxy( 70 , 12 );

puts( “머리가 몸이나 벽에 닿을시 게임오버” );

gotoxy( 70 , 13 );

puts( “별을 먹으면 점수 +100” );

gotoxy( 70 , 14 );

puts( “q누르면 게임종료” );

}

void Clear()

{

system( “cls” );

printf ( “클리어” );

exit( 0 );

}

int main()

{

int key;

Map();

CursorView( 0 );

Init();

Output();

FoodOutput();

while ( 1 )

{

GameExplain();

if (_kbhit())

{

key = _getch();

if (key = = ‘q’ )

break ;

switch (key)

{

case UP:

if (l.Down = = true )

l.Up = false ;

else

{

l.Up = true ;

l.Down = false ;

l.Right = false ;

l.Left = false ;

}

Move();

break ;

case DOWN:

if (l.Up = = true )

l.Down = false ;

else

{

l.Down = true ;

l.Up = false ;

l.Right = false ;

l.Left = false ;

}

Move();

break ;

case LEFT:

if (body[ 17 ][ 17 ].x = = 14 & & body[ 17 ][ 17 ].y = = 14 )

l.Left = false ;

else if (l.Right = = true )

l.Left = false ;

else

{

l.Left = true ;

l.Down = false ;

l.Right = false ;

l.Up = false ;

}

Move();

break ;

case RIGHT:

if (l.Left = = true )

l.Right = false ;

else

{

l.Right = true ;

l.Down = false ;

l.Up = false ;

l.Left = false ;

}

Move();

break ;

default :

break ;

}

}

}

return 0 ;

}

void gotoxy( int x, int y)

{

COORD Pos = { x, y };

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);

}

void CursorView( char show) //커서숨기기

{

HANDLE hConsole;

CONSOLE_CURSOR_INFO ConsoleCursor;

hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

ConsoleCursor.bVisible = show;

ConsoleCursor.dwSize = 1 ;

SetConsoleCursorInfo(hConsole, & ConsoleCursor);

}

C언어로 게임 만들기 1. 기초 & 플레이어 움직이기 (1) 기초 함수들

C언어로 게임 만들기

1. 기초 & 플레이어 움직이기

(1) 기초 함수들

반갑습니다. 본격적인 첫 강의입니다.

1장에서는 윈도우 콘솔 게임을 만들 때 쓰이는 기초 함수의 구현과, 플레이어를 움직이는 방법에 대해 설명합니다.

그중 (1)은 가장 중요한 기초 함수들에 대한 내용입니다.

gotoxy() 함수

우리가 만드는 게임은 텍스트 모드에서 돌아갑니다. 플레이어를 움직이라는 명령을 내리면, 먼저 터미널 위의 커서가 이동하고 그 위에 플레이어를 출력하게 됩니다. 이때, 커서의 위치를 지정된 좌표로 옮기는 함수가 gotoxy() 함수입니다. gotoxy(x좌표값, y좌표값); 의 형태로 사용합니다.

// WINAPI 버전 void gotoxy(int x, int y) { COORD CursorPosition = {x, y}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), CursorPosition); }

윈도우 API 함수를 사용하는 버전입니다. 위 함수는 Windows.h를 먼저 인클루드해야 사용할 수 있습니다. 본 강의는 윈도우를 기준으로 하므로, 이후에는 계속 이 버전이 등장할 예정입니다.

// ANSI escape code 버전 void gotoxy(int x, int y) { printf(“\033[%d;%df”, y, x); }

ANSI 이스케이프 코드를 사용하는 버전입니다. 맥과 리눅스의 터미널에서 사용 가능하며, 윈도우 10의 최신 빌드에서도 작동됩니다. (옛 윈도우는 ANSI 이스케이프 코드를 지원하지 않습니다.) 맥 또는 리눅스 유저라면 이 버전을 대신 사용하세요.

ANSI 이스케이프 코드는 쉽게 말해 텍스트 터미널 상에서 커서의 위치, 글자 색상, 폰트 등을 조정하는 명령어들의 표준입니다. 더 자세한 내용은 이곳과 이곳을 참고하세요.

보통 윈도우의 콘솔은 동시에 가로 80개, 세로 25개의 문자를 출력할 수 있습니다. (윈도우 10은 이보다 더 넓지만, 강의에서는 80*25로 통일할 것입니다.) 따라서 좌측 상단 끝이 (0, 0), 우측 하단 끝이 (79, 24)가 됩니다. 이 점에 유의하시고, 다음 예제 코드를 통해 gotoxy()의 사용 방법을 파악해 보세요.

#include #include void gotoxy(int x, int y) { COORD CursorPosition = { x, y }; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), CursorPosition); } int main(void) { gotoxy(0, 0); printf(“(0, 0) 좌표에 출력했습니다.”); gotoxy(40, 12); printf(“(40, 12) 좌표에 출력했습니다.”); gotoxy(0, 24); printf(“가장 밑줄에 출력했습니다.”); }

실행 결과는 다음과 같습니다.

setcursortype() 함수

게임을 개발하다 보면, 콘솔 창의 깜박거리는 커서가 불편해집니다.

아래의 setcursortype() 함수를 이용하면 커서를 숨기거나, 다시 나타내거나, 큰 커서로 바꿀 수도 있지만, 이 강의에서는 숨기고 나타내는 기능만 사용합니다.

다음 코드는 setcursortype() 함수 정의와, 그 함수에 사용되는 열거형의 정의입니다.

// WINAPI 버전 typedef enum { NOCURSOR, SOLIDCURSOR, NORMALCURSOR } CURSOR_TYPE; void setcursortype(CURSOR_TYPE c) { CONSOLE_CURSOR_INFO CurInfo; switch (c) { case NOCURSOR: CurInfo.dwSize = 1; CurInfo.bVisible=FALSE; break; case SOLIDCURSOR: CurInfo.dwSize = 100; CurInfo.bVisible = TRUE; break; case NORMALCURSOR: CurInfo.dwSize = 20; CurInfo.bVisible = TRUE; break; } SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&CurInfo); }

위 코드도 gotoxy()와 마찬가지로 Windows.h를 인클루드해야 작동합니다.

아직 맥 및 리눅스 터미널에서 동작하는 만족스러운 대체재를 찾지 못했기 때문에, 안타깝지만 비 윈도우 유저들은 setcursortype()를 사용할 수 없습니다. 찾는 대로 업데이트하겠습니다. 커서가 있으면 성가시기는 하지만 큰 문제가 되지는 않기 때문에 일단 이 함수는 건너뛰세요.

다음 예제 코드로 실행 결과를 알아보세요.

#include #include typedef enum { NOCURSOR, SOLIDCURSOR, NORMALCURSOR } CURSOR_TYPE; void setcursortype(CURSOR_TYPE c) { CONSOLE_CURSOR_INFO CurInfo; switch (c) { case NOCURSOR: CurInfo.dwSize = 1; CurInfo.bVisible = FALSE; break; case SOLIDCURSOR: CurInfo.dwSize = 100; CurInfo.bVisible = TRUE; break; case NORMALCURSOR: CurInfo.dwSize = 20; CurInfo.bVisible = TRUE; break; } SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &CurInfo); } int main(void) { setcursortype(NOCURSOR); }

스크린샷은 올리지 않았습니다. 직접 실행해 보면, 커서가 사라진 것을 확인할 수 있습니다.

지금까지 게임을 만들 때에 필수적인 2개의 함수를 알아보았습니다. 오늘 설명한 함수 외에 기타 함수는 강의 도중에 소개하도록 하겠습니다.

다음 시간에는 플레이어를 움직이는 방법에 대해 알아보겠습니다.

이상으로 강의를 마칩니다. 감사합니다.

오류 신고나 문의사항은 댓글을 이용하세요.

무한의 땅굴(게임프로젝트) 소스코드

#include #include #include #include #include #define ESC 27 #define LEFT 75 #define RIGHT 77 #define DOWN 80 #define ENTER 13 int current_score = 0;//현재 점수 int best_score = 0;//최고 점수 int coin = 0;//동전 갯수 void gotoxy(int x, int y) { COORD pos = { x – 1, y – 1 }; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); }//입력한 좌표로 커서를 이동시켜 주는 함수 void SetColor(int color) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color); } enum { BLACK, DARK_BLUE, DARK_GREEN, DARK_SKYBLUE, DARK_RED, DARK_VIOLET, DARK_YELLOW, GRAY, DARK_GRAY, BLUE, GREEN, SKYBLUE, RED, VIOLET, YELLOW, WHITE, };//색깔 설정 함수 정의 typedef enum { NOCURSOR, SOLIDCURSOR, NORMALCURSOR } CURSOR_TYPE; void setcursortype(CURSOR_TYPE c) { CONSOLE_CURSOR_INFO CurInfo; switch (c) { case NOCURSOR: CurInfo.dwSize = 1; CurInfo.bVisible = FALSE; break; case SOLIDCURSOR: CurInfo.dwSize = 100; CurInfo.bVisible = TRUE; break; case NORMALCURSOR: CurInfo.dwSize = 20; CurInfo.bVisible = TRUE; break; } SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &CurInfo); }//커서 숨기는 함수 정의 void main_screen() { system(“mode con cols=80 lines=25”); int x = 23, y = 17; gotoxy(x, y); printf(“+——————————–+”); gotoxy(x, y + 1); printf(“| 무한의 땅굴 |”); gotoxy(x, y + 2); printf(“+——————————–+”);//게임 제목 for (int i = 1; i <= 25; ++i) { SetColor(GRAY); gotoxy(1, i); printf("▼"); Sleep(20); }//왼쪽 화살표 내려옴 for (int i = 25; i >= 1; –i) { SetColor(GRAY); gotoxy(78, i); printf(“▲”); Sleep(20); }//오른쪽 화살표 올라옴 SetColor(DARK_YELLOW); int a = 30, b = 7; gotoxy(a, b + 9); printf(” ■■”); Sleep(50); gotoxy(a, b + 8); printf(” ■■”); Sleep(50); gotoxy(a, b + 7); printf(” ■■”); Sleep(50); gotoxy(a, b + 6); printf(” ■■”); Sleep(50); gotoxy(a, b + 5); printf(” ■■”); Sleep(50); gotoxy(a, b + 4); printf(“■ ■■ ■”); Sleep(50); gotoxy(a, b + 3); printf(” ■■ ■■ ■■”); Sleep(50); gotoxy(a, b + 2); printf(” ■■■■■■■”); Sleep(50); gotoxy(a, b + 1); printf(” ■■■■■”); Sleep(50); gotoxy(a, b); printf(” ■■■”); Sleep(50); //도끼 그리기 for (int i = 25; i >= 1; –i) { SetColor(BLACK); gotoxy(78, i); printf(“▲”); Sleep(10); }//오른쪽 화살표 지움 for (int i = 1; i <= 25; ++i) { SetColor(BLACK); gotoxy(1, i); printf("▼"); Sleep(10); }//왼쪽 화살표 지움 for (int i = 1; i <= 8; ++i) { if (i == i) { SetColor(BLACK); gotoxy(x, y + 3); printf("■■■■■■■■■■■■■■■■■■■■■"); } Sleep(60); SetColor(RED); gotoxy(x, y + 3); printf(" “); Sleep(60); }//게임시작법 안내 getch(); } int tutorial() { system(“cls”);//화면 초기화 해줌 system(“mode con cols=94 lines=23”);//콘솔창 크기 조절 int x = 4, y = 3; gotoxy(x, y); printf(“■■■■■ ■ ■ ■■■■■ ■■■■■ ■■■■ ■■■■■ ■ ■”); gotoxy(x, y + 1); printf(” ■ ■ ■ ■ ■ ■ ■ ■ ■ ■■ ■ “); gotoxy(x, y + 2); printf(” ■ ■ ■ ■ ■ ■ ■■■■ ■ ■ ■ ■”); gotoxy(x, y + 3); printf(” ■ ■ ■ ■ ■ ■ ■ ■ ■ ■■■■ ■”); gotoxy(x, y + 4); printf(” ■ ■■■■■ ■ ■■■■■ ■ ■■ ■ ■ ■ ■■■■■”); y = 5; SetColor(VIOLET); gotoxy(x, y + 7); printf(“How to play?”); SetColor(WHITE); gotoxy(x + 20, y + 7); printf(“Follow the stairs!!”); gotoxy(x + 20, y + 9); printf(“Press ‘→’ key to move right”); gotoxy(x + 20, y + 11); printf(“Press ‘←’ key to move left”); gotoxy(x + 20, y + 13); printf(“Press ‘↓’ key to move down”); Sleep(700); gotoxy(x + 70, y + 7); printf(“옷”); gotoxy(x + 70, y + 8); printf(“〓”); Sleep(300); gotoxy(x + 72, y + 9); printf(“〓”); gotoxy(x + 70, y + 7); printf(” “); gotoxy(x + 72, y + 8); printf(“옷”); Sleep(300); gotoxy(x + 70, y + 10); printf(“〓”); gotoxy(x + 72, y + 8); printf(” “); gotoxy(x + 70, y + 9); printf(“옷”); Sleep(300); gotoxy(x + 68, y + 11); printf(“〓”); gotoxy(x + 70, y + 9); printf(” “); gotoxy(x + 68, y + 10); printf(“옷”); Sleep(300); gotoxy(x + 68, y + 13); printf(“〓”); gotoxy(x + 68, y + 10); printf(” “); gotoxy(x + 68, y + 12); printf(“옷”); Sleep(300); gotoxy(x + 66, y + 14); printf(“〓”); gotoxy(x + 68, y + 12); printf(” “); gotoxy(x + 66, y + 13); printf(“옷”); Sleep(300);//게임 플레이 장면 예시 보여주기 getch(); return 0; } int px = 18, py = 1;//플레이어의 좌표 void player() { SetColor(GRAY); gotoxy(px, py); printf(“옷”); }//플레이어 찍어주는 함수 void erase_player() { SetColor(BLACK); gotoxy(px, py); printf(“■”); }//이동한 플레이어 지워주는 함수 void player_move() { int ch = getch(); if (0 == ch || 224 == ch)//방향키를 누르면 한번에 두개의 값이 들어오기 때문에 이 조건을 걸어주지 않으면 루프가 두번 돌게된다 ch = getch();//방향키를 받는다 switch (ch) { case LEFT: if (px >= 3 && px <= 37 && py >= 1 && py <= 34) { erase_player(); px -= 2; py++; } break;//플레이어 왼쪽으로 이동 case RIGHT: if (px >= 1 && px <= 35 && py >= 1 && py <= 34) { erase_player(); px += 2; py++; } break;//플레이어 오른쪽으로 이동 case DOWN: if (px >= 1 && px <= 37 && py >= 1 && py <= 33) { erase_player(); py += 2; } break;//플레이어 아래로 이동 default: player(); break;//아무키도 입력되지 않았을 때 } player(); }//결과적으로 플레이어를 움직이는 함수 void line() { for (int i = 1; i <= 35; ++i) { SetColor(WHITE); gotoxy(38, i); printf("│"); Sleep(10); } }//화면 칸 나누기 int score() { SetColor(WHITE); gotoxy(42, 5); printf("MY SCORE : %d", current_score); gotoxy(42, 10); printf("BEST SCORE : %d", best_score); gotoxy(42, 15); printf("COIN : %d", coin); return 0; }//현재점수와 최고기록 표시 int end_screen() { system("cls"); SetColor(WHITE); for (int i = 6; i <= 53; i += 2) { gotoxy(i, 6); printf("─"); gotoxy(i, 29); printf("─"); } gotoxy(6, 6); printf("┌"); gotoxy(54, 6); printf("┐"); for (int i = 7; i <= 28; ++i) { gotoxy(6, i); printf("│"); gotoxy(54, i); printf("│"); } gotoxy(6, 29); printf("└"); gotoxy(54, 29); printf("┘"); gotoxy(10, 10); printf("■■■■■ ■ ■ ■■■■■ ■■■■"); gotoxy(10, 11); printf("■ ■ ■ ■ ■ ■ ■"); gotoxy(10, 12); printf("■ ■ ■ ■ ■■■■■ ■■■■"); gotoxy(10, 13); printf("■ ■ ■■ ■ ■ ■"); gotoxy(10, 14); printf("■■■■■ ■ ■■■■■ ■ ■■"); if (current_score > best_score) { best_score = current_score; } gotoxy(34, 18); printf(“SCORE : %d”, current_score);//현재점수 출력 gotoxy(34, 21); printf(“BEST SCORE : %d”, best_score);//최고 점수 출력 if (current_score >= best_score) { SetColor(RED); gotoxy(36, 19); printf(“RECORD BREAKING!!!”); }//점수 갱신되었을때 출력하는 안내 메세지 if (0 == 0) { SetColor(RED); gotoxy(9, 27); printf(““); } return 0; } int sx = 18, sy = 4; int check_x, check_y; int stair() { int i, num; SetColor(WHITE); check_x = sx; check_y = sy; gotoxy(sx, sy); printf(“〓”);//계단 출력 num = rand() % 3;//0,1,2중 한개의 변수 받기 if (num == 0 && sx >= 3) { sx -= 2; sy++; }//왼쪽으로 계단 이동 else if (num == 1 && sx <= 35) { sx += 2; sy++; }//오른쪽으로 계단 이동 else { sy += 2; } return 0; }//땅굴 생성하는 함수 int cx, cy, check_c1 = 0, check_c2 = 0; int coin_score() { SetColor(YELLOW); int num; cx = check_x; cy = check_y - 1;//동전 갯수를 세기 위해서 계속 변하는 값인 cx와 cy의 값 대신 조건을 비교 할 변수를 선언함 num = rand() % 1000; if (num % 3 == 0) { gotoxy(cx, cy); printf("○"); check_c2 = check_c1; check_c1++;//만약 동전이 출력되면 동전갯수도 올려주어야함 } else { check_c2 = check_c1; check_c1--;//이 값을 줄여주지 않으면 계속 동전 점수가 늘어나기 때문에 줄여줌 } return 0; }//동전 출력하는 함수 int screen_reset() { if (sy == 35 || sy == 34) { for (int i = 1; i <= 35; ++i) { for (int j = 1; j <= 37; ++j) { gotoxy(j, i); printf(" "); } } gotoxy(18, 1); printf("옷"); px = 18; py = 1; sx = 18; sy = 4; } return 0; }//화면 넘어갔을 때 초기화 시키는 함수 int store() { system("mode con cols=80 lines=17");//콘솔창 초기화 시키기 int i, x = 1, y = 4; SetColor(RED); gotoxy(x + 1, y - 2); printf("Store"); SetColor(DARK_GRAY); gotoxy(x + 65, y - 2); printf("Your Coin : %d", coin); SetColor(WHITE); for (i = 1; i <= 80; i += 2) { gotoxy(x + i - 1, y); printf("─"); Sleep(10); }//현재 보유 코인과 store표시 하기 gotoxy(x + 5, y + 2); printf("You need "); SetColor(RED); printf("30"); SetColor(WHITE); printf("coins"); gotoxy(x + 7, y + 3); printf("to buy this!!"); gotoxy(x + 11, y + 6); printf("못"); gotoxy(x + 6, y + 9); printf("If you want to"); gotoxy(x + 8, y + 10); printf("buy this,"); gotoxy(x + 3, y + 11); printf("Please Press "); SetColor(RED); printf("'→' "); SetColor(WHITE); printf("key"); gotoxy(x + 31, y + 2); printf("You need "); SetColor(RED); printf("35"); SetColor(WHITE); printf("coins"); gotoxy(x + 33, y + 3); printf("to buy this!!"); gotoxy(x + 37, y + 6); printf("촛"); gotoxy(x + 31, y + 9); printf("If you want to"); gotoxy(x + 33, y + 10); printf("buy this,"); gotoxy(x + 28, y + 11); printf("Please Press "); SetColor(RED); printf("'←' "); SetColor(WHITE); printf("key"); gotoxy(x + 57, y + 2); printf("You need "); SetColor(RED); printf("50"); SetColor(WHITE); printf("coins"); gotoxy(x + 59, y + 3); printf("to buy this!!"); gotoxy(x + 63, y + 6); printf("홋"); gotoxy(x + 57, y + 9); printf("If you want to"); gotoxy(x + 59, y + 10); printf("buy this,"); gotoxy(x + 54, y + 11); printf("Please Press "); SetColor(RED); printf("'↓' "); SetColor(WHITE); printf("key"); //////////////////////////////////////캐릭터 바꿔주는 것은 아직 구현하지 못함 /*int get = getch(); if (0 == get || 224 == get)//방향키를 누르면 한번에 두개의 값이 들어오기 때문에 이 조건을 걸어주지 않으면 루프가 두번 돌게된다 get = getch();//방향키를 받는다 switch (get) { case RIGHT: skin = 1; break; case LEFT: skin = 2; break; case DOWN: skin = 3; break; } */ getch(); return 0; } int start_time = 0, end_time, gap = 0;//타이머 기능을 쓰기위해 필요한 변수 int main() { //랜덤함수 값이 다양한 값이 나오도록 함 srand(time(NULL)); setcursortype(NOCURSOR); //게임 첫 화면 main_screen(); //게임 설명 tutorial(); //게임 다시 시작하기 replay: //시스템 화면 초기화 system("cls"); //게임 화면 크기 조정 system("mode con cols=60 lines=35"); //게임 화면 만들기 line(); //점수 화면 찍기 score(); //시작 플레이어 찍기 player(); SetColor(WHITE); //시작 계단 gotoxy(18, 2); printf("〓"); //게임 플레이 화면 for (;;) { int temp = py; stair();//계단 먼저 찍기 start_time = clock(); coin_score();//동전 출력하기 player_move();//플레이어 움직이기 end_time = clock(); gap = (int)(end_time - start_time); if (gap >= 700) { goto game_over; }//일정 시간동안 키 입력하지 않으면 게임종료 if (py>temp) { current_score++; }//현재 점수 올려주기 if (px != check_x) { goto game_over; }//게임 종료하는 조건 screen_reset();//화면 초기화 if (check_c1 > check_c2) { coin++; }//동전 갯수 올리기 score(); } //게임 종료 됐을때 game_over: store(); system(“mode con cols=60 lines=35”);//콘솔창 크기 초기화 //게임 종료 end_screen(); //게임종료시 enter키로 게임을 다시 시작함 if (getch() == ENTER) { px = 18, py = 1; sx = 18, sy = 4; current_score = 0;//게임이 종료 됬으므로 전 게임의 정보를 초기화 해준다 goto replay; } //커서 숨기는 것 getch(); return 0; }

실행 파일 :

무한의 땅굴.exe

C언어 공룡게임 만들기 2

저번에 올렸던 소스코드에 시작메뉴와 충돌처리, 결과창 등을 추가하여

만들어 보았습니다.

#define _CRT_SECURE_NO_WARNINGS #define TreeHigh 19 #define DinoY 11 #define TreeDistance 80 #define CRT_SECURE_NO_WARNINGS #define CLS system(“cls”) #include #include #include void SetConsoleView(); // 콘솔창 크기 조정하기 void gotoXY(int x, int y); // X좌표와 Y좌표 조정하기 void DinoSour(int Dinoleg); // 공룡그림 그리기 void Tree1(int TreePosition); // 첫번째 나무 모양 그리기 void Tree2(int TreePostin1); // 두번째 나무 모양 그리기 char KeyInput(); // 문자를 받는 함수 int DinolegsSwing = true; // 공룡의 다리 초깃값을 true로 놓고 함수에 대입 int main(void) { int TreeX2_Flag = 0; // 두번째 트리가 나오는 주기 설정 int DinosourHigh = DinoY; // 공룡의 높이를 11로 지정 int TreeX1 = TreeDistance; //첫번째 나무의 거리를 80으로 지정 int TreeX2 = TreeDistance; // 두번째 나무의 거리를 80으로 지정 int Jumping = false; // 처음 점프의 값을 false를 두고 시작 int Bottom = true; // 공룡이 바닥에 있어야만 점프를 뛸 수 있음 int JumpingLevel = false; // 점프의 최댓값에 다했다면 내려가기 위한 변수 int StartOrder = 0; int UsersOrder = 0; int Score = 0; int End = 0; SetConsoleView(); // 게임 메뉴 화면 if (StartOrder == 0) { printf(” ============================================================================

“); printf(” | |

“); printf(” | ==== ========== || \ || ========== |

“); printf(” | || \ | | || \ || / \ |

“); printf(” | || \ | | || \ || / \ |

“); printf(” | || | | | || \ || | | |

“); printf(” | || | | | || \ || | | |

“); printf(” | || / | | || \ || \ / |

“); printf(” | || / | | || \ || \ / |

“); printf(” | ==== ========== || \ || ========= |

“); printf(” | |

“); printf(” | ======= =========== ===== ===== ====== |

“); printf(” | / / \ | | | \ |

“); printf(” | | / \ | | | | |

“); printf(” | \ | | | | | / |

“); printf(” | ======= | | | | |====== |

“); printf(” | | \ / | | | \ |

“); printf(” | / \ / \ / | \ |

“); printf(” | / ========== \ / | \ |

“); printf(” | ======== ======== |

“); printf(” ============================================================================

“); } // 게임 선택 메뉴 printf(” 1. 플 레 이 2. 게 임 종 료

“); printf(” “); Start: scanf(“%d”, &UsersOrder); // 만약 사용자가 2를 입력했다면 게임을 종료 if (UsersOrder == 2) { printf(“게임을 종료합니다.

“); exit(1); } // 사용자가 1을 입력헀다면 게임을 시작 if (UsersOrder == 1) { printf(“로 딩 중….”); Sleep(1000); // 게임을 시작하기 전 콘솔을 잠깐 멈춤 CLS; while (true) { Score++; // 점수를 위한 변수 if (KeyInput() == ‘w’&&Bottom) //만약 w를 입력하고 공룡이 바닥에 위치한다면 점프 가능 { Bottom = false; //점프를 한다면 bottom이 거짓으로 변한다. Jumping = true; } if (Jumping) { DinosourHigh–; // 점프할때 y좌표 감소 } if (DinosourHigh == 2) //만약 공룡이 일정 높이가 된다면 내려가야함 (공룡 높이의 한계) { JumpingLevel = true; } if (JumpingLevel) { DinosourHigh = DinoY; // 점프 높이를 DinoY(11)로 초기화 } if (DinosourHigh == 11) // 만약 공룡이 원 위치로 돌아왔다면 다시 키입력을 받기 위한 변수들을 초기화 { JumpingLevel = false; Jumping = false; Bottom = true; } TreeX1 -= 2; // 1번째 나무를 움직이는 변수 if (TreeX1 <= 3) { TreeX1 = TreeDistance; // 1번째 나무의 x좌표가 3보다 작아진다면 나무의 위치 초기화 } if (TreeX1 == 40) { TreeX2_Flag += 1;; // 1번째 트리의 위치가 중간에 왔다면 2번째 트리 출력을 위한 변수 초기화 } if (TreeX2_Flag == 1) { Tree2(TreeX2); TreeX2 -= 2; } if (TreeX2 <= 3) { TreeX2 = TreeDistance; // 2번째 트리의 x좌표가 3보다 작아진다면 위치 초기화 TreeX2_Flag = 0; } if (TreeX1 == 7 || TreeX1 == 8) // 만약 1번째 트리의 x좌표가 7 또는 8이라면 (공룡 주위) { if (DinosourHigh == 11 || DinosourHigh == 10 || DinosourHigh == 9) // 공룡이 점프를 하지 않거나 조건보다 작게 점프했을때 (충돌처리) { End++; // 게임 종료를 위한 변수 증가 CLS; break; } } if (TreeX2 == 7 || TreeX2 == 8) //2번째 트리의 x좌표가 7 혹은 8이 되었을때 (공룡 주위) { if (DinosourHigh == 11 || DinosourHigh == 10 || DinosourHigh == 9) // 공룡이 점프를 하지 않거나 조건보다 작게 점프했을떄 (충돌처리) { End++; // 게임 종료를 위한 변수 증가 CLS; break; } } Tree1(TreeX1); DinoSour(DinosourHigh); Sleep(100); CLS; } } else //UsersOrder가 올바르게 입력되지 않았을 경우 { printf("올바른 숫자를 입력하세요"); goto Start; //69번째 Start: 로 이동하여 입력을 다시 받음 } if (End == 1) // 게임이 끝났을 경우 { printf(" "); printf(" ======================================================================================= "); printf(" | ========= ====== ======= ====== ========= | "); printf(" | / / / \ / | | | "); printf(" | | / / \ | | | | "); printf(" | \ / | | | / | | "); printf(" | ========= | | | | / |========= | "); printf(" | | | \ / |===== | | "); printf(" | | \ \ / |\ | | "); printf(" | / \ ====== | \ | | "); printf(" | ======= ======= ========== | "); printf(" | | "); printf(" | | "); printf(" | | "); printf(" | 당신의 점수는 ? : %d | ", Score); printf(" | | "); printf(" | | "); printf(" ======================================================================================= "); sleep(100); } } void DinoSour(int DinoHeight) // 공룡을 나타내는 함수 { gotoXY(0, DinoHeight); { printf(" $$$$$$$ "); printf(" $$ $$$$$ "); printf(" $$$$$$$$ "); printf("$ $$$ "); printf("$$ $$$$$$ "); printf("$$$ $$$$$ "); printf(" $$ $$$$$$$$$ "); printf(" $$$$$$$$$$$ "); printf(" $$$$$$$$$ "); printf(" $$$$$$$ "); if (DinolegsSwing) // 공룡 발을 움직이는 조건 { printf(" $ $$$ "); printf(" $$ "); DinolegsSwing = false; } else { printf(" $$$ $ "); printf(" $$ "); DinolegsSwing = true; } } } void SetConsoleView() { system("mode con cols=100 lines=25"); // 콘솔창을 가로 100 세로 25로 설정 system("title Google DinoSour Game - KBH"); // 콘솔창 제목을 정함 } void gotoXY(int x, int y) // 사물의 x좌표와 y좌표를 나타내는 함수 { COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); } void Tree1(int TreePosition) //첫번째 트리 { gotoXY(TreePosition, TreeHigh); printf(" * "); gotoXY(TreePosition, TreeHigh + 1); printf(" *** "); gotoXY(TreePosition, TreeHigh + 2); printf("*****"); gotoXY(TreePosition, TreeHigh + 3); printf(" * "); gotoXY(TreePosition, TreeHigh + 4); printf(" * "); } void Tree2(int TreePostin1) // 두번째 트리 { gotoXY(TreePostin1, TreeHigh); printf(" * "); gotoXY(TreePostin1, TreeHigh + 1); printf("*******"); gotoXY(TreePostin1, TreeHigh + 2); printf(" *** "); gotoXY(TreePostin1, TreeHigh + 3); printf(" *** "); gotoXY(TreePostin1, TreeHigh + 4); printf(" *** "); } char KeyInput() // 키 입력을 받는 함수 { if (kbhit() != 0) { return getch(); } } 결과는 이렇습니다. 만들때는 분명 재밌었는데 다 만들고 나니 아쉬움이 많이 남습니다. 예를 들자면 소스 코드가 비주얼 스튜디오에서는 오류가 생기지만 DEV C++에서는 잘 돌아간다던지 소스코드를 더 간단하고 다른 사람 눈에도 잘 들어오게 쓸 수는 없었는지 그런 점들이 아쉬운거 같습니다. 더 열심히 해야겠습니다. 마지막으로 공룡게임을 첨부해놓겠습니다. Dinosour_Game.exe 0.13MB

Best c 언어 게임 만들기 Update

주제에 대한 새 업데이트 c 언어 게임 만들기

[C언어 게임 만들기] 테트리스 게임 (Tetris) : 네이버 블로그 최신

Mar 10, 2015 · Tetris 작성자: Ian H Date: 2017-10-31 이 게임은 Text Game Maker JS를 사용하여 만들어졌습니다. 게임 화면을 마우스로 한번 클릭한 후에 키입력을 해주시기 바랍니다. 소스코드: https://github.com/a-mean-blogger/TM-Tetris 제작자: [emailprotected] 댓글 김 김남현 2017.11.13 질문이있습니다~ …

+ 여기서 자세히 보기

C 언어 무료 강의 (입문부터 게임 개발까지) Update New

동영상 보기

주제에 대한 새로운 업데이트 c 언어 게임 만들기

9가지 게임을 만들며 누구나 쉽고 재미있게 C 를 배울 수 있습니다.

컴퓨터 전공자, IT 개발자로 진로를 희망하시는 분들에게 C 는 선택이 아닌 필수입니다. 더 이상 포인터에서 좌절하지 마시고, 나도코딩과 함께 C 를 마스터하세요.

인프런 C 분야 최고의 인기 강의, 지금 바로 만나보세요!

(Visual Studio 2019 환경설정 업데이트)

[목차]

0:00:00 소개

0:03:09 환경설정

게임 #1

0:07:58 경찰서 조서 쓰기

0:10:19 정수형 변수

0:16:11 주석

0:19:02 실수형 변수

0:21:26 상수

0:23:05 printf

0:26:17 scanf

0:32:00 프로젝트

게임 #2

0:37:24 피라미드를 쌓아라

0:38:46 뿔뿔

0:45:44 for

0:48:18 while

0:50:39 do while

0:51:35 이중 반복문 (구구단)

0:56:45 이중 반복문 파헤치기

1:05:40 이중 반복문(거꾸로 별)

1:08:39 프로젝트

게임 #3

1:13:43 Up \u0026 Down

1:16:44 if else

1:25:22 break continue

1:31:33 and or

1:34:56 랜덤

1:40:36 switch case

1:51:44 프로젝트

게임 #4

1:58:31 비밀번호 마스터

2:00:36 계산기

2:06:37 함수의 형태

2:09:11 반환값이 없는 함수

2:10:54 반환값이 있는 함수

2:12:37 전달값이 없는 함수

2:13:43 전달값이 있는 함수

2:15:21 반환값과 전달값이 있는 함수

2:19:29 함수를 이용한 계산기

2:23:44 프로젝트

게임 #5

2:37:41 아빠는 대머리

2:39:08 배열 기초

2:44:08 값 설정

2:49:32 문자 vs 문자열

2:56:48 문자열 심화

3:02:44 아스키 코드

3:08:39 프로젝트

게임 #6

3:23:05 물고기 키우기

3:25:30 친구들의 주소

3:29:26 미션맨(포인터)의 등장

3:35:01 스파이(또다른 포인터)의 등장

3:40:57 배열과 포인터의 관계

3:49:39 Swap

3:56:40 포인터로 배열 값 변경하기

4:00:06 프로젝트(전반전)

4:11:18 프로젝트(후반전)

4:19:45 프로젝트(연장전)

게임 #7

4:27:34 동물 뒤집기

4:29:31 다차원 배열 기본

4:33:13 다차원 배열 접근

4:36:57 다차원 배열 선언

4:41:19 다차원 배열 사용

4:45:55 프로젝트(전반전)

5:02:25 프로젝트(후반전)

5:11:51 프로젝트(연장전)

게임 #8

5:27:17 너, 내 집사가 되어라

5:31:29 구조체 기본

5:34:41 구조체 사용

5:38:23 구조체 배열

5:39:26 구조체 포인터

5:43:25 구조체 안의 구조체

5:45:46 typedef

5:51:28 프로젝트(전반전)

6:00:36 프로젝트(후반전)

게임 #9

6:09:25 비밀 일기

6:12:09 파일 쓰기 fputs

6:19:22 파일 읽기 fgets

6:22:43 또다른 파일 쓰기 fprintf

6:26:39 또다른 파일 읽기 fscanf

6:29:55 프로젝트(전반전)

6:35:43 프로젝트(후반전)

Designed by freepik

: https://www.freepik.com

c 언어 게임 만들기주제 안의 사진 몇 장

C 언어 무료 강의 (입문부터 게임 개발까지) Update

C언어로 게임만들기 – 1. 게임 기본구조 업데이트

Updating

+ 여기서 자세히 보기

Read more

반응형

요즘은 게임 엔진과 게임 프레임워크가 잘 지원되어 게임을 만드는 것이 훨씬 쉬워졌습니다

그래서 처음부터 C 언어로 게임을 만드는 방법과 콘솔 화면에서 게임을 만드는 방법이 항상 궁금했습니다

‘C를 사용하여 게임 만들기’라는 책의 저자는 그것을 잘 정리했습니다

(이 책은 이미 절판되어 구할 수 없습니다.) ‘C를 이용한 게임 만들기’의 저자가 게시한 가이드를 참고하여 처음부터 차근차근 공부해 보도록 하겠습니다

아래 링크를 참고하고 있습니다

C 게임 프로그래밍 과정: http://nowcampus.tistory.com/

첫 번째는 튜토리얼의 3장 – 게임의 기본 구조입니다

게임의 기본 구조

게임의 기본 구조는 초기화 -> ((반복) 데이터 업데이트 -> 화면 출력) -> 해제의 순서로 진행됩니다

– 초기화 : 게임에 필요한 데이터의 초기화

– 데이터 업데이트: 입력 장치에 의한 데이터 업데이트/자체 데이터 업데이트

– 화면 출력 : 실제 게임 이미지를 화면에 그립니다

– 해제: 메모리를 해제합니다

코드로 작성하면 다음과 같습니다

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 stdio.h #include > 무효 초기화() { } 무효 업데이트() { } 무효 Render() { } 무효 릴리스() { } int main() { 초기화(); //초기화 while ( 1 ) { Update(); //데이터 업데이트 Render(); //화면 출력 } Release(); // 릴리스 return 0 ; } cs

* Render(): 실제 게임 화면을 그리는 함수

– 일반적으로 게임 화면을 그리는 과정은 화면에 이미지를 그리고 지우는 과정을 반복합니다.

– DirectX, OpenGL과 같은 엔진은 이 과정의 속도를 높이지만, 콘솔에서 직접 구현하면 깜박임이 발생합니다

– 깜박거리는 이유는 콘솔이 고속으로 화면을 지우고 그릴 수 없기 때문입니다

-> 이 문제를 해결하기 위해 장면을 그리고 렌더링 속도를 늦추기 위해 약간의 대기 시간을 두면 깜박임이 사라집니다

-> 인간의 눈 초당 30회 이상의 화면 전환이 원활하게 인식된다고 합니다

while문 내부의 Update()->Render()가 1초에 30번 호출하면 깜박임을 최소화하면서 사람의 눈에 자연스럽게 그릴 수 있다

.

* 즉, Update()->Render() 이후에 약 33ms의 대기 시간이 주어지면 초당 30번을 그립니다.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #include < stdio.h > #include < time.h > void Init() { 렌더 } void Update() { () { } 무효 릴리스() { } int main() { clock_t CurTime, OldTime; 초기화(); //초기화 while ( 1 ) { OldTime = clock(); 업데이트(); //데이터 업데이트 Render(); //화면을 표시하는 동안( 1 ) //대기 상태로 전환 { CurTime = clock(); if (CurTime – OldTime > 33 ) 중단 ; } } 풀어 주다(); // 해제 return 0 ; } cs

#include : C 언어 표준 라이브러리, 시간/날짜 가져오기/조작

clock_t : 틱(시간 측정을 위한 기준 주기)을 저장하는 형식

시계(); : 프로그램 시작 이후의 틱 수를 반환합니다

* OldTime에서 clock() 함수로 렌더링 전의 시간을 입력하고, 대기 상태로 들어간 후 CurTime은 계속해서 업데이트 됩니다

CurTime과 OldTime의 차이가 33(ms)이면 대기 상태를 종료합니다

키보드 처리

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 3 64 375 51 52 53 54 55 #include < stdio.h > #include < time.h > #include < conio.h > void Init() { } void Update() { } void Render() { } void Release() { } 정수 메인() { 정수 n키; clock_t CurTime, OldTime; 초기화(); //초기화 while ( 1 ) { if (_kbhit()) { nKey = _getch(); if (nKey = = ‘q’) break ; switch (nKey) { case ‘j’ : break ; 대소문자 ‘l’ : break ; } } 올드타임 = 시계(); 업데이트(); //데이터 업데이트 Render(); //화면 표시 while ( 1 ) { CurTime = clock(); if (CurTime – OldTime > 33 ) 중단 ; } } 풀어 주다(); // 해제 return 0 ; } cs

#include : 콘솔 입출력을 제공하는 헤더 파일

if (_kbhit()) : 키가 눌렸는지 확인하는 함수

nKey = _getch(): 읽은 문자를 반환합니다

* q를 입력하면 종료됩니다

728×90

반응하는

탄막 피하기 게임을 만들어 보았다. C언어로! Update

동영상 보기

주제에 대한 추가 정보 c 언어 게임 만들기

편하게 댓글 달아주세요!

피드백도 환영입니다 ㅎㅎ

c 언어 게임 만들기주제 안의 사진 몇 장

탄막 피하기 게임을 만들어 보았다. C언어로! New

C언어로 게임 만들기 – Craft & Code 최신

Updating

+ 여기서 자세히 보기

Read more

C 언어로 게임 만들기

1

기본 및 플레이어 이동

(1) 기본 기능

만나서 반갑습니다

첫 번째 본격적인 강의입니다

1장에서는 Windows 콘솔 게임을 만드는 데 사용되는 기본 기능의 구현과 플레이어를 이동하는 방법에 대해 설명합니다

그 중 (1)은 가장 중요한 기본 기능에 대한 것입니다

Gotoxy() 함수

우리가 만드는 게임은 텍스트 모드에서 실행됩니다

플레이어를 이동하라는 명령을 내리면 먼저 터미널 위의 커서가 이동하고 플레이어가 그 위에 인쇄됩니다

이때 지정된 좌표로 커서를 이동시키는 함수는 Gotoxy() 함수이다

Gotoxy(x 좌표 값, y 좌표 값);.

// WINAPI 버전 void gotoxy(int x, int y) { COORD CursorPosition = {x, y}; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), CursorPosition); }

이 버전은 Windows API 기능을 사용합니다

위의 기능을 사용하려면 먼저 Windows.h를 포함해야 합니다

이 강의는 Windows를 기반으로 하기 때문에 이 버전은 앞으로도 계속 나올 것입니다

// ANSI 이스케이프 코드 버전 void gotoxy(int x, int y) { printf(“\033[%d;%df”, y, x); }

ANSI 이스케이프 코드를 사용하는 버전입니다

Mac 및 Linux의 터미널에서 사용할 수 있으며 Windows 10의 최신 빌드에서도 작동합니다

(이전 Windows는 ANSI 이스케이프 코드를 지원하지 않습니다.) Mac 또는 Linux 사용자라면 이 버전을 대신 사용하십시오

ANSI 이스케이프 코드는 단순히 텍스트 터미널에서 커서 위치, 텍스트 색상, 글꼴 등을 조정하기 위한 표준 명령입니다

아니 봐

자세한 내용은 여기 및 여기를 참조하십시오

일반적으로 Windows 콘솔은 가로 80자와 세로 25자를 동시에 출력할 수 있습니다

(Windows 10은 이것보다 더 넓지만 강의에서는 80*25로 통일합니다.) 그래서 왼쪽 상단이 (0, 0)이 되고 오른쪽 하단이 (79, 24)가 됩니다

이를 염두에 두고 다음 예제 코드를 통해 gotoxy() 사용 방법을 이해하십시오

#include #include void gotoxy(int x, int y) { COORD CursorPosition = { x, y }; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), CursorPosition); } int 메인(무효) { Gotoxy(0, 0); printf(“(0, 0) 좌표에 출력됩니다.”); 고톡시(40, 12); printf(“(40, 12) 좌표에 출력됩니다.”); 고톡시(0, 24); printf(“가장 많은 밑줄이 출력됩니다.”); }

실행 결과는 다음과 같습니다

setcursortype() 함수

게임을 개발하다 보면 콘솔창에서 깜빡거리는 커서가 불편해집니다

아래의 setcursortype() 함수를 사용하여 커서를 숨기거나, 다시 나타나게 하거나, 큰 커서로 변경할 수 있지만, 이 강의에서는 숨기기 및 표시 기능만 사용합니다

다음 코드는 setcursortype() 함수의 정의와 해당 함수에 사용되는 열거입니다

// WINAPI 버전 typedef enum { NOCURSOR, SOLIDCURSOR, NORMALCURSOR } CURSOR_TYPE; 무효 setcursortype(CURSOR_TYPE c) { CONSOLE_CURSOR_INFO CurInfo; 스위치 (c) { 케이스 NOCURSOR: CurInfo.dwSize = 1; CurInfo.bVisible=거짓; 부서지다; 사례 SOLICURSOR: CurInfo.dwSize = 100; CurInfo.bVisible = 참; 부서지다; NORMALCURSOR의 경우: CurInfo.dwSize = 20; CurInfo.bVisible = 참; 부서지다; } SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&CurInfo); }

Gotoxy()와 마찬가지로 위의 코드는 Windows.h가 포함된 경우에만 작동합니다

불행히도, Mac 및 Linux 터미널에서 작동하는 만족스러운 대안을 아직 찾지 못했기 때문에 Windows가 아닌 사용자는 setcursortype()을 사용할 수 없습니다

찾는대로 업데이트 하겠습니다

커서가 있으면 성가시지만 큰 문제는 아니니 일단은 이 기능을 건너뛰세요

다음 예제 코드로 실행 결과를 확인하세요

#include #include typedef enum { NOCURSOR, SOLIDCURSOR, NORMALCURSOR } CURSOR_TYPE; 무효 setcursortype(CURSOR_TYPE c) { CONSOLE_CURSOR_INFO CurInfo; 스위치 (c) { 케이스 NOCURSOR: CurInfo.dwSize = 1; CurInfo.bVisible = FALSE; 부서지다; 사례 SOLICURSOR: CurInfo.dwSize = 100; CurInfo.bVisible = 참; 부서지다; NORMALCURSOR의 경우: CurInfo.dwSize = 20; CurInfo.bVisible = 참; 부서지다; } SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &CurInfo); } int 메인(무효) { setcursortype(NOCURSOR); }

업로드된 스크린샷이 없습니다

직접 실행해보면 커서가 사라지는 것을 볼 수 있습니다

지금까지 게임을 만들 때 꼭 필요한 두 가지 기능에 대해 알아보았습니다

오늘 설명한 기능 외에도 강의 중에 다른 기능을 소개합니다

다음 시간에는 플레이어를 움직이는 방법에 대해 알아보겠습니다

이것으로 강의를 마칩니다

감사합니다

오류 신고나 문의는 댓글로 부탁드립니다.

테트리스를 C언어로 만들어보았다(개초보) Update New

아래 동영상 보기

주제에서 더 많은 유용한 정보 보기 c 언어 게임 만들기

C언어 개초보의 연습영상입니다.

개선점 있으면 좀 가르쳐주세요 선생님들

소스코드

https://docs.google.com/document/d/1ZwyzBgsqGvCer0uWGQ_VqpXcunJAthFP65T-xaJfxno/edit?usp=sharing

c 언어 게임 만들기주제 안의 멋진 사진을 볼 수 있습니다

테트리스를 C언어로 만들어보았다(개초보) New Update

[C언어 게임] 구글 공룡 게임 만들기 (충돌처리 추가) 업데이트

Updating

+ 여기서 자세히 보기

[언제나 C언어] 3X3 퍼즐 게임 만들기 [예제 Center] Update

동영상 보기

주제에서 더 많은 유용한 정보 보기 c 언어 게임 만들기

안녕하세요. 언제나 휴일에 언휴예요.

이번 강의는 3X3 퍼즐 게임 만들기입니다.

conio.h에서 제공하는 _getch 함수 사용법

정해진 수에서 랜덤한 값을 발급받는 방법

그리고 3X3 퍼즐 게임 알고리즘을 익힐 수 있습니다.

무엇인가를 익힌다는 것보다 잠시 쉬어가는 코너라고 생각하셔도…

소스 코드: https://ehpub.co.kr/c%EC%96%B8%EC%96%B4-%EC%86%8C%EC%8A%A4-3×3-%ED%8D%BC%EC%A6%90-%EA%B2%8C%EC%9E%84/

c 언어 게임 만들기주제 안의 관련 사진

[언제나 C언어] 3X3 퍼즐 게임 만들기 [예제 Center] Update

[C언어 게임 만들기] 뱀게임 (Snake Game) – 스네이크 : … 최신

Updating

+ 여기서 자세히 보기

C언어 가위바위보 게임 만들기 Update

동영상 보기

주제에 대한 새로운 업데이트 c 언어 게임 만들기

#C언어 #가위바위보

C언어 가위바위보 게임 만들기

c 언어 게임 만들기주제 안의 사진 몇 장

C언어 가위바위보 게임 만들기 New

[C언어] 간단한 포커 게임 만들기 : 네이버 블로그 최신

void Set_Color(int Text){ SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), Text | 0); } void gotoxy(int x, int y){ // gotoxy COORD Pos; Pos.X = x; Pos.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos); } gotoxy는 다들 이렇게 쓰니까 알 거고. Set_Color는 해당 인수 값으로 색을 수정해 줌. . 존재하지 않는 이미지입니다. .

+ 여기서 자세히 보기

Read more

악성 코드가 포함된 파일입니다

{파일 이름}

백신 프로그램으로 치료한 후, 다시 붙이거나 치료가 어려운 경우

파일을 삭제해 주세요

PC가 악성코드에 감염되면 시스템 성능이 저하됩니다

개인정보가 유출될 수 있음을 알려드립니다.

C언어 테트리스 개발 | C언어 배운 후(개발 초보) 나의 첫 프로젝트!! New

동영상 보기

주제에 대한 새로운 업데이트 c 언어 게임 만들기

00:00 도입부

00:11 목차

00:26 1. C언어로 테트리스 개발을 결심한 동기\u0026 포기했던 이유

01:55 2. 많은 실패 과정을 통한 테트리스 구현과정

02:43 3. 내가 구현한 테트리스 게임 영상!!

03:35 4. C언어로 테트리스 개발하기 전에 알면 좋을 것 같은 지식

==================================================================

BlockDMask님의 공룡 게임 블로그 주소입니다.

https://blockdmask.tistory.com/344

제가 마지막에 작성한 c언어로 테트리스 구현하기 전에 미리 생각해 두면 좋을 지식들을 작성한 글 사이트입니다

https://dev-with-precious-dreams.tistory.com/entry/C%EC%96%B8%EC%96%B4-%EC%B4%88%EB%B3%B4%EC%9E%90%EB%8F%84-%EA%B5%AC%ED%98%84%ED%95%A0-%EC%88%98-%EC%9E%88%EB%8A%94-%ED%85%8C%ED%8A%B8%EB%A6%AC%EC%8A%A4-%EA%B2%8C%EC%9E%84-%EB%A7%8C%EB%93%A4%EA%B8%B0-ep1-%EC%A0%84%EB%B0%98%EC%A0%81%EC%9D%B8-%EA%B0%9C%EC%9A%94with-tetris-Algorith

==================================================================

단순히 C언어 문법을 책으로 다 배웠을 때,

C언어를 배운 후에 개발 실력을 향상시키고 싶어서

C언어를 통해 무언가를 개발해보고 싶어서 여러곳에 검색 했는데,

C언어로 테트리스를 개발할 수 있다는 글을 본 후에,

테트리스 만들기로 결심을 했다!

c 언어 게임 만들기주제 안의 사진 몇 장

C언어 테트리스 개발 | C언어 배운 후(개발 초보) 나의 첫 프로젝트!! Update New

주제에 대한 추가 정보 c 언어 게임 만들기

C언어로 게임 만들기 2. 시분할 (2) 필자가 만든 프로그램 업데이트

Nov 14, 2020 · ‘강의/c언어 게임 만들기‘의 다른글. 이전글 이제 어느 정도 정리가 됐다.. 현재글 c언어로 게임 만들기 2. 시분할 (2) 필자가 만든 프로그램; 다음글 c언어로 게임 만들기 2. 시분할 (3) 시분할 구현, (4) 키 입력 함수 바꾸기

+ 여기서 자세히 보기

C 언어 무료 강의 (입문부터 게임 개발까지) Update New

동영상 보기

주제에 대한 새로운 업데이트 c 언어 게임 만들기

9가지 게임을 만들며 누구나 쉽고 재미있게 C 를 배울 수 있습니다.

컴퓨터 전공자, IT 개발자로 진로를 희망하시는 분들에게 C 는 선택이 아닌 필수입니다. 더 이상 포인터에서 좌절하지 마시고, 나도코딩과 함께 C 를 마스터하세요.

인프런 C 분야 최고의 인기 강의, 지금 바로 만나보세요!

(Visual Studio 2019 환경설정 업데이트)

[목차]

0:00:00 소개

0:03:09 환경설정

게임 #1

0:07:58 경찰서 조서 쓰기

0:10:19 정수형 변수

0:16:11 주석

0:19:02 실수형 변수

0:21:26 상수

0:23:05 printf

0:26:17 scanf

0:32:00 프로젝트

게임 #2

0:37:24 피라미드를 쌓아라

0:38:46 뿔뿔

0:45:44 for

0:48:18 while

0:50:39 do while

0:51:35 이중 반복문 (구구단)

0:56:45 이중 반복문 파헤치기

1:05:40 이중 반복문(거꾸로 별)

1:08:39 프로젝트

게임 #3

1:13:43 Up \u0026 Down

1:16:44 if else

1:25:22 break continue

1:31:33 and or

1:34:56 랜덤

1:40:36 switch case

1:51:44 프로젝트

게임 #4

1:58:31 비밀번호 마스터

2:00:36 계산기

2:06:37 함수의 형태

2:09:11 반환값이 없는 함수

2:10:54 반환값이 있는 함수

2:12:37 전달값이 없는 함수

2:13:43 전달값이 있는 함수

2:15:21 반환값과 전달값이 있는 함수

2:19:29 함수를 이용한 계산기

2:23:44 프로젝트

게임 #5

2:37:41 아빠는 대머리

2:39:08 배열 기초

2:44:08 값 설정

2:49:32 문자 vs 문자열

2:56:48 문자열 심화

3:02:44 아스키 코드

3:08:39 프로젝트

게임 #6

3:23:05 물고기 키우기

3:25:30 친구들의 주소

3:29:26 미션맨(포인터)의 등장

3:35:01 스파이(또다른 포인터)의 등장

3:40:57 배열과 포인터의 관계

3:49:39 Swap

3:56:40 포인터로 배열 값 변경하기

4:00:06 프로젝트(전반전)

4:11:18 프로젝트(후반전)

4:19:45 프로젝트(연장전)

게임 #7

4:27:34 동물 뒤집기

4:29:31 다차원 배열 기본

4:33:13 다차원 배열 접근

4:36:57 다차원 배열 선언

4:41:19 다차원 배열 사용

4:45:55 프로젝트(전반전)

5:02:25 프로젝트(후반전)

5:11:51 프로젝트(연장전)

게임 #8

5:27:17 너, 내 집사가 되어라

5:31:29 구조체 기본

5:34:41 구조체 사용

5:38:23 구조체 배열

5:39:26 구조체 포인터

5:43:25 구조체 안의 구조체

5:45:46 typedef

5:51:28 프로젝트(전반전)

6:00:36 프로젝트(후반전)

게임 #9

6:09:25 비밀 일기

6:12:09 파일 쓰기 fputs

6:19:22 파일 읽기 fgets

6:22:43 또다른 파일 쓰기 fprintf

6:26:39 또다른 파일 읽기 fscanf

6:29:55 프로젝트(전반전)

6:35:43 프로젝트(후반전)

Designed by freepik

: https://www.freepik.com

c 언어 게임 만들기주제 안의 사진 몇 장

C 언어 무료 강의 (입문부터 게임 개발까지) Update

[C언어 게임] 테트리스 게임 (Tetris Game with C) Update

Updating

+ 여기서 자세히 보기

c언어 강좌 콘솔창 게임 만들기 기초편 LowHigh Game New

동영상 보기

주제에 대한 추가 정보 c 언어 게임 만들기

https://cafe.naver.com/gamepromaster

게임플밍마스터 c언어를 이용해서 콘솔창 게임 만들기를 기초편입니다. 간단한 Low High 게임이구요. 소스를 어떻게 만드는지 과정을 보면 더 좋을 거 같아요. 특히 c언어를 배웠는데 c언어 프로그래밍이 안되는 사람들은 꼬옥 보세요 ~~

#게임플밍마스터 #c언어 #게임만들기

c 언어 게임 만들기주제 안의 멋진 사진을 볼 수 있습니다

c언어 강좌 콘솔창 게임 만들기 기초편 LowHigh Game Update

[C] 게임 만들기 – 시작 – Realizable New

Oct 02, 2017 · ‘c언어 게임‘ 카테고리의 다른 … 이전 1 다음. 이전 다음. 공지사항. 최근에 올라온 글 [c] 게임 만들기 – 시작 …

+ 여기서 자세히 보기

게임잼에 참가해서 2d게임 만들기 (+what is 게임잼) Update

아래 동영상 보기

주제에 대한 새로운 정보 c 언어 게임 만들기

다운로드 링크:https://gejam.itch.io/dont-collect-coins

디스코드 서버:https://discord.gg/mE8TUqgkkE

게잼이 게임잼에 참가하다 엌ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

……죄송합니다

c 언어 게임 만들기주제 안의 멋진 사진을 볼 수 있습니다

게임잼에 참가해서 2d게임 만들기 (+what is 게임잼) Update

[C언어]게임 만들기 – 행맨[Hang Man](텍스트 기반) Update New

Updating

+ 여기서 자세히 보기

누구나 할 수 있는 유니티 수익형 게임 만들기 1강 New

동영상 보기

주제에 대한 추가 정보 c 언어 게임 만들기

최신 2022 버전의 강의를 리뉴얼하여 출시하였습니다!

▶https://youtu.be/EqoU1PodQQ4

이번 영상은 하루 5천 만 원 이상 벌었던 전설의 게임 플래피버드(Flappy Bird)의 클론 게임을 만드는 시리즈의 첫 번째 강의입니다. 유니티(Unity) 게임 엔진을 처음 접하시는 분들도 누구나 따라 하실 수 있도록 설치 과정부터 상세히 설명해드리며 단순히 게임 개발뿐만 아니라 스토어 출시, 광고, 마케팅으로 게임을 사업화하는 것까지 다룹니다. 좋아요 눌러두시고 꼭 강의 끝까지 함께해주세요!

* 유니티 다운로드 및 허브 3.0 변경 사항

2강 40초 부근에 현재와 다른 변경된 사항들 정리해두었으니 참고해주세요!

– 유니티 플래피버드 클론 게임 만들기 재생목록

– 유니티 플래피버드 클론 게임 만들기 2강

[조코딩 30만 구독자 이벤트 공지]

여러분이 만든 앱을 홍보하고 싶으시다면 이번 30만 구독자 이벤트를 참여해주세요! 심사를 통해 선물을 드리고 제가 직접 30만 유튜브 채널에 서비스를 홍보해드리는 이벤트를 진행합니다.

– 참여 방법: 조코딩 강의를 참고하여 웹/앱/게임 제작 후 URL을 설문지로 제출

– 상품: 티셔츠 (100명) + 서비스 홍보 지원 + (TOP 10) 배달의 민족 3만 원 쿠폰

– 제출 기한: 2021년 12월 5일(일) 자정까지

– 당첨자 발표: 2021년 12월 12일(일) 유튜브 커뮤니티 공지 및 이메일로 쿠폰 코드 전송

– 이벤트 상세 내용 확인 및 제출 : https://forms.gle/Z9EeWFYuyuuCc2gL9

– 유니티(Unity) 다운로드

https://unity.com

– visual studio code 설치 가이드 영상

– 이미지 에셋 다운로드

https://animalface.site/flappy

– .NET SDK 다운로드

https://dotnet.microsoft.com/download/dotnet/sdk-for-vs-code

– .NET 4.7.1

https://dotnet.microsoft.com/download/dotnet-framework/net471

– 안드로이드 USB 연결 드라이버

https://developer.samsung.com/mobile/android-usb-driver.html

목차

00:00 미리보기

00:03 인트로

00:08 강의 소개

00:30 조코딩 30만 이벤트

00:51 플래피버드(Flappy Bird) 소개

00:59 초보자도 가능한 유니티를 이용한 게임 개발

01:12 강의 목차 소개 (자막을 켤 수 있습니다)

01:32 게임 엔진 소개 – 게임 엔진이란?

02:36 게임 엔진 소개 – 여러 플랫폼에서 이용 가능

03:01 게임 엔진 소개 – 대표 게임 엔진 유니티와 언리얼

03:41 유니티(Unity) 설치 및 세팅

09:27 이미지 에셋 다운로드

10:29 이미지 나누기

11:59 유니티 화면 구성 소개 – Project, Scene, Hierarchy, Game, Inspector

12:58 배경 이미지 오브젝트 추가

14:13 게임 화면 비율 조정하기

16:27 새 오브젝트 추가하기

17:00 새 애니메이션 추가하기

20:48 게임 실행 및 Order in Layer 설정

22:23 땅 오브젝트 추가하기

24:00 땅 애니메이션 추가하기

26:43 중력 추가하기 Rigidbody2D

27:55 물리 경계 추가하기 Collider2D

30:14 지금까지 내용 중간 정리

30:40 점프 기능 추가하기 – 스크립트 추가

32:06 Visual Studio Code 연결하기

32:58 Visual Studio Code 개발 환경 세팅 – 익스텐션 및 SDK 설치

36:43 유니티 스크립트 기본 구조 파악하기

38:25 프레임(Frame)이란?

39:32 Start()와 Update()

42:00 점프 기능 구현하기

49:05 구글링 검색 꿀팁

51:00 게임 실행하기

51:15 점프 강도 조절하기

53:46 스마트폰에서 게임 실행하기 – USB 디버깅

57:12 스마트폰에서 플래피버드 실행하기

57:27 APK 파일 빌드하는 방법

57:46 30만 구독자 이벤트 소개 및 제출 방법

58:13 구독, 좋아요, 알림설정 부탁드립니다

58:22 아웃트로

c 언어 게임 만들기주제 안의 사진 몇 장

누구나 할 수 있는 유니티 수익형 게임 만들기 1강 New

C언어 게임 만들기(2일차) – ToUo 업데이트

Aug 26, 2015 · c언어 게임 만들기(3일차) (0) 2015.08.26: c언어 게임 만들기(2일차) (0) 2015.08.26: c언어 게임 만들기(1일차) (0) 2015.08.26:

+ 여기서 자세히 보기

C언어 # RPG 게임 만들기(10. 맵(map) 그리기) Update New

동영상 보기

주제에서 더 많은 유용한 정보 보기 c 언어 게임 만들기

30대 아재가 C언어 강의하는 방송

c 언어 게임 만들기주제 안의 멋진 사진을 볼 수 있습니다

C언어 # RPG 게임 만들기(10. 맵(map) 그리기) Update

[C언어] 컴퓨터랑 가위바위보 게임 프로그램 코드 작성하기 : 네이버 … New

[C언어] 컴퓨터랑 가위바위보 게임 프로그램 코드 작성하기 … [C언어] rand() 함수를 통해 로또 번호 생성 프로그램 만들기. 안녕하세여~~~~ 오늘은 뭔가 날씨가 좋습니다~~~이런 날에 학원 가서 공부하는 게 좀 그렇네요…

+ 여기서 자세히 보기

C. C++. C#. 차이점 알려드림. 5분 순삭. New

아래 동영상 보기

주제에 대한 추가 정보 c 언어 게임 만들기

업데이트가 늦었습니다 ㅠㅠㅠ (결혼 축하해주신 분들 너무 고맙습니다! ;))

오늘도 코린이. 코알못을 위한 영상을 들고 왔어요!

아시죠? C는 C++.C# 줄인말이 아니라는거? (껄껄껄)

또 궁금한것 있으시면 언제든 댓글로 남겨주세요~

#코린이 #코알못 #프로그래밍 #코딩 #프로그래밍초보

📌니콜라스와 코딩 공부하기

https://nomadcoders.co

c 언어 게임 만들기주제 안의 사진 몇 장

C. C++. C#. 차이점 알려드림. 5분 순삭. Update

[C언어] 미로찾기 게임 만들기 (Maze Game) 프로젝트 최신

Jan 01, 2021 · 라즈베리파이 프로젝트 “스마트 선풍기” 만들기 (term project) (1) 2021.05.31 [OPENCV] OPENCV를 활용한 이미지 게임 만들기 (C언어 사과 찾기 게임) (0) 2021.05.11 [C언어] 미로찾기 게임 만들기 (Maze Game) 프로젝트 (9) 2021.01.01

+ 여기서 자세히 보기

한달도, 일주일도, 3일도 아닌 이틀만에 fps게임만들기 도전 Update

아래 동영상 보기

주제에 대한 새로운 업데이트 c 언어 게임 만들기

게임 다운로드:

https://gejam.itch.io/randomfpsgame

내 디코서버:

https://discord.gg/mE8TUqgkkE

근데 설명칸에 뭔갈 써야될거같다.

왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈난천재다왈왈왈

왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈

왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈

왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈

왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈

왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈

왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈왈

c 언어 게임 만들기주제 안의 관련 사진

한달도, 일주일도, 3일도 아닌 이틀만에 fps게임만들기 도전 New

C언어) 간단한 미로찾기 게임 – 쫑드기 Study Room 업데이트

Jun 02, 2020 · c언어) 환율 계산기 프로그램(달러, 원) 2020.05.02 C언어) 순환을 이용한 최댓값 구하기 2020.04.29 C언어) 달력 만들기(2/2) 기능추가, code refactoring 2020.03.26

+ 여기서 자세히 보기

(리눅스/우분투) c언어로 간단한 게임만들기 New

동영상 보기

주제에 대한 새로운 정보 c 언어 게임 만들기

리눅스 시스템에서 동작할 수 있도록 c언어로 만든 간단한 게임이며 움직이는 장애물을 피에 맨 아래까지 이동하면 이기는 게임입니다.

c 언어 게임 만들기주제 안의 관련 사진

(리눅스/우분투) c언어로 간단한 게임만들기 Update

[C/C++] 간단한 경마게임 만들기 – White Memo 업데이트

Updating

+ 여기서 자세히 보기

게임개발자가 되려는 중 고등학생들분들은 보세요 Update

아래 동영상 보기

주제에 대한 추가 정보 c 언어 게임 만들기

#지식 #알고리즘

제가 중고등학생분들이 항상 하는 질문 ‘어떤 언어를 배워야하나요?공부법 추천좀’ 에 대한 진지한 답변입니다.

c 언어 게임 만들기주제 안의 사진 몇 장

게임개발자가 되려는 중 고등학생들분들은 보세요 New Update

주사위 게임 만들기 – 바로 실행해보면서 배우는 C언어 :: 프론트엔드 … 최신

Jan 06, 2020 · c언어 문자열 (인프런) (0) 2020.01.08: c언어 포인터, 배열, 포인터 연산, 동적 메모리 할당 (인프런) (0) 2020.01.08: 주사위 게임 만들기 – 바로 실행해보면서 배우는 c언어 (0) 2020.01.06: 구조체 – 바로 실행해보면서 배우는 c언어 (0) 2020.01.05

+ 여기서 자세히 보기

[C++ 특강] C plus plus 프로그래밍 배우기 c++ 강좌 기초 강의 연산자 컴파일러 Update

아래 동영상 보기

주제에서 더 많은 유용한 정보 보기 c 언어 게임 만들기

☞ IB96 채널 은 컴퓨터 프로그램과 스마트폰 IT 모바일 기기 사용법 응용능력 기능 을

알려드리는 교육 채널입니다 _

IB96 채널 영상은 https://www.ib96.com 에서 제공받았습니다

IB96 구독및 멤버쉽 회원 [가입]을 해주시면 좀더 좋은 컨텐츠로 보답하겠습니다

감사합니다

#C++프로그래밍배우기 #C++기초강좌 #Cplusplus프로그램교육

c 언어 게임 만들기주제 안의 사진 몇 장

[C++ 특강] C plus plus 프로그래밍 배우기 c++ 강좌 기초 강의 연산자 컴파일러 Update

[무료] C 프로그래밍 – 입문부터 게임 개발까지 – 인프런 | … Update New

Updating

+ 여기서 자세히 보기

게임회사의 장단점 (게임업계전망 / 직업 선택 / 정년) New

동영상 보기

주제에 대한 추가 정보 c 언어 게임 만들기

게임회사를 지망하는 분들께 필터없이 솔직한 장단점을 알려드리기 위해 찍었습니다~취업을 희망하시거나 직업을 선택할때 좋은 참고가 되었으면 좋겠습니다!

게임캔버스 카페: https://cafe.naver.com/gamecanvas

게임캔버스 페이스북: https://www.facebook.com/GameCanvasAcademy

게임캔버스 인스타그램: https://www.instagram.com/gamecanvas001

개인블로그: https://blog.naver.com/onlybest01

c 언어 게임 만들기주제 안의 멋진 사진을 볼 수 있습니다

게임회사의 장단점 (게임업계전망 / 직업 선택 / 정년) Update

C언어로 구현한 빙고게임 – 동글동글 라이프 New Update

Oct 09, 2011 · bingo game, C언어, c언어 게임, 빙고게임, 빙고게임 알고리즘 ‘개발자 이야기/C 언어로 게임 만들기‘ Related Articles Console User Interface ( CUI ) – 1 2013.07.11

+ 여기서 자세히 보기

Let’s make 16 games in C++: Chess New Update

동영상 보기

주제에서 더 많은 유용한 정보 보기 c 언어 게임 만들기

Download source: https://drive.google.com/uc?export=download\u0026id=1X24AF6OYBp0dFDdjtTx0nlTrGOHb4uRr

c 언어 게임 만들기주제 안의 사진 몇 장

Let’s make 16 games in C++: Chess Update

Native C로 리듬게임 만들기 #1 업데이트

Jan 27, 2020 · Native C로 리듬게임 만들기 #1. by 수표 2020. 1. 27. 내가 다니는 학교 한국디지털미디어 고등학교에서는 1학년때 C언어 프로그래밍 교과를 배운다. C를 미리 알고 있다면 공부를 하지 않고서 A를 받는 꿀 과목이지만, 이미 C언어를 알고 있는 사람은 교과우수상을 …

+ 여기서 자세히 보기

최고 전문가에게 듣는 데이터, AI 커리어 완벽 가이드 Update

동영상 보기

주제에서 더 많은 유용한 정보 보기 c 언어 게임 만들기

이번 영상은 ‘빅데이커 커리어 가이드북’의 저자 조성준 교수님을 모시고 빅데이터, 인공지능 분야의 커리어에 대한 인터뷰를 해보았습니다.

조성준 교수님 소개

– 대한민국 최고의 데이터마이닝 전문가

– 서울대학교 산업공학과 교수

– 서울대학교 데이터마이닝 센터 센터장

– 국무총리 산하 공공데이터전략위원회 공동위원장

– 머신러닝, 인공지능 분야 최고 권위 저널 150여 편의 논문 발표

– 삼성전자, 현대자동차 등 대기업 및 공공기관에 빅데이터, 인공지능 연구, 자문, 교육

– 다수의 특허와 상용 소프트웨어 개발

[책 구매하기]

쿠팡

▶https://coupa.ng/cbt6Hy

(이 링크는 쿠팡 파트너스 링크로 구매하시게 되면 저에게 소정의 수수료가 지급됩니다.)

Yes24

▶http://gilbut.co/c/21115411bb

목차

00:00 미리보기

00:09 인트로

00:16 조성준 교수님 소개

01:24 인터뷰 질문 출처 소개

01:30 빅데이터 분야가 뜨는 이유

03:40 빅데이터 분야가 미래에도 유망할지

04:40 빅데이터 커리어 분야 6가지

05:45 데이터 엔지니어

06:08 데이터 사이언티스트

06:35 데이터 리서처

07:24 데이터 애널리스트

07:42 시티즌 데이터 사이언티스트

09:08 데이터 기획자

09:34 직무별 요구하는 역량

10:51 도메인은 어떻게 결정하는지

12:17 비전공자도 할 수 있는지

13:02 독학사나 학점은행제로 학위 취득을 해야할지

13:44 비전공자 성공 사례가 있는지

14:16 대학원을 꼭 가야하는지

15:34 데이터 관련 자격증

16:30 R, 파이썬 어떤 것을 공부해야 할지

17:52 많이 사용되는 툴

19:49 데이터 분야 취업을 위해 쌓을 수 있는 경험

20:32 빅데이터 커리어를 준비하기 위한 효과적인 방법

21:09 국내와 해외 취업 준비 차이

21:31 빅데이터 분야의 연봉

23:28 가장 연봉이 센 곳

23:51 빅데이터 분야 추천 도서

24:35 마무리 커리어 조언

27:30 이벤트 소개

#빅데이터 #인공지능 #커리어

이 영상은 길벗출판사의 책과 이벤트 지원을 받아 제작되었습니다.

c 언어 게임 만들기주제 안의 사진 몇 장

최고 전문가에게 듣는 데이터, AI 커리어 완벽 가이드 Update

킬존 2 – 위키백과, 우리 모두의 백과사전 New

킬존 2. 위키백과, 우리 모두의 백과사전. 킬존 2 (Killzone 2)는 플레이스테이션 3 를 대상으로 게릴라 게임스 가 개발하고 소니 컴퓨터 엔터테인먼트 가 배급한 2009년 1인칭 슈팅 게임이다. 킬존 시리즈 중 2번째 주요 게임작으로 2004년 킬존 의 뒤를 잇는 작품이다 …

+ 여기서 자세히 보기

5년 동안 혼자 게임 개발한 사람 New Update

아래 동영상 보기

주제에 대한 추가 정보 c 언어 게임 만들기

이번 영상에서는 지금까지 제가 만들었던 게임들을 정리해보았습니다.

0:00 게임 개발 시작

0:42 [2017]

1. What You Can’t Do

2. Never Here Forever

3. 우왁굳의 방송게임

4. 사흘만 볼 수 있다면

5. 왁좌의 게임

4:17 [2018]

1. 팬치의 제왕

2. 놀이터의 지배자

3. 티타노마키아

4. Wak need to go Deeper

5. 우주인턴

7:31 [2019~2020]

1. Hi, Quixote

2. 층간소음 게임

3. 쌉벌레들

4. 팔라딘 러쉬

5. Combat Art

6. 스트리머 타운

7. 인과응보

8. 왁과같이

9:00 [2021]

1. 잭 프로스트

2. 승자의 게임

3. 롤 팬게임

4. Keyboard Warrior

5. 마인크래프트 짝퉁

6. S4 팬게임

7. 고군분투 3D

8. 마법학교 게임

다음에 더 재미있는 게임개발일지로 돌아오겠습니다.

감사합니다.

#게임개발 #인디게임 #발전과정

c 언어 게임 만들기주제 안의 멋진 사진을 볼 수 있습니다

5년 동안 혼자 게임 개발한 사람 Update New

주제와 관련된 검색입니다 c 언어 게임 만들기

Updating

스레드 끝 c 언어 게임 만들기

키워드에 대한 정보 c 언어 게임 소스 코드

다음은 Bing에서 c 언어 게임 소스 코드 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 C 언어 무료 강의 (입문부터 게임 개발까지)

  • 동영상
  • 공유
  • 카메라폰
  • 동영상폰
  • 무료
  • 올리기

C #언어 #무료 #강의 #(입문부터 #게임 #개발까지)


YouTube에서 c 언어 게임 소스 코드 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 C 언어 무료 강의 (입문부터 게임 개발까지) | c 언어 게임 소스 코드, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  Rainbow Bridge Tattoo Designs | 50 Bridge Tattoos For Men 빠른 답변