元小学校教員!がIT企業へ転職したリアルなブログ

公立の小学校教員を4年間勤めた後、IT企業へ転職しました。教育・転職・ITに関する情報を発信していきます。

【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回ループしました。
あなたの勝ちです。

いやぁ、ここまでくるのには、相当な時間かかりました…



【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();
    	}



【Java】【初心者】しりとりプログラム~その③~

おはようございます。
駆け出しプログラマーのakhです。

その②からの続きです。





今回、しりとりプログラムをつくる中で、

⁇でいっぱいだったのが、、、




コンピュータは、外部の辞書データから読み込んで出力する。


ということです。


これを聞いて、「え?自動的にコンピュータが言葉を返してくれないの?」

と思いました。そうです。ゼロから作るから、返してくれるわけありません。





さっそくググるところから始めました(笑)


私が参考にしたサイトはこちらです。↓↓↓↓↓↓↓↓↓

Java】FileReader、BufferedReaderでテキストファイルを読み込む> https://www.sejuku.net/blog/20924>
Let'sプログラミング >https://www.javadrive.jp/start/stream/index1.html>




いろいろググってみて、分かったこと

・ファイルを読み込むには「FileReaderクラスのreadメソッド」や
 「BufferedReaderクラスのreadLineメソッド」がある。
・「FileReaderクラスのreadメソッド」は、文字を一文字ずつ読んでいくときに使う。
・「BufferedReaderクラスのreadLineメソッド」は、
  テキストファイルを一行ずつ読み込むときに使う。

なので、今回は、「BufferedReaderクラスのreadLineメソッド」
を使うことにしました。

以下、記述したコードです。

try {
	                // ファイルのパスを指定する
	                File file = new File("C:\\辞書\\sakura.txt");
	                // ファイルが存在しない場合に例外が発生するので確認する
	                if (!file.exists()) {
	                    System.out.print("ファイルが存在しません");
	                    return;
	                }
	                // 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);
	                			break;
	                		}
	                	}
	                }

                // 最後にファイルを閉じてリソースを開放する
                bufferedReader.close();
	    		} catch (IOException e) {
	    			e.printStackTrace();
	    		}

BufferedReaderクラスのreadLineメソッドを使うときには、

エラー発生時の処理である、「例外」を記述しなければなりません。



ここでいう、エラー発生時とは、

BufferedReaderクラスのメソッドであるreadLine()を実行するときに、
「IOException」という例外が発生する可能性があるのに対処されていません、というエラーです。



try-catchのブロックを使うことで、エラーに対する処理を書くことができました(^O^)/



【Java】【初心者】しりとりプログラム~その②~

こんばんは。
駆け出しプログラマーのakhです。


その①からの続きです。




しりとりプログラムの勝ち負けの判定ですが、


今回は、boolean型のflagを使いました。

boolean flag = true;

これで、プログラム全体がtrueになりました。

逆に、語尾に「ン」が付いていたり、前の言葉から

つながっていなかったりした場合は、

if(checkStr(inputstr)){
          flag = false;

として、勝敗判定に持ち込みました。


//勝敗判定(勝敗が付かない場合は無限ループの先頭に戻る)
    		if(flag && data == null) {
    			System.out.println("あなたの勝ちです。");
    			break;
    		}else if(!flag){
    			System.out.println("あなたの負けです。");
    			break;

    		}else{
    			used.add(word);
    			System.out.println("入力してください。");
    			i++;
    			continue;
    		}

while文の中に書いたので、判定ができ次第、
breakを使って、処理を終了させました。

今まで判定に、if文のif文のif文…





と、
ネストだらけになっていたのですが、

少しすっきりしたコードが書けたと思います。



まだごちゃついてるので、

次はコンピュータやプレイヤーの働きを

メソッド化していきたいと思います。


その③へ続く…



【初心者】【Java】しりとりプログラム~その①~

f:id:akiho817:20200427222437j:plain

こんにちは!
駆け出しプログラマーのakhです。

なんと、

ついに、、


とても苦戦していた「しりとりプログラム」が
完成しました(^O^)/


といっても、コンピュータとの一対一ですが。
(最終目標は、8人プレイ)






初心者にとっては、ベリーハードでした。


以下、コードです。

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;
public class Siritori12 {
	public static void main(String[] args) {
		boolean flag = true;
		String word = new String();
		System.out.println("言葉を入力してください");
		System.out.println("シリトリ");
		String data = "シリトリ";
		List<String> used = new ArrayList<>();
		//5どちらかが敗北条件に達するor5回ループするまで繰り返す
		int i = 0;
		while(i<5){
          //プレーヤーの場合、言葉を入力してもらう
			String inputstr;
			//String data = new String();
    		inputstr = new java.util.Scanner(System.in).nextLine();

    		if(Katakana(inputstr)==false){
    			continue;
    		}
    		//前の言葉から繋がっているかどうか
    		if(!(data.charAt(data.length()-1) == inputstr.charAt(0))){
    			System.out.println("だめです。続く言葉を入れてください。");
    			flag = false;
    			//continue;
    		}
    		//語尾に「ん」があるかどうか
    		if(checkStr(inputstr)){
    			flag = false;
    			//break;
    		}
    		if(used.contains(inputstr)){
    			System.out.println("その言葉は一度使いました。");
    			flag = false;
    			//break;
    		}
    		used.add(inputstr);
    		inputstr = toUpper(inputstr);
    		inputstr = remove(inputstr);
    		if(flag) {
	    		System.out.println((i+1)+"回目");
	    		System.out.println("自分:"+inputstr);
	    		try {
	                // ファイルのパスを指定する
	                File file = new File("C:\\辞書\\sakura.txt");
	                // ファイルが存在しない場合に例外が発生するので確認する
	                if (!file.exists()) {
	                    System.out.print("ファイルが存在しません");
	                    return;
	                }
	                // 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);
	                			break;
	                		}
	                	}
	                }
                // 最後にファイルを閉じてリソースを開放する
                bufferedReader.close();
	    		} catch (IOException e) {
	    			e.printStackTrace();
	    		}
    		}
    		if(data == null){
    			System.out.println("辞書にもうありません。");
    		}
    		//勝敗判定(勝敗が付かない場合は無限ループの先頭に戻る)
    		if(flag && data == null) {
    			System.out.println("あなたの勝ちです。");
    			break;
    		}else if(!flag){
    			System.out.println("あなたの負けです。");
    			break;

    		}else{
    			used.add(word);
    			System.out.println("入力してください。");
    			i++;
    			continue;
    		}
    	}
		//5回ループしたとき
		if(i==5){
			System.out.println("----------------------------------------------------------------");
			System.out.println("5回ループしました。");
			System.out.println("あなたの勝ちです。");
			}
    }
	//カタカナ小文字を大文字に変換するメソッド
			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;
			}
}


何が難しかったかというと、自分が入力した文字の
末尾の言葉を
(例えば「リンゴ」を入力した場合、「ゴ」)
自作の辞書データの中から検索して出力するところです。


while文を使って、辞書データを一行ずつ読んでいきました。

      while ((data = bufferedReader.readLine()) != null) {


if文を使い、もしも入力した言葉の最後の一文字が、
辞書データの最初の一文字と一致していたら画面に出力しました。

	            if(inputstr.charAt(inputstr.length()-1) == data.charAt(0)){
	                		System.out.println("com:"+data);
	                		break;
	                	}
	             }

まだまだ学んだことがあるのですが、
つづきはその②へ!!



【初心者】【JavaでHigh&Lowゲームをつくってみた】~その②~

f:id:akiho817:20200420204848j:plain

前回の続きです。
その①とは、違う方法で書きました。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;

public class MyHi {
static final String REGEX_NUMBER = "^[H,h,L,l]$";
public static void main(String[] args) {
	//ユーザの入力を取得する為のバッファリーダーを構築する
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	int times = 0;  //試行回数を記憶するための領域

	Random rnd = new Random();    //乱数作成クラス
	int left = rnd.nextInt(13)+1;

	while(true){

	//あとで数値を作るとイカ様っぽいので先に数値を作る
		int right = rnd.nextInt(13)+1;

		System.out.println("今回の数値:"+left);
		System.out.println("");
		String ind = "";
		System.out.println("High or Low? H:High,L:Low");

		try {
			//コンソールからユーザーの入力を受け取る
			ind = br.readLine();
		} catch(IOException e){
			System.out.println("エラーが発生しました");
			return; //例外が発生した場合、処理を終了する
		}
			if(!ind.matches(REGEX_NUMBER)){   //HまたLに等しくないとき
			System.out.println("Please, Hit, H  or  L");
			continue;   //入力喚起を促し、処理の先頭に戻る
		}

		/* 結果の判定を先に行う*/
		boolean bAnswer = false;
		boolean bHigh = true;  //HorLフラグ(trueがHigh, falseがLowとする)
		boolean bLow = false;
		//Highが指定された場合
		if((ind.charAt(0) == 'H') || (ind.charAt(0) == 'h')){
			bHigh = true;
			if( left<= right){   //右辺が左辺以上の場合
				bAnswer = true;  //正解とする
			}
		}
		//lowが指定された場合
		if((ind.charAt(0) == 'L') || (ind.charAt(0) == 'l')){
			bLow = true;
			if( left>= right){
				bAnswer = true;
			}
		}
		if( left == right){
			if(bHigh){
				System.out.println("結果:"+ left + "<=" + right);
			} else {
				System.out.println("結果:"+ left + ">=" + right);
			}
		} else if(left<right){
			System.out.println("結果:"+ left + "<=" + right);
		} else {
			System.out.println("結果:"+ left + ">=" + right);
		}
		if(bAnswer){
			times++;
			System.out.println(times + "回目、正解");
		}else {
			System.out.println("不正解 正解した回数は" + times + "回でした");
			break;
		}
		left = right;
		System.out.println("******************************************");
		}
	}
}


今回初めて知ったこと

static final String REGEX_NUMBER = "^[H,h,L,l]$";

finalを使って、変数(REGEX_NUMBER)を宣言することで、
一度だけしか値を代入できなくなる。

正規表現を使い、「H,h,L,I」のどれかにマッチしたら
それぞれの処理に移る。



表示画面

今回の数値:1

High or Low? H:High,L:Low
h
結果:1<=6
1回目、正解
******************************************
今回の数値:6

High or Low? H:High,L:Low
h
結果:6>=3
不正解 正解した回数は1回でした

個人的には、その①の方が分かりやすかったです。
(表示画面の見た目的に…)



【初心者】【JavaでHigh&Lowゲームをつくってみた】~その①~

f:id:akiho817:20200420204848j:plain

こんばんは。
駆け出しプログラマーのakhです。

最近は、しりとりプログラムでつまっています…


さて、
Javaでトランプゲームの
High&Lowゲームをつくってみました。
以下、概要です。

概ね以下の技術をつかう
・乱数作成処理
・標準入力の受け付け
・if文、while文の使い方

【ゲームのルール】
1.1~13までの数値を乱数で生成し、その数値を元値とする
2.1~13までの数値を乱数で生成し、その値を比較値とする
3.プレイヤーに元値と比較値のどちらが大きいか解答させる
4.プレイヤーが正解の場合は、正解数を1追加し、
  現在の比較値を元値とし、2の処理へ戻る。
  プレイヤーが間違えた場合は正解回数を出力しゲームを
  終了する。
補足:元値と比較値が同じ値の場合は正解とすること。

以下、コードです。

import java.util.Scanner;
public class TranpGame {

	public static void main(String[] args) {
		System.out.println("************");
		System.out.println("*High & Low*");
		System.out.println("************");
		System.out.println("");
		Scanner sc = new Scanner(System.in);
		while(true){
			int leftCard = (int)(Math.random()*9)+1;
			int rightCard = (int)(Math.random()*9)+1;

			System.out.println(" [問題表示] ");
			System.out.println("*****    *****");
			System.out.println("*   *    * * *");
			System.out.println("* "+leftCard+" *    * * *");
			System.out.println("*   *    * * *");
			System.out.println("*****    *****");
			System.out.println(" High  or  Low?(h/l)>");
			String select = sc.nextLine();
			if(select.equals("h")){
				System.out.println("→Highを選択しました。");
			}else{
				System.out.println("→Lowを選択しました。");
			}

			System.out.println("");
			System.out.println("  [結果表示]  ");
			System.out.println("*****    *****");
			System.out.println("*   *    * * *");
			System.out.println("* "+leftCard+" *    * "+rightCard+" *");
			System.out.println("*   *    * * *");
			System.out.println("*****    *****");
			String result = null;

			if(leftCard<rightCard){
				result="h";
			}else if(leftCard>rightCard){
				result="l";
			}else{
				result = select;
			}
			if(select.equals(result)){
				System.out.println("→You Win!!!!");
			}else{
				System.out.println("→You Lose...");
				System.out.println("--ゲーム終了--");
				break;
			}
		}
	}
}

今回は、

・乱数作成の仕方
・whileでループし続ける、break文を使って
 処理を終わらせること
を学びました。

表示画面

*****    *****
 High  or  Low?(h/l)>
h
→Highを選択しました。

  [結果表示]  
*****    *****
*   *    * * *
* 3 *    * 4 *
*   *    * * *
*****    *****
→You Win!!!!
 [問題表示] 
*****    *****
*   *    * * *
* 2 *    * * *
*   *    * * *
*****    *****
 High  or  Low?(h/l)>
h
→Highを選択しました。

  [結果表示]  
*****    *****
*   *    * * *
* 2 *    * 7 *
*   *    * * *
*****    *****
→You Win!!!!
 [問題表示] 
*****    *****
*   *    * * *
* 4 *    * * *
*   *    * * *
*****    *****
 High  or  Low?(h/l)>
l
→Lowを選択しました。

  [結果表示]  
*****    *****
*   *    * * *
* 4 *    * 4 *
*   *    * * *
*****    *****
→You Win!!!!
 [問題表示] 
*****    *****
*   *    * * *
* 5 *    * * *
*   *    * * *
*****    *****
 High  or  Low?(h/l)>