mumei2018 发表于 2023-9-17 19:31:25

遇到这样一个题目 半天没有头绪 来这碰碰运气

题目要求用到构造器 多态 继承 封装(getter 和 setter) 做一个游戏

有三种角色
human    monster   ghost
血量各自为
50    100   40

都用攻击的功能(方法) 攻击时 方法的参数为攻击对象

然后三种角色 互相克制   

比如human克制ghost

所以

human打ghost ghost 掉10hp   反过来则是human掉5hp

monster克制human

ghost克制human

创造三个角色后让他们随机自动攻击随机对象

一个角色没血时 提示 xx is dead
只剩一个时 提示 xx survive。

看书 看了两三天了 写了一堆乱七八糟的东西 也不知要怎样用上构造器 多态 继承 封装(getter 和 setter)来这碰碰运气 看看能不能得到点什么范本 谢谢各位了

Mike_python小 发表于 2023-9-17 19:31:36

本帖最后由 Mike_python小 于 2023-9-17 16:34 编辑

游戏角色设计与实现:

以下是一个使用构造器、多态、继承和封装的Java游戏角色设计与实现的示例代码,按照你的需求进行了编写。你可以根据自己的需要进行修改和完善。

java
import java.util.Random;

class GameCharacter {
    private String name;
    private int health;

    public GameCharacter(String name, int health) {
      this.name = name;
      this.health = health;
    }

    public String getName() {
      return name;
    }

    public int getHealth() {
      return health;
    }

    public void setHealth(int health) {
      this.health = health;
    }

    public void attack(GameCharacter target) {
      // 在子类中实现具体的攻击逻辑
    }

    public boolean isDead() {
      return health <= 0;
    }

    public void displayStatus() {
      System.out.println(name + " - Health: " + health);
    }
}

class Human extends GameCharacter {
    public Human(String name, int health) {
      super(name, health);
    }

    @Override
    public void attack(GameCharacter target) {
      int damage = 10;
      target.setHealth(target.getHealth() - damage);
      System.out.println(getName() + " attacks " + target.getName() + " and deals " + damage + " damage");
    }
}

class Monster extends GameCharacter {
    public Monster(String name, int health) {
      super(name, health);
    }

    @Override
    public void attack(GameCharacter target) {
      int damage = 5;
      target.setHealth(target.getHealth() - damage);
      System.out.println(getName() + " attacks " + target.getName() + " and deals " + damage + " damage");
    }
}

class Ghost extends GameCharacter {
    public Ghost(String name, int health) {
      super(name, health);
    }

    @Override
    public void attack(GameCharacter target) {
      int damage = 10;
      target.setHealth(target.getHealth() - damage);
      System.out.println(getName() + " attacks " + target.getName() + " and deals " + damage + " damage");
    }
}

public class Game {
    public static void main(String[] args) {
      Human human = new Human("Human", 50);
      Monster monster = new Monster("Monster", 100);
      Ghost ghost = new Ghost("Ghost", 40);

      GameCharacter[] characters = { human, monster, ghost };

      Random random = new Random();

      while (true) {
            // 随机选择攻击者和被攻击者
            int attackerIndex = random.nextInt(characters.length);
            int targetIndex = random.nextInt(characters.length);

            if (attackerIndex != targetIndex) {
                GameCharacter attacker = characters;
                GameCharacter target = characters;

                attacker.attack(target);
                target.displayStatus();

                // 判断游戏是否结束
                boolean allDeadExceptOne = true;
                for (GameCharacter character : characters) {
                  if (!character.isDead()) {
                        if (allDeadExceptOne) {
                            allDeadExceptOne = false;
                        } else {
                            allDeadExceptOne = true;
                            break;
                        }
                  }
                }

                if (allDeadExceptOne) {
                  for (GameCharacter character : characters) {
                        if (!character.isDead()) {
                            System.out.println(character.getName() + " survives.");
                        }
                  }

                  break;
                }
            }
      }
    }
}


这个示例代码创建了三个角色类:Human、Monster和Ghost,它们都继承自GameCharacter基类。每个角色类都实现了attack方法,根据不同的角色类型,攻击造成不同的伤害。

在main方法中,我们创建了一个包含所有角色的数组,并使用Random类来随机选择攻击者和被攻击者。游戏循环持续进行,直到只有一个角色存活为止。

编译并运行这个程序,你会看到角色之间的攻击和血量变化,并且当只剩下一个角色存活时会有相应的提示输出。

这是一个基础的游戏实现示例,你可以根据自己的需要进行扩展和修改。希望对你有所帮助!

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

isdkz 发表于 2023-9-17 19:31:42

这道题目可以用面向对象的思想来解决,需要用到构造器、多态、继承、封装等概念。下面是一个可能的解决方案:

首先,我们可以定义一个角色类Role ,它包含角色的基本属性和方法:

public abstract class Role {
    private String name; // 角色名称
    private int hp; // 角色血量

    public Role(String name, int hp) {
      this.name = name;
      this.hp = hp;
    }

    public String getName() {
      return name;
    }

    public int getHp() {
      return hp;
    }

    public void setHp(int hp) {
      this.hp = hp;
    }

    public abstract void attack(Role target); // 攻击方法,由子类实现
}


注意这里使用了抽象类和抽象方法,因为不同的角色有不同的攻击方式,需要由子类实现。

接下来,我们定义三个角色类Human 、 Monster和Ghost ,它们继承自Role ,并实现各自的攻击方法:

public class Human extends Role {
    public Human() {
      super("Human", 50);
    }

    @Override
    public void attack(Role target) {
      if (target instanceof Ghost) {
            target.setHp(target.getHp() - 10);
            System.out.println(getName() + " attacks " + target.getName() + ", " + target.getName() + " loses 10 HP.");
      } else {
            target.setHp(target.getHp() - 5);
            System.out.println(getName() + " attacks " + target.getName() + ", " + target.getName() + " loses 5 HP.");
      }
    }
}

public class Monster extends Role {
    public Monster() {
      super("Monster", 100);
    }

    @Override
    public void attack(Role target) {
      if (target instanceof Human) {
            target.setHp(target.getHp() - 20);
            System.out.println(getName() + " attacks " + target.getName() + ", " + target.getName() + " loses 20 HP.");
      } else {
            target.setHp(target.getHp() - 10);
            System.out.println(getName() + " attacks " + target.getName() + ", " + target.getName() + " loses 10 HP.");
      }
    }
}

public class Ghost extends Role {
    public Ghost() {
      super("Ghost", 40);
    }

    @Override
    public void attack(Role target) {
      if (target instanceof Human) {
            setHp(getHp() + 5);
            System.out.println(getName() + " attacks " + target.getName() + ", " + getName() + " gains 5 HP.");
      } else {
            target.setHp(target.getHp() - 15);
            System.out.println(getName() + " attacks " + target.getName() + ", " + target.getName() + " loses 15 HP.");
      }
    }
}


注意这里使用了instanceof运算符来判断攻击对象的类型,从而实现不同的攻击效果。

最后,我们可以编写一个游戏类Game ,它创建三个角色对象并让它们随机攻击随机对象,直到只剩下一个角色为止:

import java.util.Random;

public class Game {
    public static void main(String[] args) {
      Role[] roles = new Role[] {new Human(), new Monster(), new Ghost()};

      Random random = new Random();

      while (true) {
            Role attacker = roles;
            Role target = roles;

            if (attacker == target || target.getHp() <= 0) {
                continue;
            }

            attacker.attack(target);

            if (target.getHp() <= 0) {
                System.out.println(target.getName() + " is dead.");
            }

            int aliveCount = 0;
            Role aliveRole = null;
            for (Role role : roles) {
                if (role.getHp() > 0) {
                  aliveCount++;
                  aliveRole = role;
                }
            }

            if (aliveCount == 1) {
                System.out.println(aliveRole.getName() + " survive.");
                break;
            }
      }
    }
}


注意这里使用了随机数来选择攻击者和攻击对象,以及使用了循环和条件语句来判断游戏结束的条件。

以上就是一个可能的解决方案,希望能够帮助到你。

陶远航 发表于 2023-9-17 19:31:49

下面是一个示例代码,展示了如何利用构造器、多态、继承和封装来创建一个角色游戏:

import random

class Character:
    def __init__(self, name, hp=50):
      self.name = name
      self.hp = hp

    def attack(self, target):
      raise NotImplementedError("Subclass must implement attack method")

    def is_alive(self):
      return self.hp > 0

    def __str__(self):
      return self.name


class Human(Character):
    def __init__(self):
      super().__init__("Human", hp=50)

    def attack(self, target):
      if isinstance(target, Ghost):
            target.hp -= 10
      elif isinstance(target, Monster):
            target.hp -= 5


class Monster(Character):
    def __init__(self):
      super().__init__("Monster", hp=100)

    def attack(self, target):
      if isinstance(target, Human):
            target.hp -= 10
      elif isinstance(target, Ghost):
            target.hp -= 5


class Ghost(Character):
    def __init__(self):
      super().__init__("Ghost", hp=40)

    def attack(self, target):
      if isinstance(target, Human):
            target.hp -= 5
      elif isinstance(target, Monster):
            target.hp -= 10


def main():
    characters =

    while len(characters) > 1:
      attacker = random.choice(characters)
      target = random.choice(characters)
      
      if attacker != target and attacker.is_alive() and target.is_alive():
            print(f"{attacker} attacks {target}!")
            attacker.attack(target)
            
            if not target.is_alive():
                characters.remove(target)
                print(f"{target} is dead.")
               
            print("Current status:")
            for character in characters:
                print(f"{character}: {character.hp} HP")
            print()

    if characters:
      print(f"{characters} survives.")
    else:
      print("No one survives.")

if __name__ == "__main__":
    main()


这个示例代码定义了三个角色类:Human、Monster和Ghost,它们都继承自Character基类。每个角色类都实现了attack方法来执行相应的攻击行为。在主函数中,创建了三个角色对象,并通过随机选择攻击对象来模拟随机自动攻击的游戏场景。当一个角色的HP降至0以下时,会被从角色列表中移除,直到只剩下一个角色或者没有角色存活时游戏结束。

希望这个示例能对您有所帮助!
如果问题已经解决,请设置最佳答案
页: [1]
查看完整版本: 遇到这样一个题目 半天没有头绪 来这碰碰运气