LHJ

I'm a FE developer.

4.1.9 하나로 합치기

19 Apr 2020 » js_lj

순서도를 모두 합치려면 아주 큰 종이가 필요하겠지만, 프로그램을 합치는 건 매우 쉽습니다.

다음 프로그램에는 console.log 를 호출하는 부분이 들어있습니다.
이 함수는 토마스가 게임을 어떻게 진행하고 있는지 알아보려고 넣은 겁니다.
지금 당장 console.log에 대해 이해할 필요는 없습니다.
책을 진행하면서 고급 테크닉을 배우다 보면 자연히 알게 됩니다.

토마스가 지금 몇 판째 게임을 하는지 알아보는 round 변수도 추가했습니다.

// m 이상 n 이하의 무작위 정수를 반환합니다.
function rand(m, n) {
	return m + Math.floor((n - m + 1) * Math.random());
}

// 크라운 앤 앵커 게임의 여섯 그림 중 하나에 해당하는 문자열을 무작위로 반환합니다.
function randFace() {
	return ["crown", "anchor", "heart", "spade", "club", "diamond"]
		[rand(0, 5)];
}

let funds = 50; // 시작 조건
let round = 0;

while(funds > 1 && funds < 100) {
	round++;
	console.log(`round ${round}:`);
	console.log(`\tstarting funds: ${funds}p`);
	// 돈을 겁니다.
	let bets = { crown: 0, anchor: 0, heart: 0, spade: 0, club: 0, diamond: 0};
	let totalBet = rand(1, funds);
	if (totalBet === 7) {
		totalbet = funds;
		bets.heart = totalBet;
	} else {
		// 판돈을 나눕니다.
		let remaining = totalBet;
		do {
			let bet = rand(1, remaining);
			let face = randFace();
			bets[face] = bets[face] + bet;
			remaining = remaining - bet;
		} while (remaining > 0)
	}
	funds = funds - totalBet;
	console.log('\tbets: ' + Object.keys(bets).map(face => `${face}: ${bets[face]} pence`).join(', ') + ` (total: ${totalBet} pence)`);

	// 주사위를 굴립니다.
	const hand = [];
	for (let roll = 0; roll < 3; roll++) {
		hand.push(randFace());
	}
	console.log(`\thand: ${hand.join(', ')}`);

	// 딴 돈을 가져옵니다.
	let winnings = 0;
	for (let die=0; die< hand.length; die++) {
		let face = hand[die];
		if(bets[face] > 0) winnings = winnings + bets[face];
	}
	funds = funds + winnings;
	console.log(`\twinnings : ${winnings}`);
}
console.log(`\tending funds: ${funds}`);