求助,Java小程序,大一期末考,跪求

Alex_Jargon 2020-06-12 09:33:12
问题描述:
在本题中使用面向对象的方式设计实现一个简单的对战游戏。该游戏有战士Soldier和法师Master两种类型的玩家。每个玩家都可以指定姓名name,每种玩家都具有给定的生命值hp、攻击力atk和防御力def。通过定义attack()方法来让每个玩家具有战斗能力。
每个玩家还可以配有一个武器装备Weapon,装备可以改变玩家的攻击力和防御力。Weapon通过实现Tradable接口还可以实现买卖。
编写GameTest类测试运行该游戏。在该类中编写fight(Player, Player)方法来模拟两个玩家对战。对战过程中随机选中一个玩家进行攻击,如此重复,直到某一方的hp值小于0。在main()方法中,构造两个玩家对象,一个Solder一个Master,调用fight()方法进行对战,并输出对战结果。
本题所需设计的类和接口的具体细节如下。
1)Tradable接口(10分)
Tradable接口中声明两个void方法:but(int price)和sell(int price)
2)Weapon类(10分)
Weapon类实现了Tradable接口。
Weapon类有两个私有的int类型的属性:表示攻击力的atk和表示防御力的def。为这两个属性提供公有的访问器方法。为Weapon类提供一个带参构造方法Weapon(int atk, int def)。
3)Player类(10分)
Player类有五个受保护的属性:
String name表示玩家的名字
int hp表示玩家的生命值,初始值为100
int atk表示玩家的攻击力
int def表示玩家的防御力
Weapon weapon表示玩家装备的武器
为属性name、hp、weapon提供访问器方法和修改器方法。
为属性atk、def只提供访问器方法,注意玩家的攻击力由其自身的攻击力和weapon的攻击力组成,防御力def亦是如此。
在Player类中重写toString()方法,返回玩家的namt和hp值。
在Player类中提供一个void的attack(Player player)方法,该方法可以改变被攻击的player对象的hp值,而攻击者的生命值不受影响。
void attack(Player player) {
Random random = new Random();
int realAtk = random.nextInt(getAtk()); //实际攻击力
int realDef = random.nextInt(player.getDef()); //实际防御力
int realHp = realAtk - realDef > 0 ? realAtk - realDef : 0; //实际损失的生命值
player.setHp(player.getHp() - realHp); //修改被攻击的玩家的生命值
}
4)Soldier类(10分)
Soldier类是Player类的子类。为该类提供一个带参构造方法Soldier(String name, Weapon weapon) ,用于初始化Soldier对象的name、weapon、hp、atk、def五个属性的值。hp初始值为100,atk为8,def为4。
5)Master类(10分)
Master类也是Player类的子类。为该类提供一个带参构造方法Master(String name, Weapon weapon) ,用于初始化Master对象的name、weapon、hp、atk、def五个属性的值。hp初始值为100,atk为4,def为10。
Master类增加一个治愈方法cure(Player p),用于为指定的Player对象的hp值增加10。
6)用于测试的GameTest类,其中包含main()方法和fight()方法。(10分)
fight()方法的方法签名为void fight(Player p1, Player p2)。在该方法中两个玩家随机出战(即调用其attack()方法),直到其中一方玩家的hp值小于0。输出两个玩家谁输谁赢。
在main()方法中,声明两个Player对象p1和p2,p1指向new Soldier("战士", new Weapon(5, 5)),p2指向new Master("法师", new Weapon(5, 5))。调用fight(p1,p2)测试对战情况。
...全文
75 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
瑶山 2020-06-12
  • 打赏
  • 举报
回复
能描述这么清楚,你行的
瑶山 2020-06-12
  • 打赏
  • 举报
回复
控制台小游戏?

23,404

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧