1、设计奥特曼类,属性有【名字和血量】,行为有【普通攻击、必杀攻击和魔法攻击】
其中普通攻击和必杀攻击一次只能随机攻击一只活着的小怪兽
魔法攻击可以攻击所有的小怪兽
要求普通攻击伤害是20~29之间
必杀伤害如果血量剩余大于60就攻击血量3/4的伤害,如果不大于就直接攻击60伤害
魔法攻击要求固定伤害30
但是无论如何攻击最终小怪兽的血量要保持为0
奥特曼是几率性触发攻击 10%必杀 30%魔法 60%普通
2、设计小怪兽类,属性有【名字和血量】,行为有【普通攻击】
其中普通攻击可以攻击奥特曼
要求普通攻击伤害10~19之间
但是无论如何攻击最终奥特曼的血量要保持为0
3、执行类中操作:本游戏是回合制游戏 其中是【1只奥特曼大战4只小怪兽】,如何便捷的管理和存储4只小怪兽请自行分析
需要在控制台上输出下面的打印效果
需要打印了第几回合 奥特曼的名字和血量 使用了什么攻击
如果是魔法攻击即输出 使用魔法攻击攻击全体小怪兽
如果是普通或必杀攻击 需要写出攻击了那只小怪兽
打印每只小怪兽的名字和血量 并打印小怪兽使用普通攻击
输出:
======== 第X回合 ========
XXX凹凸曼 血量XXX
使用了 魔法攻击全体/普攻,XXX小怪兽/必杀,XXX小怪兽
XXX小怪兽 血量XXX
XXX小怪兽 血量XXX
XXX小怪兽 血量XXX
XXX小怪兽 血量XXX
小怪兽使用了普攻
4、游戏结束条件:凹凸曼血量为0,小怪兽胜利
所有的小怪兽都死了,凹凸曼胜利
5、特殊条件说明:
凹凸曼 普攻和必杀不能攻击死了小怪兽 要【随机攻击一只】活着的小怪兽
魔法无所谓攻击所有的小怪兽【死活不限】 小怪兽的血量不能出现负数 0
阵亡的小怪兽不允许参与到本轮攻击中
奥特曼和小怪兽的初始血量根据个人喜好设定【但是不要太过分】
700 ~1000 250~350
测试类
package com.djz.test;
/**
* @author djz
* @create 2022-10-20-20:19
*/
public class Demo04 {
public static boolean isAllAlive(Monster[] ms) {
for (int i = 0; i < ms.length; i++) {
if (ms[i].isAlive()) {
return true;
}
}
return false;
}
public static void main(String[] args) {
Ultraman u = new Ultraman("迪迦"); //奥特曼名字
Monster[] ms = { //一群怪兽的名字
new Monster("怪兽1"),
new Monster("怪兽2"),
new Monster("怪兽3"),
new Monster("怪兽4"),
};
int round = 1;
do {
System.out.println("**********第" + round + "回合***********");
Monster m ;
do {
int index = (int) (Math.random()*ms.length);
m = ms[index];
} while (!m.isAlive());
System.out.println(m.getName()+"小怪兽攻击奥特曼" + u.getName());
m.attack(u);
System.out.println(u);
if (u.getHp() > 0) {
double rout = Math.random();
if (rout <=0.6) {
System.out.println(u.getName()+"攻击小怪兽"+ m.getName());
u.attack(m);
}
else if(rout<=0.9) {
System.out.println(u.getName()+"使用必杀技攻击小怪兽" +m.getName());
u.hugeAttack(m);
}
else if (rout<=30) {
System.out.println( u.getName() + "使用魔法攻击小怪兽");
u.magicAttack(ms);
}
for (int i = 0; i < ms.length; i++) {
System.out.println(ms[i]);
}
}
round++;
} while (u.getHp() > 0 && isAllAlive(ms));
if (u.getHp() > 0) {
System.out.println(u.getName()+"胜利!!!!");
}
else {
System.out.println("小怪兽胜利!!!");
}
}
}
奥特曼类
public class Ultraman {
private int hp; //生命
private String name; //名字
public Ultraman(String name) {
this.name = name;
hp = 700;
}
public void attack(Monster m) {
int injury = (int) (Math.random() * 21 + 10);
m.setHp(m.getHp() - injury);
}
public void magicAttack(Monster[] ms) {
for (int i = 0; i < ms.length; i++) {
if (ms[i].isAlive()) {
ms[i].setHp(ms[i].getHp() - 30);
}
}
}
public void hugeAttack(Monster m) {
if (m.getHp() > 60) {
m.setHp((m.getHp() / 4));
} else {
m.setHp(m.getHp() - 60);
}
}
public String getName() {
return name;
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp > 0 ? hp : 0;
}
@Override
public String toString() {
return name + "生命值:" + hp;
}
}
怪兽类
public class Monster {
private int hp;
private String name;
public Monster(String name) {
this.name = name;
hp = 250;
}
public void attack(Ultraman m) {
int injury = (int) (Math.random() * 11 + 10);
m.setHp(m.getHp() - injury);
}
public String getName() {
return name;
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp > 0? hp : 0;
}
@Override
public String toString() {
return "小怪兽" + name +"生命值:" + hp;
}
public boolean isAlive() {
return hp > 0;
}
}