딱정벌레 문제
조회수 688회
#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 답변
-
타일새로깔리는게 문제인지 화면을 지우고 깜빡거리는게 문제인지 안적혀있는데 일반적으로
윈도우 : 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; }
댓글 입력