🍣

ITスクール DAY24 UPDOWN GAME

2023/08/11に公開

UP&DOWN GAME

新しい先生になってから三日目になって、今日はOOPを復習する時間を持った。
メソッドでProcedure Programmingを練習し、少し自信を持ったが、
UP&DOWN GAMEをメソッドではなく、オブジェクトとのインタラクションで、mainで実行する形だったため、難しかった。

  1. 問題を出す友達、答えを持っている審判、答えを充てる私、メインクラス
  2. 審判は友達から紙にかくしてかいた番号をもらう。
  3. 審判は私を呼び、私は番号を話す。
  4. ゲームを答えを探すまで続き、何回目で当たりが出力する。
      5. 審判が主役だ。舞台に出る人は審判になる。

????

オブジェクトモデリングだったが、とてもクラスを組みづらかった。
特に、舞台をどうやって定義するかが分からなかったため、Mainにどのクラスのオブジェクトを生成し、どのふうにメソッドを組むかが分からなかった。

1時間後、少し先生からヒントをもらい、クラス間の関係性、Mainを舞台だと定義してから、
コードを組むことができた。

先生がヒントとして渡したメソッド

1. 私を呼ぶメソッド

CallMe
public Me callMe() {
	   System.out.println("Referee : Ya! Nawa!");
	   System.out.println("Me : 이 몸 등장 ㄴㅇㄱ");
	   return new Me();
   }

2. 友達に答えをもらうメソッド

askFriAns
  public int askFriAns(Friend f) {
	   int friAns = f.writeFriAns();
	   return friAns;
   }

私が組んだ最終コード

OMain1
public class OMain1 {
	
public static void main(String[] args) {
Referee referee = new Referee();
referee.judge(referee.askMyAns(referee.callMe(),referee.askFriAns(new Friend())));
	}
}

変数とメモリを減らしたいため、一つのラインで処理した。

Referee : Ya! Nawa!         //refree call me
Me : 이 몸 등장 ㄴㅇㄱ     
친구가 답을 정했다!          //friend give answer
Referee : 정답을 말해주세요.
Me : 50
UP
Referee : 정답을 말해주세요.
Me : 75
UP
Referee : 정답을 말해주세요.
Me : 87
DOWN
Referee : 정답을 말해주세요.
Me : 81
UP
Referee : 정답을 말해주세요.
Me : 84
DOWN
Referee : 정답을 말해주세요.
Me : 82
UP
Referee : 정답을 말해주세요.
Me : 83

7번의 시도 끝에 정답을 맞췄습니다.

Me
public class Me {
	
static Scanner sc = new Scanner(System.in);
	
public int speakMyAns() {
	System.out.print("Me : ");
	int myAns = sc.nextInt();
	return (myAns>0 && myAns<101 )? myAns: speakMyAns();
    }
}

Friend

import java.util.Random;

public class Friend {
	
	Random brain = new Random();
	public int writeFriAns() {
		// 머리속으로 숫자 하나를 <생각> 해서
		// 종이에 적어 답 제출
		int think = brain.nextInt(100)+ 1;
		System.out.println("친구가 답을 정했다!");
		return think;
	}
}

Referee
public class Referee {  
	
   int count = 0; 	
   //나 부르기
   public Me callMe() {
	   System.out.println("Referee : Ya! Nawa!");
	   System.out.println("Me : 이 몸 등장 ㄴㅇㄱ");
	   return new Me();
   }
   
   //친구에게 답 요구
   public int askFriAns(Friend f) {
	   int friAns = f.writeFriAns();
	   return friAns;
   }
   
   //나에게 답 요구 
   //판정(답 맞출때까지)
   //시도 횟수 몇 번 만에 맞췄는지
   public int askMyAns(Me me, int friAns) {
	   System.out.println("Referee : 정답을 말해주세요.");
	   count++;
	   int myAns = me.speakMyAns();
	   if(friAns == myAns ) return count;
	   else if(friAns > myAns) {
		   System.out.println("UP");
		   return askMyAns(me, friAns);
	   }
	   else {
		   System.out.println("DOWN");
		   return askMyAns(me, friAns);
	   }
   }
   
   public void judge(int count) {
	   System.out.println();
	   System.out.println(count + "번의 시도 끝에 정답을 맞췄습니다.");
   }
   
}

Discussion