4.1皇冠和锚的赌博游戏
游戏规则,有一个6面的骰子,分别标有:皇冠,锚,红桃,梅花,黑桃,和方块。骰子总共有三个,
玩家可以下注。下注规则如下:
玩家初始有50便士,游戏分为三个部分:下注,投骰子,开奖结果。玩家的金钱输完,或本金翻倍,游戏结束。
分解流程图如下:
4.2 if else 语句
语法:
if ( 条件 ) {//代码块1}else {//代码块2}
流程图:
演示案例:
// 如果张三JavaScript考试成绩大于90分, 老师就奖励他一个苹果// 否则老师就罚他蹲马步let score = 100;if (score > 90) {console.log("老师说:不错,奖励一个苹果!");} else {console.log("老师说: 惩罚蹲5分钟马步! ");}
4.3 while循环
语法:
while ( 循环条件 ) {循环操作}
流程图:
示例:
let i = 1;while (i <= 100) {console.log("第" + i + "遍写:好好学习,天天向上!");i++;}
4.4 do-while循环
语法:
do {循环操作}while ( 循环条件 );
流程图:
演示案例:
//求从1加到100的总let sum = 0;let i = 1;do {sum = sum + i;i++;} while (i <= 100);console.log("从1加到100的总和是:" + sum);
4.5 for循环
语法:
for(循环变量初始化;条件判断;更新循环变量){循环操作}
流程图:
表达式1==循环变量初始化
表达式1==条件判断
表达式1==更新循环变量
演示案例:
let sum = 0;for (let i = 1; i <= 100; i++) {sum = sum + i;}console.log("从1加到100的总和是:" + sum);
4.6最后的整合
玩家托马斯,他会从右边口袋随机拿出一把硬币(少则一枚硬币,多则全部拿出),这就是他本轮的资金。另外,托马斯很迷信,他相信数字7可以给他带来好运。所以如果他正好拿出了7枚硬币,他就会把他们都放回去,然后把所有钱压红桃上,否则他会把拿到的钱随机下注。
流程拆解
变量定义 funds(本金) = 50,bets(下注)={},hand(开奖)=[]。
一个M到N之间的随机数方法,包括rand(1,6)
随机的字符串表示骰子向上的一面(比如:红桃,皇冠):randFace();
下注给bets对象属性赋值
开奖给数组添加元素 hand.push();
结果计算 funds-totalBet,funds+winnings
回合记录:roll++
循环条件 (funds>0,funds<100)
特殊情况判断 totalBet===7
//骰子const touzi = ["皇冠", "锚", "红桃", "黑桃", "梅花", "方块"];//返回随机数function rand(m, n) {return m + Math.floor((n - m + 1) * Math.random());}//返回骰子的任意一面function randFace() {let index = rand(0, 5);return touzi[index];}//下注let bets = {皇冠: 0,锚: 0,红桃: 0,黑桃: 0,梅花: 0,方块: 0};
特殊情况下注流程图
let funds = 50; //本金let round = 0; //回合次数while (funds > 0 && funds < 100) {round++;console.log(`第${round}回合:`);console.log(`\t 本金或剩余金钱:${funds} p`);let totalBet = rand(1, funds);//特殊情况if (totalBet === 7) {//全部下注红桃totalBet = funds;bets.红桃 = totalBet;} else {//随机分配下注}funds = funds - totalBet;console.log(`\t 下注详情:` + Object.keys(bets).map(face => `${face}:${bets[face]}¥`).join(",") +`(总共下注:${totalBet} ¥)`);}
随机下注流程图
//随机分配下注let remaining = totalBet;do {let bet = rand(1, remaining);let face = randFace();bets[face] = bets[face] + bet;remaining = remaining - bet;} while (remaining > 0);
掷骰子流程图
const hand = [];for (let roll = 0; roll < 3; roll++) {hand.push(randFace());}console.log(`\t 开奖:${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(`\t 赢:${winnings}`);
4.7switch语句
语法
switch (表达式) {case 常量 1:语句;break;case 常量 2:语句;break;default:语句;}
在皇冠和锚游戏中,如果玩家有多个迷信的数字,可以用switch语句来处理这个场景、例如:当玩家托马斯拿出了11或13便士时,他就会停止下注。
switch (totalBet) {case 7:totalBet = funds;break;case 11:case 13:totalBet = 0;break;default:break;}//如果13比11更不吉利,当拿到13,不仅要停止下注,还要拿出1便士来做慈善。
4.8break和continue
break,打破跳出,提前结束流程
continue,跳出当前循环继续下一次循环
return 退出当前方法,并返回相应值
throw 异常处理机制,抛出异常
let sum = 0;for (let i = 1; i <= 100; i++) {if (i % 2 === 0) {continue;}sum = sum + i;}console.log("1到100奇数的和是:" + sum);
4.9for-in和for-of
for-in 循环是为了循环对象中的属性key设计的。
语法
for(变量 in 对象){语句}
演示案例
for (let prop in player) {if (!player.hasOwnProperty(prop)) {continue;}console.log(prop + ':' + player[prop]);}
for-of运算符是ES6中的新语法,他提供了另一种在集合中遍历元素的方法.
语法
for(变量 of 对象){语句}
演示案例:
const hand = ['皇冠', '锚', '红桃'];for (let face of hand) {console.log(face);}

