/*-------------------------- Ex10_6.java メソッドの利用:○×ゲーム ---------------------------*/ package jp_bunkyo; import java.util.Scanner; public class Ex10_6 { public static void main(String[] args) { int[] ban = new int[9]; // ○×ゲームの盤面用配列 for (int i=0; i < 9; i++) ban[i] = 0; // 盤面初期化 disp(ban); // 初期盤面表示 for (int k=0; k < 9; k++) { // ゲーム開始:最大で9回繰り返し if ( (k%2) == 0 ) { // 第 k 回目:kが偶数なら○の手番 ban[maru()] = 1; // ○の手(maru()) を盤面に反映 } else { // それ以外は×の手番 ban[batu()] = -1; // ×の手(batu()) を盤面に反映 } disp(ban); // 現在の盤面を表示 if ( hantei(ban,k%2) == true ) { // 勝利判定メソッド hantei() 呼び出し System.out.println("勝負あり!"); break; } } System.out.println(""); } public static void disp(int[] b) { // 盤面を描くメソッド for (int i = 0 ;i < 9; i++) { switch (b[i]) { case -1: System.out.print("×|"); break; case 0: System.out.print(" |"); break; case 1: System.out.print("○|"); break; default: break; } if ( (i+1)%3 == 0 ) System.out.println(); // 3個描く毎に改行 } System.out.println(); // 最後にもう一度改行 } public static int maru() { // ○の手番を実行するメソッド Scanner stdin = new Scanner(System.in); System.out.print(" ○の番です:\n 0|1|2\n 3|4|5\n 6|7|8\n 置ける場所を数字で指定して --> "); return (stdin.nextInt() ); } public static int batu() { // ×の手番を実行するメソッド Scanner stdin = new Scanner(System.in); System.out.print(" ×の番です:\n 0|1|2\n 3|4|5\n 6|7|8\n 置ける場所を数字で指定して --> "); return (stdin.nextInt() ); } public static boolean hantei(int[] b, int c) { // 勝利判定をするメソッド int num = 3; // ○の手番なら3 if ( c == 1 ) num = -3; // ×の手番なら-3 if ( b[0]+b[1]+b[2] == num ) return(true); // 上横の和の判定 else if ( b[3]+b[4]+b[5] == num ) return(true); // 中横の和の判定 else if ( b[6]+b[7]+b[8] == num ) return(true); // 下横の和の判定 else if ( b[0]+b[3]+b[6] == num ) return(true); // 左縦の和の判定 else if ( b[1]+b[4]+b[7] == num ) return(true); // 中縦の和の判定 else if ( b[2]+b[5]+b[8] == num ) return(true); // 右縦の和の判定 else if ( b[0]+b[4]+b[8] == num ) return(true); // 左斜の和の判定 else if ( b[2]+b[4]+b[6] == num ) return(true); // 右斜の和の判定 else return(false); } }