// ccsk_161_049.c
/*
    C/C++の宿題片付けます 161代目
    http://t...content-available-to-author-only...h.net/test/read.cgi/tech/1354070278/49
        [1] 授業単元：計算機実習 
        [2] 問題文(含コード&リンク)： http://c...content-available-to-author-only...d.org/eMHdX9DL
        上記のプログラムを変更して，キーボードから(x, y)の座標とマスの状態を入力し，反映するようにしなさい．
        入力の際には座標や状態が範囲を超えていないか確認し，越えているときにはもう一度入力するようにしなさい．
        [3] 環境 
        　[3.1] OS：Linux 
        　[3.2] コンパイラ名とバージョン：gcc 
        　[3.3] 言語：C 
        [4] 期限：12/4
*/
#include<stdio.h>

#define YOKO (8)
#define TATE (8)
#define OKUMONO (2)             // 置くものの種類 数

int plot[TATE][YOKO];
char *state[] = { "  ", "○ ", "● " };   // , "◎", "◇", "◆", ,,,

////////////////////////////////////////////////////////
//  [func]  表示
void print_board()
{
    int x, y;

    printf("\033[2J");
    printf("\033[%d;%dH", 0, 0);
    printf("    0  1  2  3  4  5  6  7\n");
    printf("  +--+--+--+--+--+--+--+--+\n");
    for (y = 0; y < TATE; y++) {
        printf("%2d|", y);
        for (x = 0; x < YOKO; x++) {
            printf("%s|", state[plot[y][x]]);
        }
        printf("%d\n", y);
        printf("  +--+--+--+--+--+--+--+--+\n");
    }
    printf("    0  1  2  3  4  5  6  7\n");
}

////////////////////////////////////////////////////////
// [func]   set
// [arg]    x, y : 置きたい場所
//          s    : 置きたいもの (0, 1, 2 ,,,)
// [ret]    0    : 置けたので置いた
//          -1   : 座標が範囲外なので置けない
//          -2   : sが不正
//        ( -3   : 既に何かが置いてあるので置けない )未実装
int set(int x, int y, int s)
{
    // check
    if (x < 0 || YOKO <= x || y < 0 || TATE <= y) {
        return -1;
    }
#if 1
    if (s < 0 || OKUMONO < s) { // 何でも置ける
        return -2;
    }
#else
    if (s < 1 || OKUMONO < s) { // reversi mode
        return -2;
    }
    if (plot[y][x]) {
        return -3;
    }
#endif
    // set
    plot[y][x] = s;

    // reversi
    ;                           //未実装

    // end
    return 0;
}

////////////////////////////////////////////////////////
//      main
int main()
{
    int x, y, s;
    char b[256];

    // 初期化
    for (y = 0; y < TATE; y++) {
        for (x = 0; x < YOKO; x++) {
            plot[y][x] = 0;
        }
    }
    print_board();

    // 入力
    while (1) {
        printf("input  x  y state(1-%d)  ('q' to quit)\n", OKUMONO);
        fgets(b, sizeof(b), stdin);
        if (b[0] == 'q') {
            break;
        }
        sscanf(b, "%d %d %d", &x, &y, &s);
        if (set(x, y, s)) {
            printf("error\n");
        } else {
            // 表示
            print_board();
            // 勝敗判定
            ;                   // 未実装
        }
    }

    // 終了
    ;
}

// End of  ccsk_161_049.c