순서도를 모두 합치려면 아주 큰 종이가 필요하겠지만, 프로그램을 합치는 건 매우 쉽습니다.
다음 프로그램에는 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}`);