int checks(){ spikeCheck(); waterCheck(); fieldCheck(); return 0; }
int input(int field[][COL], int open[][COL], int number[][COL]) { /* 指し手の入力を受付け,穴をあけます */ int row = 0; // ユーザー指定の位置 int col = 0; // ユーザー指定の位置 int mode; // モード保持 int status = 0; // 入力値が不正かどうかの結果を保存するため while(1) { printField(open, number,field,0); // 碁盤の表示 printf("モードを選択してください(入力後に Enter キーを押してください)\n"); printf("フラグを立てる・消す : 1, 穴を開ける : 2\n"); /* とりあえず文字入力時の無限ループ回避 */ if(scanf("%d", &mode) != 1) { scanf("%*s"); if(feof(stdin)) printf("Buffer Error!\n"); printf("\n不正な値です.再入力してください.(r)\n\n"); continue; } /* 異なる文字の対策 */ if(!(mode == 1 || mode == 2)) { printf("\n不正な値です.再入力してください.(mfo)\n\n"); continue; } printf("あなたのマス目を選択してください\n"); printf("縦(入力後に Enter キーを押してください) : "); /* とりあえず文字入力時の無限ループ回避 */ if(scanf("%d", &row) != 1) { scanf("%*s"); if(feof(stdin)) printf("Buffer Error!\n"); printf("\n不正な値です.再入力してください.(r)\n\n"); continue; } printf("横(入力後に Enter キーを押してください) : "); /* とりあえず文字入力時の無限ループ回避 */ if(scanf("%d", &col) != 1) { scanf("%*s"); if(feof(stdin)) printf("Buffer Error!\n"); printf("\n不正な値です.再入力してください.(c)\n\n"); continue; } /* 入力番号から配列番号へ変換 */ row--; col--; status = fieldCheck(open, row, col); // 入力値のチェック Msg(status); // チェック結果のメッセージを表示 if(status == 0) break; // 正常ならループを抜ける } if(mode == 2) { if(field[row][col] == 1) { // 敗北判定 printField(open, number,field,1); // 碁盤の表示 printf("you lose!\n"); return -1; } fieldChange(open, number, row, col); // フィールドに穴を開ける if(win(field, open) == 0) { // 勝利判定 printField(open, number,field,1); // 碁盤の表示 printf("you win!\n"); return 1; } } else if(mode == 1) { /* フラグが立っていないなら、フラグを立てる */ if(open[row][col] == 0) open[row][col] = -1; /* フラグが立っているなら、フラグを消す */ else if(open[row][col] == -1) open[row][col] = 0; } return 0; }