CS61A 课程 Project1 The Game of Hog

CS61A 课程项目 Hog

要求参考composing programs的1.2节和1.6节,使用控制语句和高阶函数来完成该项目

Hog 游戏规则

两个玩家轮流进行游戏并试图成为第一个以让总分超过100分的人

每一轮中,当前玩家选择一定数量的骰子投掷(最多10个)

玩家该轮的分数是所有骰子投掷结果的和

投掷骰子数量太多的玩家需要承担一下风险:

  • 规则Pig out. 在本轮所有骰子投掷结果中,只要有一个是1,那么当前玩家本轮得分为1
    • 例1,当前玩家投掷7枚骰子,其中5个结果为1,该玩家本轮得分为1
    • 例2,当前玩家投掷4枚骰子,其投掷结果均为3,由于"Pig out"规则并没有被触发,因此该玩家本轮得分为12

在正常的Hog游戏中,以上即为全部规则,该课程添加了以下特殊规则以增加趣味性以及项目难度:

  • 规则Free Bacon,如果一个玩家本轮选择不投掷骰子,那么其分数为对手本轮分数值的十位数字 + (10 - 对手本轮分数值的个位数字)

    • 例1,对手该轮分数为32,当前选手不投掷,当前选手本轮分数为10 - 2 + 3 = 11
    • 例2,对手该轮分数为19,当前选手不投掷,当前选手本轮分数为10 - 9 + 1 = 2
    • 例3,对手该轮分数为80,当前选手不投掷,当前选手本轮分数为10 - 0 + 8 = 18
    • 例4,对手该轮分数为5,当前选手不投掷,当前选手本轮分数为10 - 5 + 0 = 5
  • 规则Feral Hogs,如果玩家该轮投掷骰子的数量与上轮投掷得分差的绝对值为2,那么本轮可以额外获得3分。

  • 注1:将第一轮游戏之前的轮次得分视为0

  • 注2:在计算前一轮得分时,应忽视上轮中规则Feral Hogs和规则Swine Swap的影响

    • 例1
      • 两玩家起始分数为(0, 0)
      • 玩家0投掷3枚骰子获得7分。(7, 0)
      • 玩家1投掷1枚骰子获得4分。(7, 4)
      • 玩家0投掷5枚骰子获得10分,5与7相差2,所以玩家0额外获得3分。(20, 4)
      • 玩家1投掷2枚骰子获得8分,2与4相差2,玩家1额外获得3分。(20, 15)
      • 玩家0投掷8枚骰子获得20分,8与10相差2,额外获得3分。(43, 15)
      • 玩家1投掷6枚骰子获得1分,6与8相差2,额外获得3分。(43, 19)
    • 例2
      • 两玩家起始分数为(0, 0)
      • 玩家0投掷2枚骰子获得3分,2与0相差2,额外获得3分。(6, 0)
  • 规则Swine Swap,本回合积分与本局得分相加后,若本局得分个位数与对方得分个位数之差的绝对值等于对方得分十位的数值,则应交换得分

  • 注:交换可能发生在玩家达到目标分数的回合结束时,导致对手获胜。

    • 例1,在本轮游戏中,第一位玩家结束其投掷后,两位玩家的分数为(6, 2),二者分数各位数字的差值为6 - 2 = 4,与第二位玩家分数的十位数字0不等,因此不作交换
    • 例2,在本轮游戏中,第一位玩家结束其投掷后,两位玩家的分数为(17, 65),二者分数各位数字的差值为7 - 5 = 2,与第二位玩家分数的十位数字6不等,因此不作交换
    • 例3,在本轮游戏中,第一位玩家结束其投掷后,两位玩家的分数为(55, 23),二者分数各位数字的差值为5 - 3 = 2,与第二位玩家分数的十位数字2相等,因此二者交换得分
    • 例4,在本轮游戏中,第一位玩家结束其投掷后,两位玩家的分数为(89, 54),二者分数各位数字的差值为9 - 4 = 5,与第二位玩家分数的十位数字5相等,因此二者交换得分

该课程要求分三个阶段完成,分别为模拟器、评论和游戏策略的实现,以下为各阶段完成的记录

阶段1:模拟器

阶段2:注释函数

阶段3:策略函数

GUI

CS61A的课程团队为学生制作了GUI,在完成了三个阶段的实现后可以运行,效果图如下所示

用户图形化界面
骰子投掷界面
骰子投掷界面
获胜结算界面获胜结算界面

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值