7.○×ゲームを作ってみよう

7-3. 引き分け処理を追加

◇引き分け処理を付加

前回までのコードでは引き分けの判定が無かったので付け加えを行います。
付け加える場所は勝敗判定の次に付け加えてください先手と後手で二ヶ所あります。

/* 勝敗の判定 */

    if(line3[0]=='o'&&line3[1]=='o'&&line3[2]=='o' ||
       line2[0]=='o'&&line2[1]=='o'&&line2[2]=='o' ||
       line1[0]=='o'&&line1[1]=='o'&&line1[2]=='o' ||
       line3[0]=='o'&&line2[0]=='o'&&line1[0]=='o' ||
       line3[1]=='o'&&line2[1]=='o'&&line1[1]=='o' ||
       line3[2]=='o'&&line2[2]=='o'&&line1[2]=='o' ||
       line3[0]=='o'&&line2[1]=='o'&&line1[2]=='o' ||
       line3[2]=='o'&&line2[1]=='o'&&line1[0]=='o'){
       printf("○ 先手の勝ち\n");return 0;}

/* ------------この部分を付け加えます-------------------- */
    else if(line1[0]!=' '&&line1[1]!=' '&&line1[2]!=' '||
            line2[0]!=' '&&line2[1]!=' '&&line2[2]!=' '||
            line3[0]!=' '&&line3[1]!=' '&&line3[2]!=' ')
       printf("引き分け\n");return 0;}
/* -------------------ここまで--------------------------- */

/* ここからは後手のループ */

    if(line3[0]=='x'&&line3[1]=='x'&&line3[2]=='x' ||
       line2[0]=='x'&&line2[1]=='x'&&line2[2]=='x' ||
       line1[0]=='x'&&line1[1]=='x'&&line1[2]=='x' ||
       line3[0]=='x'&&line2[0]=='x'&&line1[0]=='x' ||
       line3[1]=='x'&&line2[1]=='x'&&line1[1]=='x' ||
       line3[2]=='x'&&line2[2]=='x'&&line1[2]=='x' ||
       line3[0]=='x'&&line2[1]=='x'&&line1[2]=='x' ||
       line3[2]=='x'&&line2[1]=='x'&&line1[0]=='x'){
       printf("× 後手の勝ち\n");return 0;}

/* ------------この部分を付け加えます-------------------- */
    else if(line1[0]!=' '&&line1[1]!=' '&&line1[2]!=' '||
            line2[0]!=' '&&line2[1]!=' '&&line2[2]!=' '||
            line3[0]!=' '&&line3[1]!=' '&&line3[2]!=' ')
       printf("引き分け\n");return 0;}
/* -------------------ここまで--------------------------- */

  } /* ここが全体のループの終端 */
}

/* プログラムの終了 */

そして、LSI-Cバージョンではこちら

    if(line3[0]=='o'&&line3[1]=='o'&&line3[2]=='o' ||
       line2[0]=='o'&&line2[1]=='o'&&line2[2]=='o' ||
       line1[0]=='o'&&line1[1]=='o'&&line1[2]=='o' ||
       line3[0]=='o'&&line2[0]=='o'&&line1[0]=='o'){
       printf("○ 先手の勝ち\n");return 0;}
    else if(
       line3[1]=='o'&&line2[1]=='o'&&line1[1]=='o' ||
       line3[2]=='o'&&line2[2]=='o'&&line1[2]=='o' ||
       line3[0]=='o'&&line2[1]=='o'&&line1[2]=='o' ||
       line3[2]=='o'&&line2[1]=='o'&&line1[0]=='o'){
       printf("○ 先手の勝ち\n");return 0;}
/* ------------この部分を付け加えます-------------------- */
    else if(line1[0]!=' '&&line1[1]!=' '&&line1[2]!=' '&&
            line2[0]!=' '&&line2[1]!=' '&&line2[2]!=' '&&
            line3[0]!=' '&&line3[1]!=' '&&line3[2]!=' ')
       printf("引き分け\n");return 0;}
/* -------------------ここまで--------------------------- */


    if(line3[0]=='x'&&line3[1]=='x'&&line3[2]=='x' ||
       line2[0]=='x'&&line2[1]=='x'&&line2[2]=='x' ||
       line1[0]=='x'&&line1[1]=='x'&&line1[2]=='x' ||
       line3[0]=='x'&&line2[0]=='x'&&line1[0]=='x'){
       printf("× 後手の勝ち\n");return 0;}
    else if(
       line3[1]=='x'&&line2[1]=='x'&&line1[1]=='x' ||
       line3[2]=='x'&&line2[2]=='x'&&line1[2]=='x' ||
       line3[0]=='x'&&line2[1]=='x'&&line1[2]=='x' ||
       line3[2]=='x'&&line2[1]=='x'&&line1[0]=='x'){
       printf("× 後手の勝ち\n");return 0;}
/* ------------この部分を付け加えます-------------------- */
    else if(line1[0]!=' '&&line1[1]!=' '&&line1[2]!=' '&&
            line2[0]!=' '&&line2[1]!=' '&&line2[2]!=' '&&
            line3[0]!=' '&&line3[1]!=' '&&line3[2]!=' ')
       printf("引き分け\n");return 0;}
/* -------------------ここまで--------------------------- */

  }
}

この処理は全てのマスが空白でなくなった時、引き分けと表示して終了します。