JAVA编程---------英雄对战游戏

  • 实验内容及要求

1、定义一个描述战斗单位的英雄(Hero)类,此类必须包含以下成员变量:名称(name),生命值(life),技能1攻击力(damage1),防御力(defence)。此类包含成员方法:受到对手攻击时的处理方法(attacked())。

2、此游戏中存在多种战斗角色:刺客(cike)、法师(fashi)、坦克(tanke),每种角色都是由要求1所定义的类派生出来的子类。各角色类都继承英雄(Hero)类,并添加成员属性:技能2攻击力(damage2)和技能3攻击力(damage3),在各角色类中,根据表1在其无参构造方法中初始化各角色的生命值、攻击力、防御力。定义一个免伤(Safe)接口,Safe接口中定义抽象方法show();各角色类都实现Safe接口,在重写的show()方法中输出免伤信息。类图如图1所示。

表1 各类英雄属性

英雄名称

生命值

技能1攻击力

技能2攻击力

技能3攻击力

防御力

刺客

100

6

15

30

8

法师

80

8

20

40

6

坦克

120

6

12

20

10

3、此游戏采用回合制,游戏操作者通过选定我方出战英雄和对战英雄,双方英雄不能相同。每个回合由我方先出击,然后轮到对方出击;受攻击的伤害值通过随机数选定技能1/技能2/技能3的攻击力确定,判断受攻击的伤害是否大于自身的防御值,如果大于,则调用attecked()方法,否则调用show()方法。持续对战直到有一方的生命值小于等于0,游戏结束。游戏必须具有完备的提示信息,例如提示用户输入、每个回合都显示敌我双方每个角色对象的各种参数值等。

4、在IDEA中新建“HeroAgainst”项目。完成实验后,将项目导出为压缩包(“File”®“Export”®“Project to Zip File...”)。

JAVA编程---------英雄对战游戏_第1张图片

图1 类图

  • 涉及的主要知识点
  1. Java基础知识:变量的定义、选择语句、循环语句。
  2. 面对对象:类和接口的定义、继承、接口实现。
  • 提示及预备知识
  1. 扫描从控制台输入的字符的参考代码:

Scanner input=new Scanner(System.in);

String role = input.nextLine();
  1. 比较字符串A与字符串B是否相等:A.equals(B)。
  2. 产生随机数的参考代码:
               Random random = new Random();
               int i = random.nextInt(3);
  1. 受到对手攻击时的处理方法中,受攻击对象的剩余生命由发起攻击方的伤害值和受攻击对象的防御值计算得到。
  2. 参考代码如下:

package Shiyan.duizhan;
import java.util.Random;
import java.util.Scanner;
class Hero {//定义英雄类
    public String name;//英雄名称
    int life;//英雄生命
    int damage1;//英雄伤害
    int defence;//英雄防御
    int n;//接收英雄总伤害
    int m;//未死时接收英雄伤害
    public  void attacked(int  damage){
        n = life;
        life = life - (damage - defence);
        m = damage - defence;
        if(life >= 0){
            System.out.println("受到了" + m + "伤害,生命值还剩" + life);
        }else{
            System.out.println("受到了" + m + "伤害,生命值还剩" + 0);
        }
    }
    public void show(){

        System.out.println("扛下了所有伤害");
    }
}

class Chike extends Hero implements Safe{
    int damage2;
    int damage3;
    @Override
    public  void  show(){

        System.out.println("刺客扛下来所有伤害");
    }
}
class Fashi extends Hero implements Safe{
    int damage2;
    int damage3;
    @Override
    public  void  show(){

        System.out.println("法师扛下来所有伤害");
    }
}
class Tanke extends Hero implements Safe {
    int damage2;
    int damage3;
    @Override
    public  void  show(){

        System.out.println("坦克扛下来所有伤害");
    }
}
interface Safe {
    public  void  show();
}

public class DuiZhanTest {
    private static int d,w;

    public static void main(String[] args) {
        Hero h = new Hero();
        Chike cike = new Chike();//实例化刺客
        cike.life = 100;
        cike.damage1 = 6;
        cike.damage2 = 15;
        cike.damage3 = 30;
        cike.defence = 8;

        Fashi fashi = new Fashi();//实例化法师
        fashi.life = 80;
        fashi.damage1 = 8;
        fashi.damage2 = 20;
        fashi.damage3 = 40;
        fashi.defence = 6;

        Tanke tanke = new Tanke();//实例化坦克对象
        tanke.life = 120;
        tanke.damage1 = 6;
        tanke.damage2 = 12;
        tanke.damage3 = 20;
        tanke.defence = 10;

        System.out.println("请选择一个角色,并输入角色编号:");
        System.out.println("A.刺客  B.法师  C.坦克  ");
        Scanner input1 = new Scanner(System.in);
        String role1 = input1.nextLine();

        System.out.println("请选择一个不同英雄的对手,并输入对手编号:");
        System.out.println("A.刺客  B.法师  C.坦克  ");
        Scanner input2 = new Scanner(System.in);
        String role2 = input1.nextLine();

        String[] hero = {"刺客", "法师", "坦克"};//中文英雄名称
        Hero[] yx2 = {cike, fashi,tanke };//实例化的对象
        String[] yx1 = {"A", "B", "C"};//比较所选的英雄
        int[][] damage = {{6, 15, 30}, {8, 20, 40}, {6, 12, 20}};//英雄对应的各技能伤害
        for (int i = 0; i < 3; i++) {
            if (role1.equals(yx1[i])) {
                w = i;
            }
            if (role2.equals(yx1[i])) {
                d = i;
            }
        }

        System.out.println("我方:" + hero[w] + "     " + "VS" + "    " + "对方:" + hero[d]);
        System.out.println("===============对战开始===============");
        for (int j = 1; yx2[w].life > 0 && yx2[d].life > 0; j++) {
            System.out.println("第" + j + "回合");
            Random random = new Random();
            int hurt = random.nextInt(3);
            if (damage[w][hurt] > yx2[d].defence&&yx2[w].life>0) {//判断我方伤害是否大于敌方防守力
                System.out.print("敌方"+hero[d]);
                yx2[d].attacked(damage[w][hurt]);
            }
            if (damage[w][hurt] <= yx2[d].defence) {//判断我方伤害是否小于敌方防守力
                yx2[d].show();
            }
            if (damage[d][hurt] > yx2[w].defence&&yx2[d].life>0) {//判断敌方伤害是否大于我方防守力
                System.out.print("我方"+hero[w]);
                yx2[w].attacked(damage[d][hurt]);
            }
            if (damage[d][hurt] <= yx2[w].defence) {//判断敌方伤害是否小于我方防守力
                yx2[w].show();
            }
            if(yx2[d].life<=0)//敌方英雄血量为零
            {
                System.out.println("敌方英雄阵亡,游戏结束");break;
            }
            if(yx2[w].life<=0)//我方英雄血量为零
            {
                System.out.println("我方英雄阵亡,游戏结束");break;
            }

        }
    }
}

图2 运行结果

JAVA编程---------英雄对战游戏_第2张图片

你可能感兴趣的:(游戏,java)