(13)Java中关于面向对象编程——LOL游戏

一、关于这个例子的核心思想:
①有些属性,可以简单赋值 ,有些属性,不能简单赋值,需要经过很复杂的内部逻辑处理之后才赋值
②那么,我们通常应该把属性全部修饰成私有的,然后暴露出get和set之类方法来让使用这个类的人去操作对象上的数据
(关于get set IDE可以用Alt+Insert进行操作)
③好处:写这个类的人,可以把内部数据处理逻辑封装起来,增加了类的内聚性,增加了数据逻辑的安全性
④同时,降低了使用者的复杂度

二、关于private
私有的,可以修饰成员变量和成员方法称为私有变量和私有方法。它修饰的成员变量或者方法只能在本类中可以访问,这是一种封装思想的体现。

三、关于public
用public修饰的成员变量和方法称为共有变量和共有方法。它具有最大的访问权限,可以访问任何一个在src下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。

四、关于LOL游戏案例

package javase.day05.lol;

import java.util.ArrayList;

 /**
 * 用户的游戏账号(比如: "朕御驾亲征痛杀之") 
 * 用户所在的对局ID(比如: "艾欧尼亚-1001") 
 * 用户所使用的英雄角色(比如:
 * 易大师或者阿狸或蘑菇....) 
 * 所装配的装备(装备应该可以是多个,比如"无尽之刃"、"狂徒铠甲"等) 
 * 用户助攻数 
 * 用户击杀人头数 
 * 斩杀小兵数
 * 用户的本局游戏实时得分(游戏得分=助攻数*10+击杀人头数*20+小兵数*2+装备件数*5) 
 * 用户的历史累计得分 
 * 用户的英雄等级:
 *      [0,20)-->1级
 *      [20,40) --> 2级
 *      [40,60) -->3级
 *      [60 -->4级
 *
 */
public class Player {
    private String account;
    private String missionId;
    private String hero;
    private ArrayList equipments = new ArrayList<>();
    private int assistants;
    private int kills;
    private int killsSoldiers;
    private int missionScore;
    private int amountScore;
    private int heroLevel;

    public void setAccount(String account) {
        this.account = account;
    }

    public void setMissionId(String setMissionId) {
        this.missionId = missionId;
    }

    public void setHero(String hero) {
        this.hero = hero;
    }

    //每加一件装备用户的英雄当局得分发生变化
    public void addEquipment(String equipment) {
        this.equipments.add(equipment);
        //每增加一件装备,游戏时实得分加5分
        this.missionScore += 5;

        //更新英雄的等级
        this.setHeroLevel();
        // 累计历史得分也需要 +5分
        this.amountScore += 5;
    }

    //增加助攻数,当调用这个方法助攻数加1
    public void setAssistants() {
        this.assistants++;
        //每增加一个助攻,游戏时实增加10分
        this.missionScore += 10;
        //更新英雄的等级
        this.setHeroLevel();
        //累计历史得分也需要加10分
        this.amountScore += 10;
    }

    //增加人头数
    public void addKills() {
        this.kills++;
        this.missionScore += 20;
        //更新英雄的等级
        this.setHeroLevel();
        this.amountScore += 20;
    }

    //增加补兵数
    public void addKillSoldier() {
        this.killsSoldiers++;
        this.missionScore += 2;
        //更新英雄的等级
        this.setHeroLevel();
        this.amountScore += 2;
    }

    //更新英雄的等级的方法
    private void setHeroLevel() {
        //更新英雄的等级
        if (this.missionScore < 20) {
            this.heroLevel = 1;
        } else if (this.missionScore < 40) {
            this.heroLevel = 2;
        } else if (this.missionScore < 60) {
            this.heroLevel = 3;
        } else {
            this.heroLevel = 4;
        }
    }

    public String getAccount() {
        return this.account;
    }

    public String getMissionId() {
        return this.missionId;
    }

    public String getHero() {
        return hero;
    }

    public ArrayList getEquipments() {
        return equipments;
    }
    public int getAssistants(){
        return assistants;
    }

    public int getKills() {
        return kills;
    }
    public int getKillsSoldiers() {
        return killsSoldiers;
    }
    public int getMissionScore() {
        return missionScore;
    }
    public int getAmountScore() {
        return amountScore;
    }
    public int getHeroLevel() {
        return heroLevel;
    }
}

package javase.day05.lol;

import java.util.ArrayList;

public class PlayerTest {
    public static void main(String[] args) {
        //初始化一个英雄数据
        Player player1 = new Player();
        //
        player1.setAccount("狐狸");
        player1.setHero("剑姬");
        player1.setMissionId("艾欧尼亚-999");
        //买装备
        player1.addEquipment("死亡板甲");
        //补兵
        player1.addKillSoldier();
        //击杀人头
        player1.addKills();
        //增加助攻
        player1.setAssistants();
        //又买装备
        player1.addEquipment("电刃");
        //显示当前击杀的人头数
        System.out.println("击杀人数"+player1.getKills());
        System.out.println("助攻次数"+player1.getAssistants());
        System.out.println("英雄等级"+player1.getHeroLevel());

        System.out.println("----------------------");

        //击杀人头数
        player1.addKills();
        player1.addKills();
        //增加助攻
        player1.setAssistants();
        player1.setAssistants();
        //又买装备
        player1.addEquipment("复活甲");
        player1.addEquipment("斗篷");
        System.out.println("击杀人数"+player1.getKills());
        System.out.println("助攻次数"+player1.getAssistants());
        System.out.println("英雄等级"+player1.getHeroLevel());

    }
}

你可能感兴趣的:((13)Java中关于面向对象编程——LOL游戏)