#define STONE_ON_CROSS 1
enum COLORG : int
{
c_none,
c_wall,
c_black = 2 + STONE_ON_CROSS,
c_white = 4 + STONE_ON_CROSS,
};
typedef struct POINTG
{
int x, y;
POINTG(int a_x, int a_y) { x = a_x, y = a_y; }
POINTG to_map_xy() { return POINTG(x * 2 + 2 - STONE_ON_CROSS, y * 2 + 2 - STONE_ON_CROSS); }
POINTG to_board_xy() { return POINTG((x - 2 + STONE_ON_CROSS) / 2, (y - 2 + STONE_ON_CROSS) / 2); }
}POINTG;
STONE_ON_CROSS 를 0 으로 놓으면 빈칸에 놓고 1로 두면 십자 금 위에 놓고 : )
아래 코드에 수정해 놓으려고 했는데 글이 수정이 안돼.
배고파서 손떨려서 밥먹고왔음 ㅋㅋㅋㅋ 바둑아니라 지뢰찾기야!!
아 그런거야?
어쨌거나 공백에든 금위엔 놓을 수 있음. ㅋㄷ
지뢰찾기~
어떤 원리인지를 몰라요 ㅋㅋ 하나씩 다찾아봐야대
문자열로 다루기 힘들것 같아서 배열모양의 map을 만들고 그 맵을 보드 모양으로 그려주는 알고리즘을 만들었지.
map의 가장자리를 한 칸 건너띈 테두리(wall) 들은 1로 채우고 한칸씩 건너띄며 구멍을 냈는데 (empty)
그래서 상 좌 우 하 가 벽이면, + 모양이 생기게 만든거지. 가령 좌 우 가 있으면 - 모양.
돌이 벽의 역할도 할 수 있게 하려면 돌 값을 홀수로 만들어야하고, 아니면 걍 짝수로 하면 되지.
그러다 보니 돌을 놓을 수 있는 좌표 (지뢰를 넣을 수 있는 좌표) 랑 맵의 좌표가 다르게 되잖아.
맵의 크기보다 약 1/2 크기인 보드를 갖는 셈 (돌을 놓을 수 있는 공간)
그래서 POINT라는 구조체를 정의하고, 거기를 통해 맵좌표를 보드좌표로, 보드좌표를 맵좌표로 바꿀 수 있게 했지.
니가 일일이 좌표 계산하면서 짜면 느리니까, 이런 방법이 정석이야. 좌표 변환함수만 정확하게 만들어두면 무지 편하게 작업할 수 있어.
그리고 저 괘선 그리는 알고리즘은, 격자형이면 어떤 모양이든 map 에 그려주면 나타나게 되어 있으니 다른데 써먹어도 좋을거야.
물론 요즘 시대에 누가 TUI 겠냐만은.
http://autogram.tk/이
중고차 어플리케이션 어떤가요?