当前位置:首页|资讯

自学CS61A Project1 Hog(策略篇)(第二期)

作者:翻车水王汪轓发布时间:2024-10-18

前言

我是愚谷ノ園みら,简称愚園みら,本账号的使用者之一的负责分享学习笔记的oc。啊,我不会干涉各位号主们的其他事物,只会默默在专栏文件夹里发CS/AI相关的学习笔记。


总之,みら最近开始学习CS61A。打算记一点笔记激励自己学下去!


这才第一个项目,已经有点想放弃了……


加油!最后三题了!


啊,忘了说的CS61A是一门CS相关的课?总之是UC Berkeley的CS入门课。嘛反正点开这篇文章的人应该不需要我来介绍CS61A是什么了(大概……)


以下部分都是基于已经装完环境,下载了相关课件,并且会使用ok进行评分的假设。

其实我也没怎么认真看课和课件,英语让人头大。


我也是初学者,请多包涵~如有错误,敬请斧正!


总之是正文

因为很懒,我将会把这一段东西再重新,呃,再复制粘贴第四遍。

CS61A的第一个project是要制作一个叫hog的小游戏。以下是一些关于这个project的一些碎碎念,希望能帮到有需要的同学们。

详情请参考:https://cs61a.org/proj/hog/

这是Hog项目的主要网站(作业要求),本文之后的内容将会围绕这里的题目。

以及课程课本的翻译件:https://composingprograms.netlify.app/

非常好课本,使我的理解加深十倍甚至九倍。


如果把Hog的规则和追加规则也写进来的话,太长了,恕我贴一下第一篇的链接,请诸君自己看一看~


本篇内容是在理解规则,并且写完了游戏模拟器(核心?)部分的基础上!如果还记得在这里“策略”是什么意思就更好了!虽说接下来马上就会又提到的。


回顾:上一期我们做了什么?


上一期里我们完成了一个最基础的策略:`always_roll(6)`

这个参数6的决定,花了三道题!


那么这一期我们要继续改进我们的策略,具体来说就是加上追加规则的策略。


第十题:`boar_strategy`策略


本函数将考虑Boar Brawl的规则。


回忆:Boar Brawl的规则是,如果玩家选择投掷0个骰子,则获得对手分数的十位数与自己分数的个位数之差的绝对值的三倍。若这个数为0,则获得1分。


思路是这样的:如果投掷0个骰子触发Boar Brawl的收益大于等于某阈值,则选择投掷0个骰子;否则,维持原本策略。


回忆:我们在第二题(本系列第二篇文章)中定义了`boar_brawl`函数,作用是计算当前条件下触发Boar Brawl的得分。我们可以直接调用这个函数用于判断。


本函数的输入(题目给出):

我方分数和对手分数(用于计算Boar Brawl得分)

阈值(默认为11)

策略默认投掷数(默认为6)


输出:投掷骰子数量(0或默认数)


代码如下:


第十一题:`sus_strategy`策略


如果我们能利用Sus Fuss规则就更好了。应该说,考虑了Sus Fuss之后,才是完整的规则。


回忆:Sus Fuss规则是,如果结算时,玩家的分数有3或4个因数(包括自身与1),则分数自动增长到下一个质数。


虽然自然地投掷骰子并不能保证我们的分数到达某个Sus数(即,有3或4个因数的数),但是利用Boar Brawl是可以的,因为后者的得分是可计算的。


举例(来自作业说明):

若玩家现在有53分,对手60分,则投掷0个骰子的得分是9分。这个数比阈值11要小,所以按照常理,不会投掷0个去特意触发Boar Brawl。

但是因为Sus Fuss规则,53+9=62是Sus数,所以分数会自动提升到下一个质数67。实际得分是14分,大于阈值。


与上一题类似,我们可以调用`sus_points`函数完成任务。


需要注意的是,由于Sus Fuss规则在本回合骰子结算之后触发,`sus_points`返回值并非分数的上升量而是分数本身。因此,这一回,比较的对象应该是`sus_points`和分数+阈值。


本函数的输入(题目给出):

我方分数和对手分数(用于计算Boar Brawl得分)

阈值(默认为11)

策略默认投掷数(默认为6)


输出:投掷骰子数量(0或默认数)


代码如下:

使用这一策略与始终投掷6个对比,可以有67%~69%的胜率。


第十二题:最终策略


实际上现在的策略还是非常不完善的。作业要求中给出了一些提示,比如,如果我方分数接近目标分,且投掷骰子数为0必赢,则可以考虑投0个。


对比baseline(一直投6个),作业提示版改进策略能有70%~73%的胜率。


目前我似乎想不到有什么新的方法了。



Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1