凯里大学作业攻略:轻松掌握专业提交步骤及伯克利CS61A项目实战指南

创始人
2024-12-24 10:08:19
0 次浏览
0 评论

国家开放大学大作业怎么做?

但是,对开放大学做出的重大贡献是这样介绍的:

以计算机为例:

如果你愿意为了更接近主要计算机的基础知识,您可能需要了解什么是内存、什么是CPU、它们的用途等等。
这一切都与计算机组成原理有关。
你会发现很多知识点都是相互关联的。

对于这些知识,无论你是学Java还是Python,无论是前端还是后端,只要你是程序员、码农、程序员,这些知识就是你。
需要,正如我之前所说,这是一个可以让你突破瓶颈、延伸知识上下限的东西。

如何在中国凯里大学提交专业作业?

第一步,在web程序中手动输入网站并按回车打开网站,按打开按钮进入后打开它。
注意,在这个程序中,只需用鼠标中键点击打开按钮即可打开cookie和网页。

下一步是报告并填写表格。
此时,您可以通过点击“手动添加”或“手动添加”来添加相关的用车记录。

然后是时候设置表单元素的数据填充方法了。
这时注意,可以通过程序自动随机生成,也可以选择使用CSV列表,AND表格或EXCEL表格中的数据就足够了。

然后需要开始自动连续填写表格。
下一步是选择自动连续并点击填写表格自动填写并提交。
最后保存步骤后,点击提交,会显示提交成功。

日拱一卒,伯克利太强了,手把手带你写一个植物大战僵尸

大家好,我是唐亮。
本文来源于公众号梁码。

今天我们在伯克利继续学习CS61A。
这次我们正在做课程的第二个主要任务。

这个项目非常有趣。
植物VS植物让我们创建一个类似于僵尸的小游戏。
它只是变成了蚂蚁与蜜蜂。
蜜蜂一波又一波地进攻。
为了抵御蜜蜂的攻击,你需要创造具有各种功能的蚂蚁。

全部完成后,执行效果如下:

讲座链接

原始项目文档

Github

这个项目并不是很难。
主要讲解Python的面向对象部分,教你如何设计类和使用类继承。

关键概念

殖民地:游戏发生的场景由多个隧道组成,每个隧道由一个网格(地点)组成。

p>

Place:网格,每个网格与其他网格相连,形成路径。
,玩家可以将蚂蚁放置在格子里,但是每个格子可以有多只蜜蜂。

蜂箱:蜂箱,蜜蜂的房子,蜜蜂从蜂巢里出来,来到蜂群

蚂蚁:蚂蚁是玩家在游戏中用来控制蜜蜂的士兵。
每种类型的蚂蚁每轮都可以执行特定的动作,并且需要一定量的食物来产生它们。
两种最基本的蚂蚁是**HarvesterAnt**,每轮可以收集1点食物,以及**ThrowerAnt**,每轮可以向蜜蜂投掷树叶。

蜜蜂:蜜蜂是我们在游戏中必须对付的敌人。
每一轮,如果没有蚂蚁挡住路径,蜜蜂就会向前移动一步。
否则,挡路的蚂蚁将受到攻击,当蜜蜂到达隧道尽头时,游戏就会结束。

QueenAnt:蚁后,每场游戏只有一只蚁后。
蚁后还具有攻击能力,可以鼓舞士气,增加其他蚂蚁的攻击力。
当蜜蜂杀死蜂王时,游戏结束。

玩游戏

有两种玩游戏的方法。
一种是基于用于开发和测试的文本命令行。

python3?ants.py

最后的演示,您还可以通过游戏界面运行游戏:

python3?gui.py?-d?easy?--food?10

-d控制难度测试/简单/普通/困难/疯狂

-w地图上是否有水

--foodstart食物数量

第一阶段游戏玩法

第一阶段实现基本蚂蚁(HarvesterAnt和ThrowerAnt)。

完成这些步骤后,您将能够运行游戏的最基本版本。

问题0

阅读代码并回答几个问题:

功能检查类中的装甲属性有哪些?游戏过程中会发生变化吗?如果发生变化,触发条件是什么?

Ant类有哪些属性?

Ant类的armor属性是类属性还是实例属性?为什么

为什么Ant的某些子类中的Damage属性是类属性或者实例属性?

Ant和Bee继承自哪些类?

Ant和Bee类实例有什么共同点?

某一时间某个地方可以出现多少只昆虫?

以命令行交互的形式您可以回答以下问题(原问题为英文):下载项目代码后,输入以下命令:

python3?ok?-q?00?-u

问题和选项以命令行文本格式显示,您可以通过键入选项来回答问题。

你的老师为每道题设置了测试样本,但你必须通过该题才能使用样本。
解锁测试样本和运行测试不需要身份验证,即使对于我们非伯克利学生来说也非常用户友好。

问题1

首先,添加食物成本并开发HarvesterAnt。

目前,生产蚂蚁不需要任何消耗,所以游戏一点也不难。
您可以看到Ant类的food_cost属性设置为0。
在以下子类中重写此属性并将其设置为正确的值:

ClassFoodCostArmorHarvesterAnt21ThrowerAnt31

现在生产蚂蚁需要花钱,所以你需要HarvesterAnt来收集食物。
通过开发HarvesterAnt类,您可以添加colony.food:

在开始开发之前,先回答问题并进行测试。
通过测试将解锁测试示例:

python3?ok?-q?01?-u

完成实现后,测试它:

python3?ok?-q?01答案

动作函数在每个回合和群体中被调用。
被召唤时,食物会增加。

class?HarvesterAnt:"""HarvesterAnt每回合可生产1个额外的食物。
""?name?=?'Harvester'已实现?=?truefood_cost?=?2def?action(self,?colony):?"""生产?1?添加?食物?为?COLONY.?殖民地?——?AntColony用于访问游戏状态信息。
?"""#?开始?问题?1"***?你的代码?这里?***"?colony.food?+=?1#?END?问题?1问题2目前只有退出(exit)。
已被记录,但如果能够记录入口就好了。
只有一个入口,因此蚂蚁可以分辨出哪些蜜蜂在它前面

但是简单地将一项传递给构造函数是有问题的,因为这需要循环依赖,因此我们使用以下方法来实现。
解决这个问题:

新创建的地点没有入口。

该地点没有出口(如果有),将出口项设置为该位置。

提示:

在__init__函数中,self绑定了当前对象。

如果你感到困惑,你可以先在GUI中画出两个地方,该位置是正确的位置。
出口在左侧。

在开始编码之前,请先回答问题以确保您理解。

python3?ok?-q?02?-u

End完成后,下一步使用命令测试一下:

python3?ok?-q?02答

exit是从外界传入的,只需将exit.entrance设置为self即当前位置即可。

class?Place(object):"""A?Place容纳昆虫并有一个通往另一个位置的出口。
"""def?__init__(self,?name,?exit=None):?"""使用给定的“NAME”和“EX”创建一个“地点”IT.名称?--?A?字符串;?此地点的名称。
?退出?--?地点?到达?通过?退出?这里?地点?(可能?无).?"""?self.name?=?name?self.exit?=?退出self.bees?=?[]#?A?list?beeself.ant?=?无?#?An?Antself.entrance?=?无#?A?Place#?Phase?1:?Add?an退出?#?BEGIN?ISSUE?2“***?你的代码?在这里?***”?if?self.退出?是?无:self.exit.entrance?=?self#?END?问题?2问题3

现在我们实现ThrowerAnt类。
首先您需要知道要攻击哪只蜜蜂。
原始版本的代码的Nearest_bee方法仅攻击与ThrowerAnt最接近的同一网格中的蜜蜂。
修改为对蜜蜂使用throw_at方法。

nearest_bee方法将蜜蜂随机返回到最近的网格。

从ThrowerAnt当前所在的位置开始移动。

对于每个位置,如果有蜜蜂,则返回任何蜜蜂,否则检查之前的位置(入口)。

如果没有要攻击的蜜蜂,则返回None。
返回。

提示:

random_or_none`函数可以随机返回元素,如果序列为空则返回“none”。

在开始开发之前,请确保通过回答问题确保你完全理解

python3?gui.py?-d?easy?--food?100

开发完成后测试:

python3?gui.py?-d?easy?--food?101

测试通过后即可模拟效果。

python3?gui.py?-d?easy?--food?102

效果是:

通过while循环,我们搜索该位置,直到该位置有一只蜜蜂,然后随机返回一只。

python3?gui.py?-d?easy?--food?103Phase2AntsAttack

现在我们已经开发了种最基本的蚂蚁类型,我们可以玩最基本的游戏了。
多于。

在这个阶段,您将开发更多具有不同技能的蚂蚁类型。
完成Ant子类的开发后,如果您想在GUI中使用它,则需要将其实现的属性更改为True。
完成后,您可以对每种新的蚂蚁类型进行游戏测试。

此开发阶段完成后,您可以使用python3gui.py-deasy命令使用当前的蚂蚁类型来击退大群蜜蜂。
您还可以使用-dnormal、-dhard或-dinsane尝试更高的难度。
如果你发现很难获胜,你可能需要培养更多种类的蚂蚁。

问题4

ThrowerAnt是一个很好的攻击单位,但是如果能便宜点就更好了。
开发ThrowerAnt的两个子类,成本较低,但投掷距离有限。

LongThrower只能投掷距离大于或等于5的蜜蜂。
对于距离为4或更小的蜜蜂,您无能为力。
如果出现多只蜜蜂,则只有距离满足条件的蜜蜂才会攻击。

短距离投掷器只能投掷距离较短的蜜蜂。
3个或更多。

以上两只蜜蜂都无法攻击距离正好为4的蜜蜂,仅靠一只蜜蜂攻击是不可能获胜的。

ClassFoodCostArmorShortThrower21LongThrower21

更好的实现方法是是:它们从ThrowerAnt类继承了Nearest_bee方法。
这是因为ShortThrower和LongThrower选择攻击目标的逻辑相同,只是它们有最大和最小距离限制。

因此要仅返回范围内的蜜蜂,需要修改ThrowerAnt的Nearest_bee方法以使用min_range和max_range属性。

原始ThrowerAnt没有范围限制,因此需要添加:应用其min_range和max_range属性,这样它们就不会影响ThrowerAnt,然后为您的子类LongThrower和ShortThrower设置适当的胃和食物开销。

提示

float('inf')返回一个代表无穷大的浮点数,该数字大于另一个数字。

不要忘记添加将LongThrower和ShortThower的实现属性设置为True

开始开发前完成测试:

python3?gui.py?-d?easy?--food?104

完成后测试:

python3?gui.py?-d?easy?--food?105回答

父类不改变子类这意味着您可以修改类ThrowerAnt以确保父类的作用域不受限制并支持作用域要求,从而使父类的功能不会改变。
子类。

通过在子类中设置合适的作用域,就不需要重复实现Nearest_bee方法,只需修改配置即可实现该功能

python3?gui.py?-d?Is容易吗?--食物106有问题吗?em5

实现FireAnt类。
FireAnt类有一个特殊的方法,Reduce_armor。
当火蚁的护甲值降低至0或更低时,它会攻击同一网格上的所有蜜蜂,从而减少其护甲值的伤害。

ClassFoodCostArmorFireAnt51

提示:

攻击蜜蜂会杀死它并将其从站点中删除。
如果连续遍历列表并删除其内容,可能会出现错误。

因此,Python官方教程指出,如果需要不断修改序列(例如复制/删除选定的元素等),最好先复制序列。
您可以通过调用列表构造函数或使用[:]之类的切片来完成复制。

完成开发后将实现设置为True。

在测试之前。
问题。
为了确保您正确理解

python3?gui.py?-d?easy?--food?107

开发后测试:

python3?gui。
py?-d?easy?--food?108答案

当护甲值低于0时,同一格子内的所有蜜蜂都会受到攻击。
Place.bees会发生变化,因为攻击蜜蜂会导致其死亡。
所以你首先要复制序列,然后攻击副本中的蜜蜂。

python3?gui.py?-d?easy?--food?109

FireAnt可以和传统蚂蚁玩一两局,并且具有很高的伤害和灵活性。
使用python3?gui.py?-d?easy?--food?102实现HungryAnt并不难问题6

或者,饥饿的蚂蚁捕食蜜蜂。
相同的网格。
吞下蜜蜂后,需要经过三个阶段的消化才能再次被吞下。

ClassFoodCostArmorHungryAnt41

将time_to_digest类属性添加到HungryAnt类。
这代表HungryAnt吞咽后需要消化的回合数。
同样,要向HungryAnt添加一个处理标签的实例属性,您将需要以下内容:熄灭计数(默认为0,因为它最初没有被吞下)

实现一个动作函数来检查它是否正在熄灭。
如果是这样,请降低消化值。
否则,随机选择同一格子上的一只蜜蜂并吃掉它(将蜜蜂的护甲设置为0并重置其消化)。

正确在编码之前回答问题以方便理解。

python3?ok?-q?00?-u1

然后测试它:

python3?ok?-q?00?-u2解答

注意类属性和实例属性的区别

python3?ok?-q?00?-u3问题7

开发一只忍者蚂蚁,它会攻击所有路过的蜜蜂并且不会被蜇伤。

ClassFoodCostArmorNinjaAnt51

NinjaAnt不会阻碍蜜蜂的前进。
为了实现这一点,我们需要向Ant类添加一个新的类属性block_path来指示我们是否要阻止蜜蜂的前进。
蚂蚁。
在这种情况下,从Ant继承的子类默认将“NinjaAnt”设置为False。

其次,如果没有蚂蚁阻挡道路或者有块路径阻挡道路,我们希望Bee返回False。
修复.把蚂蚁拒之门外的想法是一个谎言。
在这种情况下,蜜蜂将飞过忍者蚂蚁。

最后,我们希望NinjaAnt攻击所有飞行的蜜蜂。
在你的动作函数中实现这个函数,这样你就可以攻击同一网格中的所有蜜蜂。
和FireAnt一样,我们需要遍历可能变化的序列,所以需要先复制它们。

开发前的答案:

python3?ok?-q?00?-u4

开发后测试:

python3?ok?-q?00?-u5

仅使用HarvestAnt和NinjaAnt即可获胜。

回答python3?ok?-q?00?-u6Phase3:ButTheyAlsoProtect

现在我们有很多攻击方法,我们还需要开发一些防御机制。

现阶段我们会开发一些具有防御功能的蚂蚁,比如增加自身的防御力或者保护自己的战友。

问题8

我们计划开发WallAnt来保护蚂蚁王国。
这些蚂蚁每回合都不做任何事情,它们只是具有很高的防御力,类似于植物大战僵尸中的坚果。

ClassFoodCostArmorWallAnt44

与之前的ant不同,它不提供该类的初始代码。

您必须从头开始实现WallAnt,将类的name属性设置为Wall,并将Implemented设置为True,图像才能正常显示。

开发前回答问题:

python3?ok?-q?00?-u7

开发后测试:

python3?ok?-q?00?-u8解答

实现WallAnt,继承自Ant,设置其参数,通过调用父类的构造函数来设置装甲(可以参考其他可能的类)。
)。

python3?ok?-q?00?-u9问题9

除了WallAnt之外,我们的蚂蚁太脆弱了,所以我们想开发可以保护蚂蚁的BodyguardAnt。

ClassFoodCostArmorBodyguardAnt42

BodyguardAnt与普通蚂蚁的不同之处在于它是一个容器。
它们可以在同一个地方容纳和保护其他蚂蚁。
当蜜蜂攻击时,只有容器受到攻击。

容器中的蚂蚁每轮都可以执行任务。
即使容器被摧毁,受保护的蚂蚁仍然存在。

每个BodyguardAnt都有一个实例属性ant,用于存储受保护的ant。
最初,它是“无”,因为蚂蚁未受到保护。
实现一个contains_ant函数,传递一个ant来指示要保护的ant应该分配给ant属性。
此外,我们还实现了BodyguardAnt的action方法来执行受保护蚂蚁的操作。

您还需要进行以下更改,以便容器和它包含的蚂蚁占据相同的网格:在每个网格中最多可以有两只蚂蚁,其中一只必须是容器。

要指示特定的Ant子类是否是容器,请添加Ant.container类属性。
对于除BodyguardAnt之外的所有Ant子类都必须为False,而除BodyguardAnt之外的所有子类都为True。

实现Ant.can_contain方法,该方法接收另一个参数,如果满足以下条件则返回True:

当前蚂蚁是一个容器

当前蚂蚁不能容纳蚂蚁

其他蚂蚁不是容器

otherAnt不是容器。

修改Place.add_insect函数以与容器情况兼容。
此函数采用昆虫参数来表示要放置在该位置的昆虫。
情况:

当前网格中有一只蚂蚁,它接受传递给add_insect函数的插入,然后蚂蚁就可以接受插入。

插入物是如果它是一个容器,它可以容纳蚂蚁。
设置当前要检查的网格和地点。

如果不满足上述条件,则会引发AssertionError异常。

编码前回答:

python3?ok?-q?01?-u0

开发后测试:

python3?ok?-q?01?-u1答案python3?ok?-q?01?-u2问题10

BodyguardAnt提供了良好的防御,但俗话说,最好的防御就是进攻。

除了提供保护之外,TankAnt每轮还能对同一网格上的蜜蜂造成1点伤害。

ClassFoodCostArmorTankAnt62

只能修改。
如果您需要修改TankAnt中其他地方的代码,则意味着您之前的实现可能存在问题。
找到一种方法来完成TankAnt的功能而不修改以前的代码。

答案:

python3?ok?-q?01?-u3

开发后测试:

python3?ok?-q?01?-u4答案python3?ok?-q?01?-u5Phase4:WaterandMight

在这最后一步中,我们需要开发一种新的网格类型和蚂蚁会用它。

这些蚂蚁中最重要的类型是蚁后。

问题11

让我们给蚂蚁王国添加草。
现在我们只有两个网格:Hive和Place。
让我们开发新形式的水,让游戏变得更有趣。

只有安全的蚂蚁才能在游泳池中生存。
要判断昆虫是否具有在水中生存的能力,需要在Insect类中添加watersafe类属性。
默认设置为False。

蜜蜂的水安全是事实,因为蜜蜂会飞。

为Water类开发add_insect方法。
首先,通过调用Place.add_insect方法添加昆虫。
此阶段无需考虑昆虫的生存能力。
如果昆虫不防水,则调用Reduce_armor方法将昆虫的护甲值降低到0。
不要复制和粘贴代码;使用已经开发的代码。

开发前回答问题:

python3?ok?-q?01?-u6

开发后测试:

python3?ok?-q?01?-u7

完成开发后,您可以使用--water参数打开水池。

python3?ok?-q?01?-u8解答

在Water类中,可以通过调用Place的函数来完成功能,这样可以复用代码。
尽量。

不要忘记为该子类设置水安全属性

python3?ok?-q?01?-u9问题12

没有更多了'不存在。
蚂蚁需要进入水中才能生存。
开发ScubaThrower蚂蚁,它是ThrowerAnt的子类,价格更昂贵,但可以在水中生存。
然而,与基类不同,ScubaThrower蚂蚁在水中不会失去盔甲(蜜蜂无法在水下攻击)。

ClassFoodCostArmorScubaThrower61

我们不提供此类的初始代码,因此您必须从头开始完成它。

热门文章
1
Python编程入门:全面解析Pytho... python的基本语法基本的Python语法如下:1.变量的定义。在编程语言中,...

2
Python字典操作全解析:添加、修改、... Pythondict字典基本操作(包括添加、修改、删除键...

3
Python错误处理与异常处理:构建稳定... 2.5错误处理与异常在编程领域,错误处理和异常处理是保证程序稳定性和健壮性的关键...

4
Python数据转换攻略:字符串、列表、... Python字典、字符串及列表的相互转换Python中数据转换的艺术:从字典和字...

5
Python列表相加与求和技巧解析 重温python基础:列表相加的方法(两个list[]加法)今天,我们来看看Py...

6
Python运行快捷键大揭秘:高效操作,... python运行按哪个键运行Python时的快捷键包括Ctrl+Shift+F1...

7
Python字符与数字互转攻略:轻松掌握... python 字符与数字如何转换Python是一种功能强大且结...

8
Python字符串转列表:两种常用方法解... python怎么将字符串转换为列表Python中将字符串转换为列表的方法有多种,...

9
Python字符串转列表:两种常用方法解... python怎么将字符串转换为列表在Python中将字符串转换为列表的方法有很多...

10
Python列表转字符串全攻略:掌握四种... Python列表到字符串–如何在Python中转换列表在Python中,将列表转...