Java简单类与对象,封装,多态,继承,接口,设计模式,某游戏系统的需求如下,请按照面向对象思想进行设计并实现。

5 篇文章 0 订阅
2 篇文章 0 订阅
  1. 代码需求

java实现

(1)有很多的武器,包括弓箭(BowAndArrow)、魔杖(Wand)和剑(Sward),每种武器都具备攻击和防守两个行为。在每种行为实现中,打印相应的提示信息即可,例如“弓箭攻击力90,防守力80”。

(2)有很多的人物角色,包括射手(Shooter)、法师(Mags)和武士(Knight)。每种人物都包括姓名和武器两个属性,具有战斗、移动和变更武器的行为。

  • 姓名属性是角色的身份(如射手的name默认就是“射手”),武器属性默认是射手用弓箭、法师用魔杖、武士用剑。

  • 战斗行为包括用自身装备的武器进行攻击和防守。

  • 移动行为则根据人物角色不同而不同,射手骑马,武士是奔跑,法师是瞬移(提示:具体实现打印信息即可)。

  • 变更武器行为,改变角色自身的默认武器。

3)建立测试类,完成以下功能:

  • 对于每种武器,定义一个对象

  • 对于每种人物角色,定义两个对象,即两个武士、两个法师和两个射手

  • 定义攻击团队1,里面包括一个武士、一个法师和一个射手,该团队使用默认的武器进行攻击和移动。

  • 定义攻击团队2,里面包括一个武士、一个法师和一个射手,对于每种角色进行变更武器后攻击和移动,武士的武器换成弓箭、法师换成剑、射手换成法杖。


  1. 整体分析:

有很多不同的武器和人物,首先会想到继承,武器类和人物类,测试类

武器类:

具备攻击和防守两个行为。在每种行为实现中,打印相应的提示信息,弓箭(BowAndArrow)、魔杖(Wand)和剑(Sward),继承武器类并进行攻击和防御的方具体实现,武器类最好采用接口实现。

人物类:

具备名字和武器两个属性,首先实现其构造方法,初始化人物基类的名字和武器,最后定义人物的两个方法,攻击和移动。然后建立具体的人物类包括射手(Shooter)、法师(Mags)和武士(Knight)。每种人物继承人物基类都包括姓名和武器两个属性,具有战斗、移动和变更武器的行为。

测试类:

对于每种武器,定义一个对象

对于每种人物角色,定义两个对象,即两个武士、两个法师和两个射手

定义攻击团队1,里面包括一个武士、一个法师和一个射手,该团队使用默认的武器进行攻击和移动。

定义攻击团队2,里面包括一个武士、一个法师和一个射手,对于每种角色进行变更武器后攻击和移动,武士的武器换成弓箭、法师换成剑、射手换成法杖。

  1. 代码实现

  1. 整体java代码包和类的架构

  1. 武器类

  1. 武器基类Weapon

package weapon;
//实现武器
public interface Weapon 
{
    void attack();
    void defense();
}
  1. 弓箭BowAndArrow

package weapon;

//弓箭
public class BowAndArrow implements Weapon 
{
    public void attack() 
    {
        System.out.println("弓箭攻击力200");
    }

    public void defense() 
    {
        System.out.println("弓箭防守力50");
    }
}
  1. 魔杖Wand

package weapon;
// 魔杖
public class Wand implements Weapon 
{
    public void attack() 
    {
        System.out.println("魔杖攻击力70");
    }

    public void defense() 
    {
        System.out.println("魔杖防守力60");
    }
}
  1. 剑Sword

package weapon;
//剑
public class Sword implements Weapon 
{
     public void attack()
     {
         System.out.println("剑攻击力80");
     }
    
     public void defense() 
     {
         System.out.println("剑防守力70");
     }
}
  1. 人物类

  1. 人物基类

package character;
import weapon.*;//导包
//实现人物角色
abstract class Character 
{
    public String name;
    public Weapon weapon;

    public Character(String name) 
    {
        this.name = name;
    }

    public String getName() 
    {
        return name;
    }

    public void setWeapon(Weapon weapon) 
    {
        this.weapon = weapon;
    }

    public abstract void fight();
    public abstract void move();
}
  1. 射手 Shooter

package character;
import weapon.*;

//射手
public class Shooter extends Character 
{
     public Shooter(String name) 
     {
         super(name);
         weapon = new BowAndArrow(); // 默认武器为弓箭
     }
     
     public void fight() 
     {
         System.out.print(name + "使用" + weapon.getClass().getSimpleName());
         weapon.attack();
         weapon.defense();
     }
     
     public void move() 
     {
         System.out.println(name + "骑马移动");
     }
}
  1. 法师Mags

package character;
import weapon.*;

public class Mags extends Character 
{
    public Mags(String name) 
    {
        super(name);
        weapon = new Wand(); // 默认武器为魔杖
    }

    public void fight() 
    {
        System.out.print(name + "使用" + weapon.getClass().getSimpleName());
        weapon.attack();
        weapon.defense();
    }

    public void move() 
    {
        System.out.println(name + "瞬移移动");
    }
}
  1. 武士Knight

package character;
import weapon.*;
//武士
public class Knight extends Character 
{
     public Knight(String name) 
     {
         super(name);
         weapon = new Sword(); // 默认武器为剑
     }
    
     public void fight() 
     {
         System.out.print(name + "使用" + weapon.getClass().getSimpleName());
         weapon.attack();
         weapon.defense();
     }
    
     public void move() 
     {
         System.out.println(name + "奔跑移动");
     }
}
  1. 实现攻击团队AttackTeam

package character;
import weapon.*;
//实现攻击团队
public class AttackTeam {
    
     private Knight knight;
     private Mags mags;
     private Shooter shooter;
    
     public AttackTeam(Knight knight, Mags mags, Shooter shooter) 
     {
         this.knight = knight;
         this.mags = mags;
         this.shooter = shooter;
     }
 
     public void attack() 
     {
         knight.fight();
         mags.fight();
         shooter.fight();
     }
    
     public void move() 
     {
         knight.move();
         mags.move();
         shooter.move();
     }    
     public void changeWeapon() 
     {
         knight.setWeapon(new BowAndArrow()); // 将武器换成弓箭
         mags.setWeapon(new Sword()); // 将武器换成剑
         shooter.setWeapon(new Wand()); // 将武器换成法杖
     }
}
  1. 测试类

package text;


import weapon.*;
import character.*;

//测试类
public class Test 
{
     public static void main(String[] args) 
     {
         // 创建武器
         BowAndArrow bowAndArrow = new BowAndArrow();
         Wand wand = new Wand();
         Sword sword = new Sword();
         // 创建角色
         Shooter shooter1 = new Shooter("射手1");
         Shooter shooter2 = new Shooter("射手2");
         Mags mags1 = new Mags("法师1");
         Mags mags2 = new Mags("法师2");
         Knight knight1 = new Knight("武士1");
         Knight knight2 = new Knight("武士2");
         // 创建攻击团队1
         AttackTeam attackTeam1 = new AttackTeam(knight1, mags1, shooter1);
         System.out.println("攻击团队1默认武器");
         attackTeam1.attack();
         System.out.print("移动:");
         attackTeam1.move();
         System.out.println();
         // 创建攻击团队2
         AttackTeam attackTeam2 = new AttackTeam(knight2, mags2, shooter2);
         System.out.println("攻击团队2换武器后");
         attackTeam2.changeWeapon();
         attackTeam2.attack();
         System.out.print("移动:");
         attackTeam2.move();
     }
}
  1. 实现结果

  1. 结语:个人理解,仅供参考哈!肯定还有很多可以优化的地方,望大家多多指正,感谢感谢!

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值