1. ExecClass

public class ExecClass {
	public static void main(String[] args) {
		// 1.
		class GameManager{		// 다른 곳에서는 사용 못 하고 오직 이 메소드 내에서만 사용할 수 있는 클래스. 클래스 파일을 하나 더 만들고 빼도 된다.
			public boolean doGame(Horse[] horse) {
				boolean isEnd = true;	// Horse의 isEnd와 다른 isEnd다. 이 위치에 선언하고 각 말의 객체의 isEnd와 비교해야 모든 말이 완주할 수 있고 return을 돌려보낼 수 있다.
				for (int i = 0; i < horse.length; i++) {	// Horse 객체를 0번부터 n번까지 달리게 만드는 반복문
					horse[i].runHorse();
					isEnd = isEnd && horse[i].isEnd; // doGame에서 true로 놓은 게임
				}
				return isEnd;
			}
		}
		// Horse 객체 생성
		Horse[] horse = {new Horse("흑마"), new Horse("적토마")};
		
		// GameManager 메모리에 할당
		GameManager gameManager = new GameManager();
		
		// 턴을 증가시키는 반복문
		for (int i = 0; i < 99999; i++) {
			boolean isEnd = gameManager.doGame(horse);
			System.out.println("---------------------------------");
			if (isEnd) {
				break;
			}
		}
	}
}

 

2. Horse

import java.util.Random;

public class Horse {
	String name;
	int distance;
	boolean isEnd = false;
	static int rank = 0;
	
	Horse(String name) {
		this.name = name;
	}
	public void runHorse() {
		if (!this.isEnd) {
			this.distance = this.distance + (int)Math.floor(Math.random() * 100);	// 매 턴마다 0~100 사이의 정수의를 달린 거리로 랜덤 누적.
			System.out.println(this.name + " : " + this.distance);
			this.checkEnd();	// 달린 누적 거리가 1000 이상이면 해당 객체의 isEnd를 True로 바꿔주는 메소드를 매번 체크 (게임에서 isLive 체크와 동일)
		}
	}
	public void checkEnd() {
		if (distance >= 1000) {
			isEnd = true;
			Horse.rank++;
			System.out.println(this.name + " is goal" + " rank" + Horse.rank);
		}
	}
	
	public void run() {
		Random r = new Random();
		for (int i = 0; i < 99999; i++) {
			this.runHorse();
			if (this.isEnd) {
				break;
			}
			int sleepTime = r.nextInt(10) * 1000 + 300;
			try {
				Thread.sleep(sleepTime);
			} catch (InterruptedException e) {}
		}
	}
}

 

결과

흑마 : 87
적토마 : 53
---------------------------------
흑마 : 163
적토마 : 121
---------------------------------
흑마 : 252
적토마 : 172
---------------------------------
흑마 : 336
적토마 : 240
---------------------------------
흑마 : 401
적토마 : 261
---------------------------------
흑마 : 434
적토마 : 328
---------------------------------
흑마 : 529
적토마 : 343
---------------------------------
흑마 : 594
적토마 : 360
---------------------------------
흑마 : 679
적토마 : 436
---------------------------------
흑마 : 740
적토마 : 468
---------------------------------
흑마 : 781
적토마 : 503
---------------------------------
흑마 : 801
적토마 : 530
---------------------------------
흑마 : 835
적토마 : 559
---------------------------------
흑마 : 864
적토마 : 629
---------------------------------
흑마 : 915
적토마 : 636
---------------------------------
흑마 : 973
적토마 : 716
---------------------------------
흑마 : 1015
흑마 is goal rank1
적토마 : 783
---------------------------------
적토마 : 851
---------------------------------
적토마 : 926
---------------------------------
적토마 : 980
---------------------------------
적토마 : 1042
적토마 is goal rank2
---------------------------------

 

또 다른 결과

흑마 : 68
적토마 : 62
---------------------------------
흑마 : 89
적토마 : 66
---------------------------------
흑마 : 139
적토마 : 129
---------------------------------
흑마 : 189
적토마 : 195
---------------------------------
흑마 : 274
적토마 : 216
---------------------------------
흑마 : 373
적토마 : 294
---------------------------------
흑마 : 454
적토마 : 391
---------------------------------
흑마 : 509
적토마 : 489
---------------------------------
흑마 : 530
적토마 : 523
---------------------------------
흑마 : 587
적토마 : 565
---------------------------------
흑마 : 599
적토마 : 650
---------------------------------
흑마 : 607
적토마 : 678
---------------------------------
흑마 : 706
적토마 : 736
---------------------------------
흑마 : 802
적토마 : 805
---------------------------------
흑마 : 813
적토마 : 883
---------------------------------
흑마 : 841
적토마 : 954
---------------------------------
흑마 : 931
적토마 : 1008
적토마 is goal rank1
---------------------------------
흑마 : 1010
흑마 is goal rank2
---------------------------------

+ Recent posts