凯里大学作业攻略:轻松掌握专业提交步骤及伯克利CS61A项目实战指南
国家开放大学大作业怎么做?
但是,对开放大学做出的重大贡献是这样介绍的:
以计算机为例:
如果你愿意为了更接近主要计算机的基础知识,您可能需要了解什么是内存、什么是CPU、它们的用途等等。
这一切都与计算机组成原理有关。
你会发现很多知识点都是相互关联的。
对于这些知识,无论你是学Java还是Python,无论是前端还是后端,只要你是程序员、码农、程序员,这些知识就是你。
需要,正如我之前所说,这是一个可以让你突破瓶颈、延伸知识上下限的东西。
如何在中国凯里大学提交专业作业?
第一步,在web程序中手动输入网站并按回车打开网站,按打开按钮进入后打开它。
注意,在这个程序中,只需用鼠标中键点击打开按钮即可打开cookie和网页。
下一步是报告并填写表格。
此时,您可以通过点击“手动添加”或“手动添加”来添加相关的用车记录。
然后是时候设置表单元素的数据填充方法了。
这时注意,可以通过程序自动随机生成,也可以选择使用CSV列表,AND表格或EXCEL表格中的数据就足够了。
然后需要开始自动连续填写表格。
下一步是选择自动连续并点击填写表格自动填写并提交。
最后保存步骤后,点击提交,会显示提交成功。
日拱一卒,伯克利太强了,手把手带你写一个植物大战僵尸
大家好,我是唐亮。
本文来源于公众号梁码。
今天我们在伯克利继续学习CS61A。
这次我们正在做课程的第二个主要任务。
这个项目非常有趣。
植物VS植物让我们创建一个类似于僵尸的小游戏。
它只是变成了蚂蚁与蜜蜂。
蜜蜂一波又一波地进攻。
为了抵御蜜蜂的攻击,你需要创造具有各种功能的蚂蚁。
全部完成后,执行效果如下:
讲座链接
原始项目文档
Github
这个项目并不是很难。
主要讲解Python的面向对象部分,教你如何设计类和使用类继承。
殖民地:游戏发生的场景由多个隧道组成,每个隧道由一个网格(地点)组成。
Place:网格,每个网格与其他网格相连,形成路径。
,玩家可以将蚂蚁放置在格子里,但是每个格子可以有多只蜜蜂。
蜂箱:蜂箱,蜜蜂的房子,蜜蜂从蜂巢里出来,来到蜂群
蚂蚁:蚂蚁是玩家在游戏中用来控制蜜蜂的士兵。
每种类型的蚂蚁每轮都可以执行特定的动作,并且需要一定量的食物来产生它们。
两种最基本的蚂蚁是**HarvesterAnt**,每轮可以收集1点食物,以及**ThrowerAnt**,每轮可以向蜜蜂投掷树叶。
蜜蜂:蜜蜂是我们在游戏中必须对付的敌人。
每一轮,如果没有蚂蚁挡住路径,蜜蜂就会向前移动一步。
否则,挡路的蚂蚁将受到攻击,当蜜蜂到达隧道尽头时,游戏就会结束。
QueenAnt:蚁后,每场游戏只有一只蚁后。
蚁后还具有攻击能力,可以鼓舞士气,增加其他蚂蚁的攻击力。
当蜜蜂杀死蜂王时,游戏结束。
有两种玩游戏的方法。
一种是基于用于开发和测试的文本命令行。
最后的演示,您还可以通过游戏界面运行游戏:
python3?gui.py?-d?easy?--food?10-d控制难度测试/简单/普通/困难/疯狂
-w地图上是否有水
--foodstart食物数量
第一阶段游戏玩法第一阶段实现基本蚂蚁(HarvesterAnt和ThrowerAnt)。
完成这些步骤后,您将能够运行游戏的最基本版本。
阅读代码并回答几个问题:
功能检查类中的装甲属性有哪些?游戏过程中会发生变化吗?如果发生变化,触发条件是什么?
Ant类有哪些属性?
Ant类的armor属性是类属性还是实例属性?为什么
为什么Ant的某些子类中的Damage属性是类属性或者实例属性?
Ant和Bee继承自哪些类?
Ant和Bee类实例有什么共同点?
某一时间某个地方可以出现多少只昆虫?
以命令行交互的形式您可以回答以下问题(原问题为英文):下载项目代码后,输入以下命令:
python3?ok?-q?00?-u问题和选项以命令行文本格式显示,您可以通过键入选项来回答问题。
你的老师为每道题设置了测试样本,但你必须通过该题才能使用样本。
解锁测试样本和运行测试不需要身份验证,即使对于我们非伯克利学生来说也非常用户友好。
首先,添加食物成本并开发HarvesterAnt。
目前,生产蚂蚁不需要任何消耗,所以游戏一点也不难。
您可以看到Ant类的food_cost属性设置为0。
在以下子类中重写此属性并将其设置为正确的值:
现在生产蚂蚁需要花钱,所以你需要HarvesterAnt来收集食物。
通过开发HarvesterAnt类,您可以添加colony.food:
在开始开发之前,先回答问题并进行测试。
通过测试将解锁测试示例:
完成实现后,测试它:
python3?ok?-q?01答案动作函数在每个回合和群体中被调用。
被召唤时,食物会增加。
""?name?=?'Harvester'已实现?=?truefood_cost?=?2def?action(self,?colony):?"""生产?1?添加?食物?为?COLONY.?殖民地?——?AntColony用于访问游戏状态信息。
?"""#?开始?问题?1"***?你的代码?这里?***"?colony.food?+=?1#?END?问题?1问题2目前只有退出(exit)。
已被记录,但如果能够记录入口就好了。
只有一个入口,因此蚂蚁可以分辨出哪些蜜蜂在它前面
但是简单地将一项传递给构造函数是有问题的,因为这需要循环依赖,因此我们使用以下方法来实现。
解决这个问题:
新创建的地点没有入口。
该地点没有出口(如果有),将出口项设置为该位置。
提示:
在__init__函数中,self绑定了当前对象。
如果你感到困惑,你可以先在GUI中画出两个地方,该位置是正确的位置。
出口在左侧。
在开始编码之前,请先回答问题以确保您理解。
End完成后,下一步使用命令测试一下:
python3?ok?-q?02答exit是从外界传入的,只需将exit.entrance设置为self即当前位置即可。
"""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测试通过后即可模拟效果。
效果是:
答通过while循环,我们搜索该位置,直到该位置有一只蜜蜂,然后随机返回一只。
现在我们已经开发了种最基本的蚂蚁类型,我们可以玩最基本的游戏了。
多于。
在这个阶段,您将开发更多具有不同技能的蚂蚁类型。
完成Ant子类的开发后,如果您想在GUI中使用它,则需要将其实现的属性更改为True。
完成后,您可以对每种新的蚂蚁类型进行游戏测试。
此开发阶段完成后,您可以使用python3gui.py-deasy命令使用当前的蚂蚁类型来击退大群蜜蜂。
您还可以使用-dnormal、-dhard或-dinsane尝试更高的难度。
如果你发现很难获胜,你可能需要培养更多种类的蚂蚁。
ThrowerAnt是一个很好的攻击单位,但是如果能便宜点就更好了。
开发ThrowerAnt的两个子类,成本较低,但投掷距离有限。
LongThrower只能投掷距离大于或等于5的蜜蜂。
对于距离为4或更小的蜜蜂,您无能为力。
如果出现多只蜜蜂,则只有距离满足条件的蜜蜂才会攻击。
短距离投掷器只能投掷距离较短的蜜蜂。
3个或更多。
以上两只蜜蜂都无法攻击距离正好为4的蜜蜂,仅靠一只蜜蜂攻击是不可能获胜的。
更好的实现方法是是:它们从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或更低时,它会攻击同一网格上的所有蜜蜂,从而减少其护甲值的伤害。
。
提示:
攻击蜜蜂会杀死它并将其从站点中删除。
如果连续遍历列表并删除其内容,可能会出现错误。
因此,Python官方教程指出,如果需要不断修改序列(例如复制/删除选定的元素等),最好先复制序列。
您可以通过调用列表构造函数或使用[:]之类的切片来完成复制。
完成开发后将实现设置为True。
在测试之前。
问题。
为了确保您正确理解
开发后测试:
python3?gui。py?-d?easy?--food?108答案
当护甲值低于0时,同一格子内的所有蜜蜂都会受到攻击。
Place.bees会发生变化,因为攻击蜜蜂会导致其死亡。
所以你首先要复制序列,然后攻击副本中的蜜蜂。
FireAnt可以和传统蚂蚁玩一两局,并且具有很高的伤害和灵活性。
使用python3?gui.py?-d?easy?--food?102实现HungryAnt并不难问题6
或者,饥饿的蚂蚁捕食蜜蜂。
相同的网格。
吞下蜜蜂后,需要经过三个阶段的消化才能再次被吞下。
将time_to_digest类属性添加到HungryAnt类。
这代表HungryAnt吞咽后需要消化的回合数。
同样,要向HungryAnt添加一个处理标签的实例属性,您将需要以下内容:熄灭计数(默认为0,因为它最初没有被吞下)
实现一个动作函数来检查它是否正在熄灭。
如果是这样,请降低消化值。
否则,随机选择同一格子上的一只蜜蜂并吃掉它(将蜜蜂的护甲设置为0并重置其消化)。
正确在编码之前回答问题以方便理解。
然后测试它:
python3?ok?-q?00?-u2解答注意类属性和实例属性的区别
python3?ok?-q?00?-u3问题7开发一只忍者蚂蚁,它会攻击所有路过的蜜蜂并且不会被蜇伤。
NinjaAnt不会阻碍蜜蜂的前进。
为了实现这一点,我们需要向Ant类添加一个新的类属性block_path来指示我们是否要阻止蜜蜂的前进。
蚂蚁。
在这种情况下,从Ant继承的子类默认将“NinjaAnt”设置为False。
其次,如果没有蚂蚁阻挡道路或者有块路径阻挡道路,我们希望Bee返回False。
修复.把蚂蚁拒之门外的想法是一个谎言。
在这种情况下,蜜蜂将飞过忍者蚂蚁。
最后,我们希望NinjaAnt攻击所有飞行的蜜蜂。
在你的动作函数中实现这个函数,这样你就可以攻击同一网格中的所有蜜蜂。
和FireAnt一样,我们需要遍历可能变化的序列,所以需要先复制它们。
开发前的答案:
python3?ok?-q?00?-u4开发后测试:
python3?ok?-q?00?-u5仅使用HarvestAnt和NinjaAnt即可获胜。
现在我们有很多攻击方法,我们还需要开发一些防御机制。
现阶段我们会开发一些具有防御功能的蚂蚁,比如增加自身的防御力或者保护自己的战友。
我们计划开发WallAnt来保护蚂蚁王国。
这些蚂蚁每回合都不做任何事情,它们只是具有很高的防御力,类似于植物大战僵尸中的坚果。
。
与之前的ant不同,它不提供该类的初始代码。
您必须从头开始实现WallAnt,将类的name属性设置为Wall,并将Implemented设置为True,图像才能正常显示。
开发前回答问题:
python3?ok?-q?00?-u7开发后测试:
python3?ok?-q?00?-u8解答实现WallAnt,继承自Ant,设置其参数,通过调用父类的构造函数来设置装甲(可以参考其他可能的类)。
)。
除了WallAnt之外,我们的蚂蚁太脆弱了,所以我们想开发可以保护蚂蚁的BodyguardAnt。
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问题10BodyguardAnt提供了良好的防御,但俗话说,最好的防御就是进攻。
除了提供保护之外,TankAnt每轮还能对同一网格上的蜜蜂造成1点伤害。
只能修改。
如果您需要修改TankAnt中其他地方的代码,则意味着您之前的实现可能存在问题。
找到一种方法来完成TankAnt的功能而不修改以前的代码。
答案:
python3?ok?-q?01?-u3开发后测试:
python3?ok?-q?01?-u4答案python3?ok?-q?01?-u5Phase4:WaterandMight在这最后一步中,我们需要开发一种新的网格类型和蚂蚁会用它。
这些蚂蚁中最重要的类型是蚁后。
让我们给蚂蚁王国添加草。
现在我们只有两个网格: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参数打开水池。
在Water类中,可以通过调用Place的函数来完成功能,这样可以复用代码。
尽量。
不要忘记为该子类设置水安全属性
python3?ok?-q?01?-u9问题12没有更多了'不存在。
蚂蚁需要进入水中才能生存。
开发ScubaThrower蚂蚁,它是ThrowerAnt的子类,价格更昂贵,但可以在水中生存。
然而,与基类不同,ScubaThrower蚂蚁在水中不会失去盔甲(蜜蜂无法在水下攻击)。
我们不提供此类的初始代码,因此您必须从头开始完成它。