【Java】【初心者】しりとりプログラム~その⑤~(メソッド化してみた)
こんばんは。
駆け出しプログラマーのakhです。
前回は、コンピュータの動きをメソッド化して、
コンピュータ同士での対戦をすることができました。
今回は、
プレイヤーメソッドを作って、
もう一度、コンピュータ対プレイヤー(1対1)の
しりとりプログラムを作ってみたいと思います。
試行錯誤して、できたのがこちら!!!
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 Siritori16 { public static void main(String[] args) { boolean flag = true; List<String> playerUsed = new ArrayList<>(); List<String> comUsed = 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 = new String(); int i = 0; while(i<5){ if(flag){ System.out.println((i+1)+"回目"); inputstr=player(inputstr,data); System.out.println("player:"+inputstr); //全角カタカナで入力 if(Katakana(inputstr)==false){ continue; } //前の言葉から繋がっているかどうか if(!(data.charAt(data.length()-1) == inputstr.charAt(0))){ System.out.println(""); System.out.println("だめです。続く言葉を入れてください。"); flag = false; break; } comUsed.add(firstWord); data=computer(data,inputstr,comUsed); //語尾に「ん」があるかどうか if(checkStr(inputstr)){ flag = false; break; } //2回使ったかどうか if(playerUsed.contains(inputstr)){ System.out.println("一度使いました。"); flag = false; break; } if(playerUsed.contains(data)){ System.out.println("同じ言葉を使ってしまいました…"); flag = true; break; } if(data==firstWord){ System.out.println("最初と同じ言葉を使ってしまいました"); flag = true; break; } if(data==null){ flag = true; break; } playerUsed.add(firstWord); playerUsed.add(inputstr); playerUsed.add(data); i++; } } if(!flag){ System.out.println("----------------------------------------------------------------"); System.out.println("あなたの負けです。"); } //5回ループしたとき if(i==5){ System.out.println("----------------------------------------------------------------"); System.out.println("5回ループしました。"); System.out.println("あなたの勝ちです。"); } } //プレイヤーメソッド private static String player(String inputstr,String data){ List<String> used = new ArrayList<>(); inputstr = new java.util.Scanner(System.in).nextLine(); used.add(inputstr); inputstr = toUpper(inputstr); inputstr = remove(inputstr); return inputstr; } //コンピュータメソッド private static String computer(String data,String inputstr,List<String> comUsed){ 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(!comUsed.contains(data) ) { System.out.println("com:"+data); comUsed.add(data); //System.out.println(comUsed); break; } } } if(data == null) { System.out.println(" "); System.out.println("辞書にもうありません。"); } // 最後にファイルを閉じてリソースを開放する 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回目 イタチ player:イタチ com:チータ 2回目 タヌキ player:タヌキ com:キシヤ 3回目 ヤリ player:ヤリ com:リンゴ 4回目 ゴマ player:ゴマ com:マンゴ 5回目 ゴリラ player:ゴリラ com:ラクダ ---------------------------------------------------------------- 5回ループしました。 あなたの勝ちです。
いやぁ、ここまでくるのには、相当な時間かかりました…