游戏角色

*(封装、继承、多态)创建三个类,组成一个继承树,表示游戏中的角色。

描述如下:

父类:Role。是所有职业的父类。

属性:name,表示角色的名字。

方法:public int attack(),该方法返回值为角色的攻击对敌人的伤害。

Role 有两个子类:

1) 法师 Magicer属性:魔法等级(范围为 1 ~ 10)

方法:public int attack(),该方法返回法师的攻击对敌人造成的伤害值。

法师攻击伤害值为:魔法等级*魔法基本伤害值(固定为 5)

2) 战士Soldier

属性:攻击伤害值

方法:public int attack(),该方法返回战士的攻击对敌人造成的伤害值。

战士的攻击伤害值为:其攻击伤害属性值

注意:上述的三个类所有属性都应当作为私有,并提供相应的 get/set 方法。

再设计一个 Team 类,表示一个组队。

具有如下方法

1) addMember,表示组队增加一个成员。注意:组队成员最多为 6 人提示:应当利用一个数组属性,保存所有成员

2) attackSum,表示组队所有成员进行攻击时,对敌人造成的总伤害值省略 get/set 方法后的类图如下:

根据类图和描述,创建相应的类。并编写相应的测试代码。

遇到的问题:(1)不知怎样将对象存储在数组中。解决:将数组类型设置为与将要放置在数组中的对象一样的类型。

                      (2)在设置父类对象的引用时,父类对象只能调用子类对象中从父类那里继承下来的方法或属性。

代码:

package com.shichuang.example;
//import java.util.Scanner;

class Role{
 private String name;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public int attack(){
  return 0;
 }
}
class Magicer extends Role{
 private int level;//范围1-10
 public int getLevel() {
  return level;
 }
 public void setLevel(int level) {
  this.level = level;
 }
 public int attack(){
  return level*5;
 }
}
class Soldier extends Role{
 private int hurt;
 public int getHurt() {
  return hurt;
 }
 public void setHurt(int hurt) {
  this.hurt = hurt;
 }
 public int attack(){
  return hurt;
 }
}
class Team{
 static int i = 0;
 static Role member[] = new Role[6];
 void addMember(Role role){
  member[i++] = role; 
 }
 int attackSum(){
  int sum=0;
  for(int j=0; j<i; j++){
   sum += member[j].attack();
  }
  return sum;
 }
}


public class Main17{
 public static void main(String args[]){
 Role role = new Role();
 Soldier soldier = new Soldier();
 role = soldier;
 soldier.setName("少华");
 soldier.setHurt(5);
 System.out.println("战士" + soldier.getName()+"的攻击伤害值为:"+soldier.attack());
 
 Magicer magicer = new Magicer();
 role = magicer;
 role.setName("君艳法师");
 magicer.setLevel(7);
 System.out.println("战士" + magicer.getName()+"的攻击伤害值为:"+magicer.attack());
 
 Team team = new Team();
 team.addMember(magicer);
 team.addMember(soldier);
 System.out.println("所有成员的伤害总值为:"+team.attackSum());
 }
}

如有可以改进的地方,真诚希望您留言,希望大家一起进步。

猜你喜欢

转载自blog.csdn.net/yjysunshine/article/details/73610790