【Java】【初心者】しりとりプログラム~その④~(コンピュータ同士での対戦)
こんばんは。
駆け出しプログラマーのakhです。
今回は、コンピュータのメソッドを使って
コンピュータ同士での対戦をさせました。
完成したコードがこちらです。
package practice4; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Random; public class Siritori13 { public static void main(String[] args) { boolean flag = true; List<String> used2 = new ArrayList<>(); //最初の言葉をランダムで出す int count =0; int a = new Random().nextInt(50); String firstWord = new String(); try{ File file = new File("C:\\辞書\\sakura.txt"); FileReader fr = new FileReader(file); BufferedReader bfr = new BufferedReader(fr); while(bfr.ready()){ firstWord = bfr.readLine(); firstWord = toUpper(firstWord); firstWord = remove(firstWord); if(count == a){ break; } count ++ ; } } catch (IOException e) { e.printStackTrace(); } System.out.println("最初の言葉は..."); System.out.println(firstWord); String data = firstWord; String inputstr = data; int i = 0; while(i<10){ System.out.println((i+1)+"回目"); inputstr=computer(data,inputstr); if(used2.contains(inputstr)){ System.out.println("一度使いました。"); break; } used2.add(inputstr); i++; } } //コンピュータメソッド private static String computer(String data,String inputstr){ List<String> used = new ArrayList<>(); String word = new String(); try { // ファイルのパスを指定する File file = new File("C:\\辞書\\sakura.txt"); // ファイルが存在しない場合に例外が発生するので確認する if (!file.exists()) { System.out.print("ファイルが存在しません"); } // BufferedReaderクラスのreadLineメソッドを使って1行ずつ読み込み表示する FileReader fileReader = new FileReader(file); BufferedReader bufferedReader = new BufferedReader(fileReader); while ((data = bufferedReader.readLine()) != null) { word = data; data = toUpper(data); data = remove(data); //辞書に言葉があるか検索 if(inputstr.charAt(inputstr.length()-1) == data.charAt(0)){ if(!used.contains(word) ) { System.out.println("com:"+data); used.add(word); break; } } } used.add(inputstr); // 最後にファイルを閉じてリソースを開放する bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } return data; } //カタカナ小文字を大文字に変換するメソッド private static String toUpper(String str) { str = str.replace("ャ","ヤ"); str = str.replace("ュ","ユ"); str = str.replace("ョ","ヨ"); str = str.replace("ァ","ア"); str = str.replace("ィ","イ"); str = str.replace("ゥ","ウ"); str = str.replace("ェ","エ"); str = str.replace("ォ","オ"); return str; } //語尾に「ー」があったら、取るメソッド private static String remove(String str2){ if(str2.substring(str2.length()-1).equals("ー")){ str2 = str2.substring(0,(str2.length()-1)); } return str2; } //語尾に「コウサン」、「ン」があるかどうか確認するメソッド private static boolean checkStr(String checkStr){ boolean result = true; if(checkStr.equals("コウサン")){ System.out.println("「コウサン」しました。"); }else if(checkStr.substring(checkStr.length()-1).equals("ン")){ System.out.println("「ン」がつきました。"); }else{ //「ン」が付かない場合は検証結果をfalseにする return false; } return result; } //入力の言葉が「全角カタカナ」及び長音付「ー」かどうか確認するメソッド private static boolean Katakana(String str3){ if(str3 == null || !str3.matches("^[ァ-ヶー]*$")){ //一致しない場合、エラー System.out.println("全角カタカナで入力してください。"); return false; } return true; } }
表示画面は、こんな感じになりました。
最初の言葉は... ドラヤキ 1回目 com:キシヤ 2回目 com:ヤギ 3回目 com:ギンガミ 4回目 com:ミミズ 5回目 com:ズッキーニ 6回目 com:ニンニク 7回目 com:クルミ 8回目 com:ミミズ 一度使いました。
ここでは、コンピュータの区別を付けていないので、
一度使った言葉が出てきた時点で、終了とさせました。
今まで、メソッドや引数の意味が分かっていなかったのですが、
試行錯誤しながら作っていくうちに、なんとなくですが分かるようになってきました。
そしてさらに!
最初の言葉は「シリトリ」から始めていましたが、
今回、Randomクラスを使って、辞書データの中から
ランダムに言葉を出せるようになりました(^O^)/
↓
//最初の言葉をランダムで出す int count =0; int a = new Random().nextInt(50); String firstWord = new String(); try{ File file = new File("C:\\辞書\\sakura.txt"); FileReader fr = new FileReader(file); BufferedReader bfr = new BufferedReader(fr); while(bfr.ready()){ firstWord = bfr.readLine(); firstWord = toUpper(firstWord); firstWord = remove(firstWord); if(count == a){ break; } count ++ ; } } catch (IOException e) { e.printStackTrace(); }