JavaScript实现Craps骰子游戏规则逻辑的问题与实现
模拟Craps骰子游戏的JavaScript实现与问题解决
需求规则
- 模拟10次掷骰流程:从第1次掷骰开始,若两个骰子点数之和
myRoll属于point数组[4, 5, 6, 8, 9, 10],首次出现的该数值即为确立的pointNumber。 - 后续掷骰逻辑:
- 若再次掷出已确立的
pointNumber,输出消息Frontline winner! - 若掷出7,输出
seven out并重置pointNumber - 其他情况保持当前
pointNumber不变
- 若再次掷出已确立的
初始代码的问题
初始代码存在逻辑缺陷:每次掷出符合point数组的数值时,都会直接覆盖pointNumber,无法保留首次确立的数值,不符合需求中“首次出现的数值为pointNumber”的规则。
const point = [4, 5, 6, 8, 9, 10] let pointNumber = 0 const n = 10 for (let i = 1; i <= n; i++) { let dice1 = Math.floor(Math.random() * 6) + 1; let dice2 = Math.floor(Math.random() * 6) + 1; let myRoll = dice1 + dice2 if (point.includes(myRoll)) { pointNumber = myRoll } console.log('Roll:' + i + ' Dice: ' + myRoll + ' Point:' + pointNumber) }
优化后的代码
调整后代码修正了逻辑,能够正确保留首次确立的pointNumber,并按照需求处理后续掷骰的各种情况:
//const { point, craps, come_out, bigRed, Yo } = require('./checkRoll') const point = [4,5,6,8,9,10] let NonpointNumberArr = [] let pointNumberArr = [] let pointNumber = 0 const n = 10 let isPointWinner = false let isSeven = false for (let i=1; i<= n; i++) { let text = [`Roll: ${i}`] let dice1 = Math.floor(Math.random() * 6) + 1; let dice2 = Math.floor(Math.random() * 6) + 1; let myRoll = [] myRoll[i] = dice1 + dice2 text.push(`Dice: ${myRoll[i]}`) if(myRoll[i] === 7) { text.push(`seven out`) isSeven = true isPointWinner = false NonpointNumberArr.push(myRoll[i]) pointNumber = 0 pointNumberArr = [] } else { if (!point.includes(myRoll[i])){ isPointWinner = false text.push(`Point: ${pointNumber}`) NonpointNumberArr.push(myRoll[i]) }} if (point.includes(myRoll[i])){ pointNumberArr.push(myRoll[i]) if (myRoll[i] === pointNumber) { text.push(`frontline winner!`) pointNumber = 0 pointNumberArr = [] } else { pointNumber = pointNumberArr[0] text.push(`Point: ${pointNumber}`) } } isSeven = false console.log(text.join(' ')) } // console.log(`\npoint number ${pointNumber}`) // console.log(`\npoint numbers: ${pointNumberArr}`) // console.log(`\nNon point numbers: ${NonpointNumberArr}`)
内容的提问来源于stack exchange,提问作者Derek
相关产品推荐
相关产品推荐

