首页 > 技术文章 > JAVA第一次平时作业

mizersy 2019-02-02 10:30 原文

作业要求:

设计一个类,要求有一些基本属性及两个以上的方法。
(可从日常生活中抽取)
在类中加入2个不同参数的构造方法。
再设计一个类,包含main方法,对上面的类进行应用与
测试。
该作业要求编程并调试通过。
对你设计的类要有详细的文字说明(类所封装的内容,
属性、方法的功能与含义等)。

说明:

本次作业主要实现两个怪兽之间的相互攻击,直到其中一个怪兽死亡时攻击停止。
作业中提交了整个project
写了两个.java源文件,存于homework1\src\homework1\目录下

Monster.java中为怪兽类
怪兽还有血量、法力值、攻击力、血量上限、法力上限等属性
有攻击敌人、被攻击、判断是否存活、判断能否攻击等方法

Test.java中构造了两个怪兽,并令其彼此攻击

 

代码:

monster类

package homework1;

public class Monster{
    public int HP;//怪兽的血量
    private boolean alive;//怪兽是否活着
    public int MP;//怪兽的法力值
    public int damage;//怪兽的攻击力,1点攻击力可降低敌人1点血量,做出多少攻击就要降低自身多少法力值
    final int max_HP = 100;//怪兽的血量上限
    final int max_MP = 100;//怪兽的法力上限
    
    public Monster(){//无参数传递的构造方法
        HP = max_HP;//默认血量为最大值
        MP = max_MP;//默认法力为最大值
        damage = 1;//默认攻击力为1
        alive = true;//怪兽处于存活状态
    }
    
    public Monster(int HP,int MP,int damage){
        if (HP < 0 || MP < 0 || HP > max_HP || MP > max_MP){
            //如果血量不处于0~max_HP,或法力值不处于0~max_MP,则为非法怪兽
            System.out.println("illegal monster!");
        }else{
            this.HP = HP;//将血量赋值给怪兽
            this.MP = MP;//将法力值赋值给怪兽
            this.damage = damage;////将攻击力赋值给怪兽
            if (HP > 0){//如果HP>0说明怪兽处于存活状态
                alive = true;
            }else{//否则怪兽已死亡
                alive = false;
            }
        }
    }
    
    public void beAttacked(int damage){//怪兽受到攻击
        if (HP - damage < 0) HP = 0;//如果血量小于所受攻击,HP等于0
            else HP = HP - damage;//血量因攻击而减少
        
        if (this.HP == 0){//如果HP=0,说明怪兽已死亡
            this.alive = false;
        }
    }
    
    public boolean isAlive(){//判断怪兽是否活着
        return alive;
    }
    public boolean canAttack(){//如果法力值大于自身攻击力,则可以攻击
        return MP >= damage;
    }
    public void attackOthers(){//怪兽攻击敌人
        if (MP - damage < 0) {//如果法力值低于攻击力,则无法攻击
            System.out.println("攻击失败!");
            
        }else MP -= damage;//法力值因攻击而减少
    }
    
}

test类

 1 package homework1;
 2 
 3 import java.util.*;
 4 
 5 public class Test {
 6     public static void main(String args[]){
 7         //monster1采用不传参构造方法
 8         Monster monster1 = new Monster();
 9         
10         //读入monster2的血量、法力值和攻击力
11         Scanner sc = new Scanner(System.in);
12         System.out.println("请输入monster2血量:");
13         int monster_HP = sc.nextInt();
14         System.out.println("请输入monster2法力:");
15         int monster_MP = sc.nextInt();
16         System.out.println("请输入monster2攻击力:");
17         int monster_damage = sc.nextInt();
18         sc.close();
19         
20         //将所读入的血量、法力值和攻击力作为参数构造monster2
21         Monster monster2 = new Monster(monster_HP,monster_MP,monster_damage);
22         
23         //当monster1和monster2都存活时,彼此攻击
24         while(monster1.isAlive() && monster2.isAlive()){
25             
26             //monster1攻击monster2
27             if (monster1.canAttack()){//如果monster1能攻击
28                 monster1.attackOthers();//monster1状态更新
29                 monster2.beAttacked(monster1.damage);//monster2状态更新
30             }
31             
32             //monster2攻击monster1
33             if (monster2.canAttack()){//如果monster2能攻击
34                 monster2.attackOthers();//monster2状态更新
35                 monster1.beAttacked(monster2.damage);//monster1状态更新
36             }
37         }
38         
39         //判断结果
40         if (monster1.isAlive()){//如果monster1还活着,说明monster1是胜利者
41             System.out.println("Monster1 is the winner!");
42         }else if (monster2.isAlive()){//如果monster2还活着,说明monster2是胜利者
43             System.out.println("Monster2 is the winner!");
44         }
45     }
46 }

 

运行结果:

 

推荐阅读