[1번 문제]
/*
응용 8.6.1은 스페이스키를 누를 경우 블록이 수직방향으로 떨어지게 되어있습니다.
블록이 떨어지는 상황에서 좌우 방향의 화살표 키를 이용하여 떨어뜨릴 위치를 조절할 수 있도록 프로그램을 수정하시오
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <Windows.h>
#define box_length 15 //게임의 영역(좌우 길이)
#define box_height 15 //바닥의 높이(상하 길이)
void intro_game(void);
void game_control(void);
void gotoxy(int x, int y);
int left_right_move(void);
void move_down(int x);
void draw_rectangle(int c, int r);
int max_block(void);
void move_arrow_key(char key, int *x1, int x_b);
int block_stack[box_length * 2 + 1] = { 0 }; //쌓을 블록의 값을 0으로 초기화
int main(void)
{
intro_game();
game_control();
gotoxy(1, box_height + 3);
printf("game이 종료되었습니다. \n");
return 0;
}
void gotoxy(int x, int y)
{
COORD Pos = { x - 1, y - 1 };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
/*
직사각형 그리기 함수
*/
void draw_rectangle(int c, int r)
{
int i, j;
unsigned char a = 0xa6;
unsigned char b[7];
for (i = 1; i < 7; i++)
b[i] = 0xa0 + i;
printf("%c%c", a, b[3]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[4]);
printf("\n");
for (i = 0; i < r; i++)
{
printf("%c%c", a, b[2]);
for (j = 0; j < c; j++)
printf(" ");;
printf("%c%c", a, b[2]);
printf("\n");
}
printf("%c%c", a, b[6]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[5]);
printf("\n");
}
/*
게임에 대한 설명을 출력하는 함수 intro_game
*/
void intro_game(void)
{
system("cls");
printf("블록쌓기 \n\n");
printf("블록이 좌우로 움직일때 스페이스키를 누르면\n");
printf("블록이 떨어져 바닥에 쌓입니다\n");
printf("추가기능: 블록이 떨어질 때 화살표키를 누르면 블록이 쌓이는 곳을 조정할 수 있습니다\n\n");
printf("아무키나 누르면 게임을 시작합니다\n");
getch();
}
/*
바닥에 쌓인 블록의 최대 개수를 반환하는 함수 max_block
*/
int max_block(void)
{
int i, max = 0;
for (i = 1; i <= box_height * 2 + 1; i++)
{
if (max <= block_stack[i])
max = block_stack[i];
}
return max;
}
/*
블록 쌓기 게임을 제어하는 함수 game_control
*/
void game_control(void)
{
int x, count = 0;
system("cls");
draw_rectangle(box_length, box_height);
gotoxy(box_length * 2 + 5, 3);
printf("블록의 개수:%2d", box_height);
gotoxy(1, box_height + 3);
printf("스페이스키를 누르면 블록이 떨어지고\n");
printf("바닥에 쌓입니다\n");
while (count < box_height)
{
gotoxy(box_length * 2 + 5, 4);
printf("시도한 횟수:%2d", count + 1);
gotoxy(box_length * 2 + 5, 5);
printf("쌓인 블록수:%2d", max_block());
x = left_right_move();
move_down(x);
count++;
getch();
}
}
/*
블록을 좌우로 이동시키는 함수 left_right_move
*/
int left_right_move(void)
{
int x = 3, y = 2, temp = 2;
char key;
do
{
x += temp;
if (x > (box_length * 2)) //x방향 최댓값 설정
temp -= 2;
if (x < 3)
{
x = 3;
temp = 2;
}
gotoxy(x, y);
printf("□");
Sleep(50);
gotoxy(x, y);
printf(" ");
} while (!kbhit());
return x;
}
/*
화살표 키를 이용한 문자의 이동 함수 move_arrow_key
*/
void move_arrow_key(char key, int *x1, int x_b)
{
switch (key)
{
case 75:
*x1 = *x1 - 2; //확장코드이기 때문에 2씩
if (*x1 < 3)
*x1 = 3;
break;
case 77:
*x1 = *x1 + 2;
if (*x1 > x_b)
*x1 = x_b;
break;
default:
return;
}
}
/*
블록을 바닥으로 이동시키는 함수 move_down
*/
void move_down(int x)
{
int y;
char key;
for (y = 2; y < box_height + 1 - block_stack[x]; y += 1)
{
gotoxy(x, y);
printf("□");
Sleep(50);
gotoxy(x, y);
printf(" ");
Sleep(30);
if (kbhit()) //키보드가 눌릴 경우에만 블록을 움직인다
{
key = getch();
move_arrow_key(key, &x, (2 * box_length));
}
}
gotoxy(x, box_height + 1 - block_stack[x]);
printf("□");
block_stack[x] += 1;
}
[2번 문제]
/*
그림 a와 같이 화면 위에서 떨어뜨릴 블록의 모양을 매 시도마다 다르게 하여 같은 모양을 많이 쌓았을 경우에만
블록의 누적수를 계산하도록 프로그램을 수정하시오.
*/
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
#include <Windows.h>
#define box_length 15 //게임의 영역(좌우 길이)
#define box_height 15 //바닥의 높이(상하 길이)
void intro_game(void);
void game_control(void);
void gotoxy(int x, int y);
int left_right_move(int number);
void move_down(int number, int x);
void draw_rectangle(int c, int r);
int max_block(void);
int block[box_length * 2 + 1] = { 0, }; //처음 놓인 모양을 기억
int block_stack[box_length * 2 + 1] = { 0 }; //같은 모양끼리 쌓을 블록의 값을 0으로 초기화
int block_num[box_length * 2 + 1] = { 0 }; //실질적으로 쌓인 블록
int main(void)
{
srand((unsigned)time(NULL));
intro_game();
game_control();
gotoxy(1, box_height + 3);
printf("game이 종료되었습니다. \n");
return 0;
}
void gotoxy(int x, int y)
{
COORD Pos = { x - 1, y - 1 };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
/*
직사각형 그리기 함수
*/
void draw_rectangle(int c, int r)
{
int i, j;
unsigned char a = 0xa6;
unsigned char b[7];
for (i = 1; i < 7; i++)
b[i] = 0xa0 + i;
printf("%c%c", a, b[3]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[4]);
printf("\n");
for (i = 0; i < r; i++)
{
printf("%c%c", a, b[2]);
for (j = 0; j < c; j++)
printf(" ");;
printf("%c%c", a, b[2]);
printf("\n");
}
printf("%c%c", a, b[6]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[5]);
printf("\n");
}
/*
게임에 대한 설명을 출력하는 함수 intro_game
*/
void intro_game(void)
{
system("cls");
printf("블록쌓기 \n\n");
printf("블록이 좌우로 움직일때 스페이스키를 누르면\n");
printf("블록이 떨어져 바닥에 쌓입니다\n\n");
printf("같은 모양의 블록이여야만 개수가 올라갑니다\n");
printf("아무키나 누르면 게임을 시작합니다\n");
getch();
}
/*
바닥에 쌓인 블록의 최대 개수를 반환하는 함수 max_block
*/
int max_block(void)
{
int i, max = 0;
for (i = 1; i <= box_height * 2 + 1; i++)
{
if (max <= block_stack[i])
max = block_stack[i];
}
return max;
}
/*
블록 쌓기 게임을 제어하는 함수 game_control
*/
void game_control(void)
{
int x, count = 0;
int number = rand() % 4;
int last = number; //마지막 번호
system("cls");
draw_rectangle(box_length, box_height);
gotoxy(box_length * 2 + 5, 3);
printf("블록의 개수:%2d", box_height);
gotoxy(1, box_height + 3);
printf("스페이스키를 누르면 블록이 떨어지고\n");
printf("바닥에 쌓입니다\n");
while (count < box_height)
{
while (number == last)
{
number = rand() % 4;
}
gotoxy(box_length * 2 + 5, 4);
printf("시도한 횟수:%2d", count + 1);
gotoxy(box_length * 2 + 5, 5);
printf("쌓인 블록수:%2d", max_block());
x = left_right_move(number);
move_down(number, x);
count++;
gotoxy(box_length * 2 + 5, 5);
printf("쌓인 블록수:%2d", max_block());
last = number;
getch();
}
}
/*
블록을 좌우로 이동시키는 함수 left_right_move
*/
int left_right_move(int number)
{
int x = 3, y = 2, temp = 2;
int num; //모양을 저장할 변수
do
{
x += temp;
if (x > (box_length * 2)) //x방향 최댓값 설정
temp -= 2;
if (x < 3)
{
x = 3;
temp = 2;
}
gotoxy(x, y);
switch (number)
{
case 0:
printf("○");
break;
case 1:
printf("☆");
break;
case 2:
printf("◇");
break;
case 3:
printf("□");
break;
}
Sleep(100);
gotoxy(x, y);
printf(" ");
} while (!kbhit());
return x;
}
/*
블록을 바닥으로 이동시키는 함수 move_down
*/
void move_down(int number, int x)
{
int y;
for (y = 2; y < box_height + 2 - block_num[x]; y += 1)
{
gotoxy(x, y);
switch (number)
{
case 0:
printf("○");
break;
case 1:
printf("☆");
break;
case 2:
printf("◇");
break;
case 3:
printf("□");
break;
}
Sleep(20);
gotoxy(x, y);
printf(" ");
Sleep(10);
}
if (block_stack[x] == 0) //위치에 아무 블록도 없다면
{
block_stack[x] += 1; //쌓인 블록 개수 올라가고
block_num[x] += 1;
block[x] = number; //모양을 저장
}
else if (block[x] == number) //밑바닥 모양과 동일하다면
{
block_stack[x] += 1; //쌓인 블록 개수 올라감
block_num[x] += 1;
}
else
block_num[x] += 1;
gotoxy(x, box_height + 2 - block_num[x]);
switch (number)
{
case 0:
printf("○");
break;
case 1:
printf("☆");
break;
case 2:
printf("◇");
break;
case 3:
printf("□");
break;
}
}
[3번 문제]
/*
떨어뜨릴 블록의 위치를 그림 b의 아랫부분과 같이 미리 정한 다음 해당 위치에 해당 모양을
쌓았을 경우에만 쌓인 블록의 개수를 유효한 것으로 하도록 프로그램을 수정하시오
*/
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
#include <Windows.h>
#define box_length 15 //게임의 영역(좌우 길이)
#define box_height 15 //바닥의 높이(상하 길이)
void intro_game(void);
void game_control(void);
void gotoxy(int x, int y);
int left_right_move(int number);
void move_down(int number, int x);
void draw_rectangle(int c, int r);
int max_block(void);
void print_shape(void);
int block[box_length * 2 + 1] = { 0, }; //처음 놓인 모양을 기억
int block_stack[box_length * 2 + 1] = { 0 }; //같은 모양끼리 쌓을 블록의 값을 0으로 초기화
int block_num[box_length * 2 + 1] = { 0 }; //실질적으로 쌓인 블록
int main(void)
{
srand((unsigned)time(NULL));
intro_game();
game_control();
gotoxy(1, box_height + 3);
printf("game이 종료되었습니다. \n");
return 0;
}
void gotoxy(int x, int y)
{
COORD Pos = { x - 1, y - 1 };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
/*
직사각형 그리기 함수
*/
void draw_rectangle(int c, int r)
{
int i, j;
unsigned char a = 0xa6;
unsigned char b[7];
for (i = 1; i < 7; i++)
b[i] = 0xa0 + i;
printf("%c%c", a, b[3]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[4]);
printf("\n");
for (i = 0; i < r; i++)
{
printf("%c%c", a, b[2]);
for (j = 0; j < c; j++)
printf(" ");;
printf("%c%c", a, b[2]);
printf("\n");
}
printf("%c%c", a, b[6]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[5]);
printf("\n");
}
/*
게임에 대한 설명을 출력하는 함수 intro_game
*/
void intro_game(void)
{
system("cls");
printf("블록쌓기 \n\n");
printf("블록이 좌우로 움직일때 스페이스키를 누르면\n");
printf("블록이 떨어져 바닥에 쌓입니다\n\n");
printf("같은 모양의 블록이여야만 개수가 올라갑니다\n");
printf("아무키나 누르면 게임을 시작합니다\n");
getch();
}
/*
바닥에 쌓인 블록의 최대 개수를 반환하는 함수 max_block
*/
int max_block(void)
{
int i, max = 0;
for (i = 1; i <= box_height * 2 + 1; i++)
{
if (max <= block_stack[i])
max = block_stack[i];
}
return max;
}
/*
블록 쌓기 게임을 제어하는 함수 game_control
*/
void game_control(void)
{
int x, count = 0;
int number = rand() % 4;
int last = number; //마지막 번호
system("cls");
draw_rectangle(box_length, box_height);
gotoxy(box_length * 2 + 5, 3);
printf("블록의 개수:%2d", box_height);
gotoxy(1, box_height + 3);
printf("스페이스키를 누르면 블록이 떨어지고\n");
printf("바닥에 쌓입니다\n");
print_shape();
while (count < box_height)
{
while (number == last)
{
number = rand() % 4;
}
gotoxy(box_length * 2 + 5, 4);
printf("시도한 횟수:%2d", count + 1);
gotoxy(box_length * 2 + 5, 5);
printf("쌓인 블록수:%2d", max_block());
x = left_right_move(number);
move_down(number, x);
count++;
gotoxy(box_length * 2 + 5, 5);
printf("쌓인 블록수:%2d", max_block());
last = number;
getch();
}
}
/*
기본 블록 출력
*/
void print_shape(void)
{
int number, last[3];
do
{
number = rand() % (box_length * 2);
} while (number % 2 == 1); //짝수
last[0] = number;
block[number + 3] = 0;
block_stack[number + 3] += 1;
block_num[number + 3] += 1;
gotoxy(number + 3, box_height + 1);
printf("○");
do
{
number = rand() % (box_length * 2);
} while (number == last[0] || number%2 == 1);
last[1] = number;
block[number + 3] = 1;
block_stack[number + 3] += 1;
block_num[number + 3] += 1;
gotoxy(number + 3, box_height + 1);
printf("☆");
do
{
number = rand() % (box_length * 2);
} while (number == last[0] || number == last[1] || number % 2 == 1);
last[2]= number;
block[number + 3] = 2;
block_stack[number + 3] += 1;
block_num[number + 3] += 1;
gotoxy(number + 3, box_height + 1);
printf("◇");
do
{
number = rand() % (box_length * 2);
} while (number == last[0] || number == last[1] || number == last[2] || number % 2 == 1);
block[number + 3] = 3;
block_stack[number + 3] += 1;
block_num[number + 3] += 1;
gotoxy(number + 3, box_height + 1);
printf("□");
}
/*
블록을 좌우로 이동시키는 함수 left_right_move
*/
int left_right_move(int number)
{
int x = 3, y = 2, temp = 2;
int num; //모양을 저장할 변수
do
{
x += temp;
if (x > (box_length * 2)) //x방향 최댓값 설정
temp -= 2;
if (x < 3)
{
x = 3;
temp = 2;
}
gotoxy(x, y);
switch (number)
{
case 0:
printf("○");
break;
case 1:
printf("☆");
break;
case 2:
printf("◇");
break;
case 3:
printf("□");
break;
}
Sleep(100);
gotoxy(x, y);
printf(" ");
} while (!kbhit());
return x;
}
/*
블록을 바닥으로 이동시키는 함수 move_down
*/
void move_down(int number, int x)
{
int y;
for (y = 2; y < box_height + 2 - block_num[x]; y += 1)
{
gotoxy(x, y);
switch (number)
{
case 0:
printf("○");
break;
case 1:
printf("☆");
break;
case 2:
printf("◇");
break;
case 3:
printf("□");
break;
}
Sleep(20);
gotoxy(x, y);
printf(" ");
Sleep(10);
}
if (block_stack[x] == 0) //위치에 아무 블록도 없다면
{
gotoxy(1, 24);
printf("동작");
block_stack[x] += 1; //쌓인 블록 개수 올라가고
block_num[x] += 1;
block[x] = number; //모양을 저장
}
else if (block[x] == number) //밑바닥 모양과 동일하다면
{
block_stack[x] += 1; //쌓인 블록 개수 올라감
block_num[x] += 1;
}
else
block_num[x] += 1;
gotoxy(x, box_height + 2 - block_num[x]);
switch (number)
{
case 0:
printf("○");
break;
case 1:
printf("☆");
break;
case 2:
printf("◇");
break;
case 3:
printf("□");
break;
}
}
[4번 문제]
/*
같은 모양의 블록이 2개가 쌓일 경우 해당 블록의 개수를 1개 줄여서
시도한 횟수가 많을수록 게임의 승자가 되도록 프로그램을 수정하시오
*/
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
#include <Windows.h>
#define box_length 15 //게임의 영역(좌우 길이)
#define box_height 15 //바닥의 높이(상하 길이)
void intro_game(void);
void game_control(void);
void gotoxy(int x, int y);
int left_right_move(int number);
void move_down(int number, int x);
void draw_rectangle(int c, int r);
int max_block(void);
void conclusion(void); //결론
int block[box_length * 2 + 1] = { 0, }; //처음 놓인 모양을 기억
int block_stack[box_length * 2 + 1] = { 0 }; //같은 모양끼리 쌓을 블록의 값을 0으로 초기화
int block_num[box_length * 2 + 1] = { 0 }; //실질적으로 쌓인 블록
int last[box_length * 2 + 1] = { 0}; //x에서 마지막으로 쌓은 블록 모양
int count[4] = { 0 }; //시도한 횟수
int main(void)
{
srand((unsigned)time(NULL));
for (int i = 0; i < box_length * 2 + 1; i++)
last[i] = 4; //처음에 모양이 겹치지 않도록 초기화(0~3)
intro_game();
game_control();
gotoxy(1, box_height + 3);
printf("game이 종료되었습니다. \n");
conclusion();
return 0;
}
void gotoxy(int x, int y)
{
COORD Pos = { x - 1, y - 1 };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
/*
직사각형 그리기 함수
*/
void draw_rectangle(int c, int r)
{
int i, j;
unsigned char a = 0xa6;
unsigned char b[7];
for (i = 1; i < 7; i++)
b[i] = 0xa0 + i;
printf("%c%c", a, b[3]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[4]);
printf("\n");
for (i = 0; i < r; i++)
{
printf("%c%c", a, b[2]);
for (j = 0; j < c; j++)
printf(" ");;
printf("%c%c", a, b[2]);
printf("\n");
}
printf("%c%c", a, b[6]);
for (i = 0; i < c; i++)
printf("%c%c", a, b[1]);
printf("%c%c", a, b[5]);
printf("\n");
}
/*
게임에 대한 설명을 출력하는 함수 intro_game
*/
void intro_game(void)
{
system("cls");
printf("블록쌓기 \n\n");
printf("블록이 좌우로 움직일때 스페이스키를 누르면\n");
printf("블록이 떨어져 바닥에 쌓입니다\n\n");
printf("같은 블록 두개가 위아래로 있으면 위에 있는 블록이 파괴됩니다\n");
printf("파괴된 블록이 많은 문양이 이깁니다!\n");
printf("아무키나 누르면 게임을 시작합니다\n");
getch();
}
/*
바닥에 쌓인 블록의 최대 개수를 반환하는 함수 max_block
*/
int max_block(void)
{
int i, max = 0;
for (i = 0; i < 4; i++)
{
if (count[i] > max)
max = count[i];
}
return max;
}
/*
블록 쌓기 게임을 제어하는 함수 game_control
*/
void game_control(void)
{
int x, count = 0;
int number = rand() % 4;
int last = number; //마지막 번호
system("cls");
draw_rectangle(box_length, box_height);
gotoxy(box_length * 2 + 5, 3);
printf("블록의 개수:%2d", box_height);
gotoxy(1, box_height + 3);
printf("스페이스키를 누르면 블록이 떨어지고\n");
printf("바닥에 쌓입니다\n");
while (count < box_height)
{
while (number == last)
{
number = rand() % 4;
}
gotoxy(box_length * 2 + 5, 4);
printf("시도한 횟수:%2d", count + 1);
gotoxy(box_length * 2 + 5, 5);
printf("블록 파괴 시도 횟수:%2d", max_block());
x = left_right_move(number);
move_down(number, x);
count++;
gotoxy(box_length * 2 + 5, 5);
printf("블록 파괴 시도 횟수:%2d", max_block());
last = number;
getch();
}
}
/*
블록을 좌우로 이동시키는 함수 left_right_move
*/
int left_right_move(int number)
{
int x = 3, y = 2, temp = 2;
int num; //모양을 저장할 변수
do
{
x += temp;
if (x > (box_length * 2)) //x방향 최댓값 설정
temp -= 2;
if (x < 3)
{
x = 3;
temp = 2;
}
gotoxy(x, y);
switch (number)
{
case 0:
printf("○");
break;
case 1:
printf("☆");
break;
case 2:
printf("◇");
break;
case 3:
printf("□");
break;
}
Sleep(100);
gotoxy(x, y);
printf(" ");
} while (!kbhit());
return x;
}
/*
블록을 바닥으로 이동시키는 함수 move_down
*/
void move_down(int number, int x)
{
int y;
for (y = 2; y < box_height + 2 - block_num[x]; y += 1)
{
gotoxy(x, y);
switch (number)
{
case 0:
printf("○");
break;
case 1:
printf("☆");
break;
case 2:
printf("◇");
break;
case 3:
printf("□");
break;
}
Sleep(20);
gotoxy(x, y);
printf(" ");
Sleep(10);
}
if (block_stack[x] == 0) //위치에 아무 블록도 없다면
{
block_stack[x] += 1; //쌓인 블록 개수 올라가고
block_num[x] += 1;
block[x] = number; //모양을 저장
}
else if (number == last[x]) //밑바닥 모양과 동일하다면
{
block_stack[x] += 1; //쌓인 블록 개수 올라감
block_num[x] += 1;
gotoxy(x, box_height + 2 - block_num[x]);
switch (number)
{
case 0:
printf("○");
break;
case 1:
printf("☆");
break;
case 2:
printf("◇");
break;
case 3:
printf("□");
break;
}
Sleep(100);
gotoxy(x, box_height + 2 - block_num[x]);
printf(" ");
block_num[x] -= 1;
block_stack[x] -= 1;
count[number]++;
}
else
block_num[x] += 1;
gotoxy(x, box_height + 2 - block_num[x]);
switch (number)
{
case 0:
printf("○");
break;
case 1:
printf("☆");
break;
case 2:
printf("◇");
break;
case 3:
printf("□");
break;
}
last[x] = number;
}
//결론
void conclusion(void)
{
gotoxy(1, 24);
printf("이긴 모양: ");
switch (max_block())
{
case 0:
printf("○");
break;
case 1:
printf("☆");
break;
case 2:
printf("◇");
break;
case 3:
printf("□");
break;
}
gotoxy(1, 25);
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
[참고] 명품 C언어 프로젝트 안기수 저
'C > 명품 C언어 프로젝트(안기수 저)' 카테고리의 다른 글
명품 C언어 프로젝트 8.7장 보물찾기 프로그램 응용 (2) | 2017.09.08 |
---|---|
C언어 간단한 우주선 착륙시키기 게임 (4) | 2017.09.06 |
명품 C언어 프로젝트 8.5장 말타고 화살쏘기 프로그램 응용 (0) | 2017.09.03 |
명품 C언어 프로젝트 8.4장 심리테스트 (0) | 2017.09.02 |
명품 C언어 프로젝트 8.3장 디지털 스탑워치 (0) | 2017.09.01 |