if(bomb[i-4][j-2] == 1 && x >= 6 && y >= 4)
bomb_number[i][j] += 1;
이렇게하면
bomb_number[6][4] = 0 이라고 가정하면
bomb_number[i][j] += 1;이거하면
bomb_number[6][4] = 1 안되는거임 ??
if(bomb[i-4][j-2] == 1 && x >= 6 && y >= 4)
bomb_number[i][j] += 1;
이렇게하면
bomb_number[6][4] = 0 이라고 가정하면
bomb_number[i][j] += 1;이거하면
bomb_number[6][4] = 1 안되는거임 ??
i == 6, j == 4가 맞다면 되겠지.
for 문으로 가로 세로 돌면서 그 안에서 for 문 두개로 -1 부터 +1 까지 돌아서 세...
저거 문장위에 폴문 있음
근데 숫자가 안올라가는거같아서
for(int y = top; y <= bottom; ++y) for(int x = left; x <= right; ++x){ sum = 0; for(int yy = -1; yy <= 1; ++yy) for(int xx = -1; xx <= 1; ++xx) sum = bomb[y + yy][x + xx] == 1; } // 1말고 딴게 없다면 ==1 도 필요없음
폭탄 갯수 세고 싶은거잖아.
sum 계산직후 bomb_number[y][x] = sum; 하면 돼.
물론 가장 가장자리 바운더리는 if 로 따로 처리해주든 배열을 상하좌우 1씩 키우든 해야한다.
폭탄 있는자리는 1이고 없는자리는 0
아 왜케 생각대로 안되지
내일 나가야되는데 술술풀리길래 이것만 완성하고 자야지라고 생각했는데
for(int y = top; y <= bottom; ++y) for(int x = left; x <= right; ++x){ int sum = 0; for(int yy = -1; yy <= 1; ++yy) for(int xx = -1; xx <= 1; ++xx) sum = bomb[y + yy][x + xx]1; bomb_number[y][x] = sum; } 끝.
if 로 난리 칠 필요 없어.
나같으면 배열 상하좌우 1 늘려놓고 저렇게 한다.
그 숫자만 표기하는게아니라 클릭 했을때 0이면 막 파파박하면서 열리잖아 폭탄 없는 구역들은
음 저것처럼 깔끔하지 않아도 숫자 표기는 된거같긴한디 ...
여는과정에서 뭔가 문제가 있는거같어
미안 숫자표기도 안됬나봐
지뢰찾기 만드니?
ㅇㅇㅇㅇㅇㅇ
지뢰찾기 ㅋㄷㅋㄷ 옛날에 교양C 과목 들었을 때 과제로 짰던 기억이 새록새록 ㅋㅋㅋ 다 짜는 데 30분도 안 걸렸었지.
파파박하면서 열리는 건 Floodfill Algorithm을 검색해 봐. 그림판 같은 데서 색칠할 때 쓰이는 알고리즘임.
그냥 재귀로 void fill(x, y) { if(blank){ open(x, y); }else{open(x, y); return;} fill(x-1,y); fill(x+1,y); fill(x,y-1); fill(x,y+1); } 식으로 짜면 될 거야.
전혀 어려운 게 아님.
void fill(x, y) { if(blank){ open(x-1, y-1, 3, 3); /* 3x3 open */ }else{ return;} fill(x-1,y); fill(x+1,y); fill(x,y-1); fill(x,y+1); } 이렇게 짜는 게 맞겠다.
저 3,3 은 머임 ??
지뢰찾기에서 빈 칸 눌렀다고 쳐봐. 빈 칸만 없어지는 게 아니라 경계의 숫자 칸까지 까야 하잖아. 그러니까 현재 칸이 빈 칸이면 현재 칸의 테두리까지 포함해서 3x3 영역을 까는 거지.
지금 보니 그냥 저렇게 짜면 문제가 있을 듯. if 문의 조건이 그냥 blank가 아니라 blank && !visited 여야 함. fill() 함수에서 방문한 칸을 또 방문하면(4방향 재귀니깐 당연히 또 방문할 수 있음) 영원히 안 끝나는 무한 루프에 빠질 수 있거든.
에혀... 나도 지금 엄청 피곤한 상태인가부다. 이제 진짜 자러 감. ㅂㅂ
http://autogram.tk/이
중고차 어플리케이션 어떤가요?