当前位置:首页|资讯

自学CS61A Project1 Hog(核心篇)(第三期)

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

前言

我是愚谷ノ園みら,简称愚園みら,本账号的使用者之一的负责分享学习笔记的oc,呃话说oc真的应该干涉现实事务吗?总之,みら最近开始学习CS61A。打算记一点笔记激励自己学下去。


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


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

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


话说这个前言真就三期都不改了吗?


总之是正文

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

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

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

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

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

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


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

第一期

本篇内容是在理解规则的基础上!以及,已经写完了第二篇里的那些基础函数!


第五题!

(由于第五题的题目描述实在很长,我懒得翻译或者照抄,故写一些个人认为比较重点的内容)

在这题中,我们需要写一个叫做`play`的函数,模拟完整的游戏。先到达`goal`的玩家获得胜利。(假设两个玩家为玩家0和玩家1,score是score0和score1的话,score0 和 score1都小于goal时继续游戏。)

策略(strategy)是一个函数。输入自己和对手的分数,返回这回合自己打算投的骰子数量。(毕竟,在这个游戏里,只有骰子数量这一个玩家可以控制的变量)。

只要游戏还在继续,轮到每个玩家的时候,都会调用自己的策略函数,再通过策略函数的输出值,确定自己该如何调用记分函数。所有记分结束后,再判定是否“游戏结束”。重复以往。


课件给出的`play`函数框架中,已经指定了输入:

function strategy0,(玩家0的策略函数)

function strategy1,(玩家1的策略函数)

function update,(更新记分的规则)

int score0=0,(玩家0的初始分数)

int score1=0,(玩家1的初始分数)

function dice=six_sided,(骰子类型,默认六面)

int goal=GOAL(目标分)


函数里面还定义了一个变量who=0,表示当前回合的玩家编号。

who = 1 - who可以用于切换玩家。


我的思路是这样的:

首先,我需要读取当前玩家的分数、对手分数、玩家策略。

因此,我定义了

`current_strategy(who)`

`current_score`

`opponent_score`

这三个函数。

之后,再定义了一个通用的

`update_score`函数,输入who,输出对应的分数。


然后是主体部分:通过while循环,直到有一方分数达标为止,都继续运行游戏。

最后输出终局时的双方分数(是作业要求)


补充说明:在学到list和tuple之后,我觉得这段代码还是有不少优化空间的。


代码的实现如下:

以上就是这一题


现在,我们其实差不多已经算是做好了一个游戏了(大概)。

原因是,课件里已经提供了基于命令行的UI和GUI。


在命令行里,输入`python3 hog_gui.py`就能用GUI玩了。


之后如果有机会,我想我是会专门写一篇文章分析UI是怎么写成的。但在此之前,Hog的第一部分就到此结束了~



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