바둑돌 가로 세로 개수 출력 프로그램
글쓴이: seungdam / 작성시간: 화, 2019/04/09 - 1:31오전
#include <iostream> #include <string.h> #include <windows.h> using namespace std; enum color {EMPTY , WHITE , BLACK}; struct Point { int x; int y; }; void draw(int[][10]); void cnt(int [][10], int a, int b); void draw(int arr[][10]) { system("cls"); for (int i = 0; i < 10; ++i) { for (int k = 0; k < 10; ++k) { if (arr[i][k] == EMPTY) { std::cout << "□"; } else if (arr[i][k] == BLACK) { // 검은돌 std::cout << "●"; } else if (arr[i][k] == WHITE) { // 흰돌 std::cout << "▲"; } else if (arr[i][k] == 9) { std::cout << "★"; } } std::cout << std::endl; } } void gotoxy(int, int); void gotoxy(int x, int y) { COORD Pos = { x, y }; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos); } int main() { int CheckerBoard[10][10] = { 0 }; int ChangeBoard[10][10] = { 0 }; int command; int turn = 0; int white_doll_w[10] = {0}; // 가로줄 흰돌 int black_doll_w[10] = {0}; // 가로줄 검은돌 int black_doll_h[10] = {0}; // 세로줄 흰돌 int white_doll_h[10] = {0}; // 세로줄 검은돌 Point doll; while (1) { if (turn == 0) { std::cout << "검은돌 좌표 (0,0)~(9,9) : "; std::cin >> doll.x >> doll.y; std::cout << endl; if (CheckerBoard[9 - doll.y][doll.x] == EMPTY) { CheckerBoard[9 - doll.y][doll.x] = BLACK; turn = 1; } else { cout << "이미 돌 있는 자리" << endl; continue; } } else if (turn == 1) { std::cout << "흰돌 좌표 (0,0)~(9,9) : "; std::cin >> doll.x >> doll.y; std::cout << endl; if (CheckerBoard[9 - doll.y][doll.x] == EMPTY) { CheckerBoard[9 - doll.y][doll.x] = WHITE; turn = 0; } else { cout << "이미 돌 있는 자리" << endl; continue; } } // 끝자리 기억 //몇번째 줄인지 기억 // 사이개수가 몇개인지 센다 draw(CheckerBoard); // 가로줄 세기 for (int i = 0; i < 10; ++i) { for (int k = 0; k < 10; ++k) { if (CheckerBoard[i][k] == BLACK) { ++black_doll_w[i]; } else if (CheckerBoard[i][k] == WHITE) { ++white_doll_w[i]; } } } // 세로줄 세기 for (int i = 0; i < 10; ++i) { for (int k = 0; k < 10; ++k) { if (CheckerBoard[k][i] == BLACK) { ++black_doll_h[i]; } else if (CheckerBoard[k][i] == WHITE) { ++white_doll_h[i]; } } } for (int i = 0; i < 10; ++i) { gotoxy(20, i); cout << i + 1<< "번째 가로줄 검은돌 흰돌 개수 : " << black_doll_w[i]<< " , " << white_doll_w[i] << std::endl; gotoxy(0, 10 + i); cout << i + 1<< "번째 세로줄 검은돌 흰돌 개수 : " << black_doll_h[i] << " , " << white_doll_h[i] << std::endl; } } }
제가만든 바둑판 가로 세로 줄마다 흰돌 검은돌 개수 세는 프로그램인데 돌 카운트가 첫번째는 괜찮다가 두번째 이후부터 이상하게 카운트가 되는데 뭐가문제인지 모르겠네요
Forums:
처음에는 잘 되고, 두번째부터 이상하다면?
처음에는 잘 되고, 두번째부터 이상하다면?
처음 한 다음에 뭔가 초기화 작업을 해야 되는 데 그걸 놓치신 거 아닌가요?
리눅스용이면 테스트 해보려했더니... 엠에스 윈도 전용 프로그램이군요.
세벌 https://sebuls.blogspot.kr/
이미 해결하셨겠지만..
매 턴마다 모든 돌에 대해 카운터를 증가시키고 있으므로
갯수가 누적되고 있습니다.
[1] 매 턴마다 갯수 세기 전에 카운터를 모두 초기화하거나,
[2] 카운터를 유지하되 새로 둔 돌만 카운터에 반영하면 되겠습니다.
[1]보다는 [2]가 경제적인 방법이겠고요.
매 턴마다 모든 돌 카운트하는 코드는 제거하고
돌 놓을때 해당 카운터만 올리도록 아래와 같이 수정하면 되겠네요.
댓글 달기