딱정벌레 문제

조회수 685회

이미지

#include <stdio.h>
#include <time.h>
#define ROWS 20
#define COLS 20

int main(void)
{
    srand((unsigned)time(NULL));

    char dot[ROWS][COLS];


    for (int i = 0; i < ROWS; i++)
    {
        for (int j = 0; j < COLS; j++)
        {
            dot[i][j] = 0;
        }
    }

    while (1)
    {
        for (int i = 0; i < ROWS; i++)
        {
            for (int j = 0; j < COLS; j++)
            {
                if (dot[i][j] == 1)
                    printf("* ");
                else if (i == 9 && j == 9)
                    printf("* ");
                else
                    printf(". ");

                if (j == 19)
                    printf("\n");
            }
        }

        getch();

        static int m = 9;
        static int n = 9;

        int move = rand() % 8;

        if (move == 0)
            m--;
        else if (move == 1)
        {
            m--;
            n++;
        }
        else if (move == 2)
        {
            n++;
        }
        else if (move == 3)
        {
            m++;
            n++;
        }
        else if (move == 4)
        {
            m++;
        }
        else if (move == 5)
        {
            m++;
            n--;
        }
        else if (move == 6)
        {
            n--;
        }
        else if (move == 7)
        {
            m--;
            n--;
        }

        dot[m][n] = '1';

    }

    return 0;
}

이 문제에 대해 제가 작성한 프로그램인데요, 문제점이

  1. 매번 키를 누를 때마다 타일이 새로 깔린다.
  2. 딱정벌레가 무빙을 안친다. 근데 어떻게 해줘야할지 모르겠어요, 1번은 제가 어떻게 해야할지 몰라서 프로그램을 짜지 못했고 2번은 프로그램을 짜서 제대로 해줬는데 실행을 해보니 제대로 작동하지 않네요.

1 답변

  • 타일새로깔리는게 문제인지 화면을 지우고 깜빡거리는게 문제인지 안적혀있는데 일반적으로 윈도우 : system('cls') , UNIX : system('clear') 로 화면 지울수 있습니다 화면 지우고 다시 표시하면 될거같은데 자연스럽지 않고 깜빡이는게 맘에 안드시는거라면 curses 라이브러리 사용하시면 됩니다.

    딱정벌레가 무빙치지 않는 것은 좌표이동시 dot[m][n] = '1'; 문자열1을 입력하는데 비교할때에는 (dot[i][j] == 1) 정수1과 비교합니다.

    아래는 올려주신 코드 바탕으로 위 내용 반영한 내용입니다.

    // gcc -o ran ran.c -l curses
    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    #include <curses.h>
    #define ROWS 20
    #define COLS 20
    
    int main(void)
    {
        srand((unsigned)time(NULL));
    
        char dot[ROWS][COLS];
    
    
        for (int i = 0; i < ROWS; i++)
        {
            for (int j = 0; j < COLS; j++)
            {
                dot[i][j] = '0';
            }
        }
        int m = 9;
        int n = 9;
        int move , c = 0;
        dot[m][n] = '1';
    
    initscr();
    
        while (1)
        {
            for (int i = 0; i < ROWS; i++)
            {
                for (int j = 0; j < COLS; j++)
                {
                    if (dot[i][j] == '1') {
                        printw(" * ");
                    }
                    else
                        printw(" . ");
                }
                printw("\n");
            }
            printw("\n");
            getch();
    
    
    clear();
    
            int q = m;
            int w = n;
            while(dot[q][w] == '1' ) {
                q = m;
                w = n;
                move = rand() % 8;
                if (move == 0 && m - 1 >= 0)
                {
                    q = m - 1;
                }
                else if (move == 1 && m - 1 >= 0 && n+ 1 < ROWS)
                {
                    q = m - 1;
                    w = n + 1;
                }
                else if (move == 2 && n + 1 < ROWS)
                {
                    w = n + 1;
                }
                else if (move == 3 && m + 1 < COLS && n + 1 < ROWS)
                {
                    q = m + 1;
                    w = n + 1;
                }
                else if (move == 4 && m + 1 < COLS)
                {
                    q = m + 1;
                }
                else if (move == 5 && m + 1 < COLS && n - 1 >= 0)
                {
                    q = m + 1;
                    w = n - 1;
                }
                else if (move == 6 && n - 1 >= 0)
                {
                    w = n - 1;
                }
                else if (move == 7 && m - 1 >= 0 && n - 1>= 0)
                {
                    q = m - 1;
                    w = n - 1;
                }
            }
            m = q;
            n = w;
            dot[q][w] = '1';
        }
    
    endwin();
    
        return 0;
    }
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)