바둑돌 가로 세로 개수 출력 프로그램
글쓴이: 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]가 경제적인 방법이겠고요.
매 턴마다 모든 돌 카운트하는 코드는 제거하고
돌 놓을때 해당 카운터만 올리도록 아래와 같이 수정하면 되겠네요.
댓글 달기