Open GengarQ opened 2 years ago
请具体解释一下考查的知识点,需要展示提供的代码核心部分 另外请注意两件事:
请具体解释一下考查的知识点,需要展示提供的代码核心部分 另外请注意两件事:
- 尽量不要在输入输出中出现中文,不同系统下默认编码不同,中文检测可能不太正常
- OOP主要考察设计模式和对象的封装,复杂的应用逻辑不是我们的考点,可以考虑适当简化
好的,谢谢助教,我会按照要求修改的。请问现在算proposal通过可以继续出题了吗,还是说需要重新提交proposal,因为proposal的ddl是明天,我怕难以完成相对全面的工作...
目前还不确定这题符合我们的要求。你可以继续修改,在下周末前通过即可。但其中可能会有若干次的讨论,这些讨论最好在下周末前结束,所以还是尽早比较好。
目前还不确定这题符合我们的要求。你可以继续修改,在下周末前通过即可。但其中可能会有若干次的讨论,这些讨论最好在下周末前结束,所以还是尽早比较好。
好的没问题,谢谢助教。
目前还不确定这题符合我们的要求。你可以继续修改,在下周末前通过即可。但其中可能会有若干次的讨论,这些讨论最好在下周末前结束,所以还是尽早比较好。
助教好,我把题目基本完成了,请问可以加一下微信交流吗?
如果对题目有进一步讨论,可以就在issue里交流。我的微信号和github一致,hzhwcmhf
类对象的创建与销毁、类的组合与继承、虚函数与多态、STL容器
小明和李华很喜欢玩精灵宝可梦(Pokemon),他们在学习了OOP相关知识后,希望能自己模拟出一些简单的宝可梦对战情景。宝可梦对战(本题中仅说明1v1单打对战)规则的简要描述如下:
双方各派出一只宝可梦,每个宝可梦都有自己的HP值(初始为满),每回合结束后,若一方HP值为0,则判定该方被击败,对战结束。
每只宝可梦均有自己的属性(type)
和技能(move)
(技能也有属性),出于简化考虑,本题仅考虑攻击技能(即:所有技能的作用均是给对方造成伤害),若攻击技能的属性克制对方宝可梦的属性,该技能伤害翻倍,若被对方属性所抵抗,则伤害减半,若被对方属性所免疫,则不造成伤害。并伴随相应输出(详细参见示例)。属性相克表已给出(事实上,你并不需要这张表,因为本题已将属性相克关系存储在容器中,你只需要利用它构建出正确的映射)。
每只宝可梦均可携带道具(item)
,出于简化考虑,道具仅分为回复道具、攻击道具。回复道具可以在每回合结束后给宝可梦回复HP,攻击道具可以增加宝可梦的技能伤害(在使用技能时)。这两种道具均有可能是消耗型的,即仅可使用一次,消耗后,道具将被销毁,并在之后的回合中无法使用。题目已给出道具基类Item
,你需要完成这两种派生类的定义。
(其他细节参见代码注释和样例解释)
name
,属性type
,初始体力值HP
,技能数量n
。item_name
。s1
(0表示回复道具,1表示攻击道具),类型代号s2
(0表示消耗道具,1表示非消耗道具)回复比例(或提高伤害比例)rate
(double型)。move_name
(单独占一行),随后一行依次是技能伤害值harm
,技能属性type
。m1 m2
,中间用空格隔开。Pikachu 400 Electric 2 Life Orb 1 1 0.3 Thunderbolt 90 Electric
Iron Tail 90 Steel Blastoise 540 Water 4 Leftovers 0 1 0.0625 Hydro Pump 110 Water Ice Beam 90 Ice Flash Cannon 80 Steel Earthquake 100 Ground 6 1 1 0 2 1 0 0 3 0 2 0 1
[Battle] XiaoMing sent out Pikachu! [Battle] LiHua sent out Blastoise!
[Battle] Pikachu used Iron Tail! [Battle] It's not very effective... [Battle] Blastoise used Ice Beam! [Battle] Blastoise restored some HP using its Leftovers!
[Battle] Pikachu used Thunderbolt! [Battle] It's super effective! [Battle] Blastoise used Flash Cannon! [Battle] It's not very effective... [Battle] Blastoise restored some HP using its Leftovers!
[Battle] Pikachu used Iron Tail! [Battle] It's not very effective... [Battle] Blastoise used Hydro Pump! [Battle] Blastoise restored some HP using its Leftovers!
[Battle] Pikachu used Thunderbolt! [Battle] It's super effective! [Battle] Blastoise used Earthquake! [Battle] It's super effective! [Battle] XiaoMing's Pikachu fainted!
LiHua defeated XiaoMing! Pikachu's HP: 0 Blastoise's HP: 55
你应该提交打包提交除要求中不能修改的文件,包含Heal_item.h,Attack_item.h,Pokemon.cpp和Effect.cpp。 我们会将main.cpp,Item.h,Move.h,Effect.h,Pokemon.h复制进你上传的文件中编译并运行。
OJ评分占100%
整体接口需要重新设计。
关于考点的问题
类对象的创建与销毁、类的组合与继承、虚函数与多态
小明和李华很喜欢玩精灵宝可梦(Pokemon),他们在学习了OOP相关知识后,希望能自己模拟出一些简单的宝可梦对战情景。宝可梦对战(本题中仅说明1v1单打对战)规则的简要描述如下:
双方各派出一只宝可梦,每个宝可梦都有自己的HP值(初始为满),每回合结束后,若一方HP值为0,则判定该方倒下,对战结束。
每只宝可梦均有自己的属性(type)
和技能(move)
(技能也有属性),出于简化考虑,本题仅考虑攻击技能(即:所有技能的作用均是给对方造成伤害),若攻击技能的属性克制对方宝可梦的属性,该技能伤害翻倍,若被对方属性所抵抗,则伤害减半,若被对方属性所免疫,则不造成伤害。并伴随相应输出(详细参见示例)。属性相克表已给出(事实上,你并不需要这张表,因为本题已将属性相克关系存储在容器中,你只需要利用它构建出正确的映射)。
每只宝可梦均可携带道具(item)
,出于简化考虑,道具仅分为回复道具、攻击道具。回复道具可以在每回合结束后给宝可梦回复HP,攻击道具可以增加宝可梦的技能伤害(在使用技能时)。
其中,攻击道具有两种,第一种不具有属性,对所有技能均有伤害加成作用;第二种攻击道具具有自己的属性,当且仅当使用技能的属性与道具属性相同时,才能有伤害加成。
回复道具也有两种,第一种可以回复固定常数的HP值;第二种可回复自身最大HP值一定比例的HP值。
这两种道具均有可能是消耗型的,即仅可使用一次,消耗后,道具将被销毁,并在之后的回合中无法使用。题目已给出道具类Item
,攻击道具类atk_item
,回复道具类heal_item
,你需要完成不同种类的攻击道具和回复道具派生类的定义。
name
,属性type
,初始体力值HP
,技能数量n
。item_name
。s1
(0表示回复道具,1表示攻击道具),类型代号s2
(0表示消耗道具,1表示非消耗道具)。
若为回复道具,之后输入一个正数r
表示回复量(double型),约定若r>1,则该道具可回复r点常数值的HP,否则回复最大HP乘以r的HP(即此时r表示不大于1的回复比例),所有回复量均向下取整数。
若为攻击道具,之后输入一个正数a
表示该道具提供的提高伤害比例,接着一个字符串item_type
表示该道具的属性,若无属性,item_type
为"null"。move_name
(单独占一行),随后一行依次是技能伤害值harm
,技能属性type
。round
表示至多进行round
回合,若round
回合前有一方倒下则战斗提前结束。后round
行依次为每回合双方使用技能的序号(由之前的输入唯一确认),每行形如m1 m2
,中间用空格隔开。Pikachu 400 Electric 2 Life Orb 1 1 0.3 null Thunderbolt 90 Electric
Iron Tail 90 Steel Blastoise 540 Water 4 Leftovers 0 1 0.0625 Hydro Pump 110 Water Ice Beam 90 Ice Flash Cannon 80 Steel Earthquake 100 Ground 6 1 1 0 2 1 0 0 3 0 2 0 1
[Battle] XiaoMing sent out Pikachu! [Battle] LiHua sent out Blastoise!
[Battle] Pikachu used Iron Tail! [Battle] It's not very effective... [Battle] Blastoise used Ice Beam! [Battle] Blastoise restored some HP using its Leftovers!
[Battle] Pikachu used Thunderbolt! [Battle] It's super effective! [Battle] Blastoise used Flash Cannon! [Battle] It's not very effective... [Battle] Blastoise restored some HP using its Leftovers!
[Battle] Pikachu used Iron Tail! [Battle] It's not very effective... [Battle] Blastoise used Hydro Pump! [Battle] Blastoise restored some HP using its Leftovers!
[Battle] Pikachu used Thunderbolt! [Battle] It's super effective! [Battle] Blastoise used Earthquake! [Battle] It's super effective! [Battle] XiaoMing's Pikachu fainted!
LiHua defeated XiaoMing! Pikachu's HP: 0 Blastoise's HP: 55
你应该提交打包提交除要求中不能修改的文件,至少包含heal_item_1.h,heal_item_2.h,attack_item_1,attack_item_2.h,Pokemon.cpp,makefile。 我们会将main.cpp,Item.h,Move.h,Effect.h,Pokemon.h,atk_item.h,heal_item.h复制进你上传的文件中编译并运行。
OJ评分占100%
类对象的创建与销毁、类的组合与继承、虚函数与多态
小明很喜欢玩精灵宝可梦(Pokemon),他在学习了OOP相关知识后,希望能自己模拟出一些简单的宝可梦对战情景。宝可梦对战(本题中仅说明1v1单打对战)规则的简要描述如下:
双方各派出一只宝可梦,每个宝可梦都有自己的HP值(初始为满),每回合结束后,若一方HP值为0,则判定该方倒下,对战结束。
每只宝可梦均有自己的属性(type)
和技能(move)
(技能也有属性),出于简化考虑,本题仅考虑攻击技能(即:所有技能的作用均是给对方造成伤害),若攻击技能的属性克制对方宝可梦的属性,该技能伤害翻倍,若被对方属性所抵抗,则伤害减半,若被对方属性所免疫,则不造成伤害。并伴随相应输出(详细参见示例)。属性相克表已给出(事实上,你并不需要这张表,因为本题已将属性相克关系存储在容器中,你只需要利用它构建出正确的映射)。
每只宝可梦均可携带道具(item)
,出于简化考虑,道具仅分为回复道具、攻击道具。回复道具可以在每回合结束后给宝可梦回复HP,攻击道具可以增加宝可梦的技能伤害(在使用技能时)。
攻击道具可以有自己的属性,若不具有属性,对所有技能均有伤害加成作用,若有自己的属性,当且仅当使用技能的属性与道具属性相同时,才能有伤害加成。其中,攻击道具有两种,一种使用时不会给自己造成伤害,另一种使用时会给自己造成伤害。
回复道具也有两种,第一种可以回复固定常数的HP值;第二种可回复自身最大HP值一定比例的HP值。
这两种道具均有可能是消耗型的,即仅可使用一次,消耗后,道具将被销毁,并在之后的回合中无法使用。题目已给出道具类Item
,攻击道具类atk_item
,回复道具类heal_item
,你需要完成不同种类的攻击道具和回复道具派生类的定义。
trainer_name
,名字name
,属性type
,初始体力值HP
,技能数量n
。item_name
。s1
(0表示回复道具,1表示攻击道具),类型代号s2
(0表示消耗道具,1表示非消耗道具)。
若为回复道具,之后输入一个正数r
表示回复量(double型),约定若r>1,则该道具可回复r点常数值的HP,否则回复最大HP乘以r的HP(即此时r表示不大于1的回复比例),所有回复量均向下取整数。
若为攻击道具,之后输入一个类型代号s3
(0表示该道具不会对自身造成伤害,1表示该道具会对自身造成伤害),若为不会对自身造成伤害的道具,之后输入一个正数a
表示该道具提供的提高伤害比例,接着一个字符串item_type
表示该道具的属性(若无属性,item_type
为"null"),若为会对自身造成伤害的道具,在以上输入后再输入一个正数hurt
表示每次使用该道具会对自身造成的伤害比例(即对自身造成伤害为:最大HP乘以hurt)。move_name
(单独占一行),随后一行依次是技能伤害值harm
,技能属性type
。round
表示至多进行round
回合,若round
回合前有一方倒下则战斗提前结束。后round
行依次为每回合双方使用技能的序号(由之前的输入唯一确认),每行形如m1 m2
,中间用空格隔开。Ash Pikachu 400 Electric 2 Life Orb 1 1 1 0.3 null 0.1 Thunderbolt 90 Electric
Iron Tail 90 Steel Gary Blastoise 540 Water 4 Leftovers 0 1 0.0625 Hydro Pump 110 Water Ice Beam 90 Ice Flash Cannon 80 Steel Earthquake 100 Ground 6 1 1 0 2 1 0 0 3 0 2 0 1
[Battle] Ash sent out Pikachu! [Battle] Gary sent out Blastoise!
[Battle] Pikachu used Iron Tail! [Battle] It's not very effective... [Battle] Pikachu is hurt by its Life Orb! [Battle] Blastoise used Ice Beam! [Battle] Blastoise restored a little HP using its Leftovers!
[Battle] Pikachu used Thunderbolt! [Battle] It's super effective! [Battle] Pikachu is hurt by its Life Orb! [Battle] Blastoise used Flash Cannon! [Battle] It's not very effective... [Battle] Blastoise restored a little HP using its Leftovers!
[Battle] Pikachu used Iron Tail! [Battle] It's not very effective... [Battle] Pikachu is hurt by its Life Orb! [Battle] Blastoise used Hydro Pump! [Battle] Blastoise restored a little HP using its Leftovers!
[Battle] Pikachu used Thunderbolt! [Battle] It's super effective! [Battle] Pikachu is hurt by its Life Orb! [Battle] Blastoise used Earthquake! [Battle] It's super effective! [Battle] Ash's Pikachu fainted!
Gary defeated Ash! BATTLE END! Pikachu's HP: 0 Blastoise's HP: 55
你应该提交打包提交除要求中不能修改的文件,至少包含上述要求的文件。 我们会将main.cpp,Item.h,Move.h,Effect.h,Pokemon.h复制进你上传的文件中编译并运行。
OJ评分占100%
请将完整题面、数据(包括数据生成文件)、judger和答案程序,自行测试通过。完成之后发到邮箱 huangfei382@163.com。对于编写judger有问题可在小教员群(或找助教)讨论。 注意:
知识点
类继承、虚函数与多态、STL容器
题目描述
小明和李华很喜欢玩精灵宝可梦(Pokemon),他们在学习了类继承、虚函数与多态、STL相关知识后,希望能自己模拟出一些简单的宝可梦对战情景。宝可梦对战(本题中仅说明1v1单打对战)规则的简要描述如下:
1.双方各派出一只宝可梦,每个宝可梦都有自己的HP值(初始为满),每回合结束后,若一方HP值为0,则判定该方被击败,对战结束。
2.每只宝可梦均有自己的属性
(type)
和技能(move)
(技能也有属性),出于简化考虑,本题仅考虑攻击技能(即:没有变化技能),若攻击技能的属性克制对方宝可梦的属性,该技能伤害翻倍,若被对方属性所抵抗,则伤害减半,若被对方属性所免疫,则不造成伤害。并伴随相应输出“效果拔群!”或“收效甚微...”或“对xxx完全没有效果...”(详细参见示例)。属性相克表已给出,你需要考虑如何使用合适的STL容器来在战斗中判定属性之间的关系。(从左到右,即从普通系到钢系,我们依次用整数0~16来表示这17种属性)3.每只宝可梦均可携带道具
(item)
,出于简化考虑,道具仅分为回复道具、攻击道具。回复道具可以在每回合结束后给宝可梦回复HP,攻击道具可以增加宝可梦的技能伤害(在使用技能时)。这两种道具均有可能是消耗型的,即仅可使用一次,消耗后你应当将道具立刻析构,之后将无法使用。题目已给出道具基类item,你需要补充出回复道具和攻击道具的定义。(其他细节参见代码注释和样例解释)
输入样例
name
,属性type
,初始体力值HP
,技能数量n
。item_name
,类型代号s1
(0表示回复道具,1表示攻击道具),类型代号s2
(0表示消耗道具,1表示非消耗道具)回复比例/提高伤害比率rate
(double型)。move_name
,技能伤害值harm
,技能属性type
。m1 m2
,中间用空格隔开。输出样例
样例解释:
第一回合,皮卡丘使用铁尾,由于水抵抗钢,故伤害减半,水箭龟使用冰冻光束,冰对电无克制/抵抗/免疫关系,回合结束后水箭龟使用吃剩的东西回复体力。(伤害计算公式为,实际伤害=技能伤害属性相克倍率(1+提高伤害比例)(不携带道具时提高伤害比例为0,如样例中皮卡丘伤害提升比例为0.3,水箭龟为0),结果向下取整。HP回复公式为:回复量=最大HP*回复比例,向下取整,如样例中水箭龟回复比例为0.0625,皮卡丘为0) 第二回合,皮卡丘使用十万伏特,由于电克制水,故伤害翻倍,水箭龟使用加农光炮,由于水抵抗钢,故伤害减半,回合结束后水箭龟使用吃剩的东西回复体力。 第三回合,皮卡丘使用铁尾,皮卡丘使用铁尾,由于水抵抗钢,故伤害减半,水箭龟使用水,水对电无克制/抵抗/免疫关系,回合结束后水箭龟使用吃剩的东西回复体力。 第四回合,皮卡丘使用十万伏特,由于电克制水,故伤害翻倍,水箭龟使用地震,由于地克制电,故伤害翻倍,回合结束后皮卡丘倒下,战斗结束。
要求
提交格式
你应该提交打包提交除要求中不能修改的文件,包含Healitem.h和Attackitem.h,Move.h,Effect.h。 我们会将main.cpp,Item.h复制进你上传的文件中编译并运行。
评分标准
OJ评分占100%