C/명품 C언어 프로젝트(안기수 저)

명품 C언어 프로젝트 8.6장 블록쌓기 프로그램 응용

꾸준함. 2017. 9. 5. 00:06

[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언어 프로젝트 안기수 저




반응형