본문 바로가기

개발/Java

[Head First Java] Chapter2 숫자 맞추기 게임

숫자 맞추기 게임에서는 객체가 서로 다른 객체의 메소드를 호출하는 방법을 보여주고 있다.

GuessGame 클래스
public class GuessGame {
	//인스턴스 변수 선언
	Player p1;
	Player p2;
	Player p3;
	
 	public void startGame(){ //메소드 선언
 		
 		//Player 객체를 각 인스턴스 변수에 대입
 		p1 = new Player();
 		p2 = new Player();
 		p3 = new Player();
 		
 		//찍을 숫자 설정
 		int guessp1 = 0;
 		int guessp2 = 0;
 		int guessp3 = 0;
 		
 		//찍은 숫자가 맞는지 여부를 저장하기위한 변수 선언
 		boolean p1isRight = false;
 		boolean p2isRight = false;
 		boolean p3isRight = false;
 		
 		//맞출 숫자를 생성
 		int targetNumber = (int)(Math.random()*10);
 		System.out.println("0 이상 9 이하의 숫자를 맞춰보세요.");
 		
 		while(true){
 			System.out.println("맞춰야 할 숫자는 " + targetNumber + "입니다.");
 			
 			//guess 메소드 호출
 			p1.guess();
 			p2.guess();
 			p3.guess();
 			
 			
 			//실행 시킨 결과를 출력함
 			guessp1 = p1.number;
 			System.out.println("1번 선수가 찍은 숫자: " + guessp1);
 			
 			guessp2 = p2.number;
 			System.out.println("2번 선수가 찍은 숫자: " + guessp2);
 			
 			guessp3 = p3.number;
 			System.out.println("3번 선수가 찍은 숫자: " + guessp3);
 			
 			//찍은 숫자와 만들어진 하나라도 동일하면 맞춘 쪽의 변수를 변경 시킴
 			if(guessp1 == targetNumber){
 				p1isRight = true;
 			}
 			if(guessp2 == targetNumber){
 				p2isRight = true;
 			}
 			if(guessp3 == targetNumber){
 				p3isRight = true;
 			}
 			
 			//맞춘 쪽이 존재 한다면 결과물을 출력하고 순환문을 빠져 나감
 			if(p1isRight || p2isRight || p3isRight){
 				System.out.println("맞춘 선수가 있습니다.");
 				System.out.println("1번 선수: " + p1isRight);
 				System.out.println("2번 선수: " + p2isRight);
 				System.out.println("3번 선수: " + p3isRight);
 				break;
 			}
 			else{ // 맞춤 사람이 없다면 다시 시도시킴
 				System.out.println("다시 시도해야 합니다.");
 			}
 		}
 	}
}

Player 클래스
public class Player {
	int number = 0;
	
	public void guess(){
		number = (int)(Math.random()*10);
		System.out.println("찍은 숫자: " + number);
	}
}

GameLauncher 클래스
public class GameLauncher {
	public static void main(String[] args){
		GuessGame game = new GuessGame();
		game.startGame();
	}
}


 숫자 맞추기 게임은 서로 다른 객체의 메소드를 호출하는 내용을 담고 있는데 이 소스를 보면 main() 메소드는 GuessGame 객체를 만들고 startGame() 메소드를 호출 시키는데 startGame() 메소드에서는 Player 객체를 만들어 guess() 메소드를 호출시킨다.

 모든 처리는 GuessGame 클래스의 startGame() 메소드에서만 실행하게 하고 컴퓨터가 숫자 맞추기 위해 숫자를 생성하는 부분만 Player 클래스의 guest()에 존재 하여 호출시킨다.

main() <-  GuessGame() <- guess() 가 되고 있다.