当前位置: 萬仟网 > IT编程>软件设计>面向对象 > 面向对象及项目QuickHit

面向对象及项目QuickHit

2020年07月28日  | 萬仟网IT编程  | 我要评论
一.面向对象总结面向对象:类与对象的关系:类是对象的抽象,对象是类的实现类是由属性和方法构成,它的每一个对象都有对应的属性和方法方法:方法的重载:目的:针对同一个行为的多种表现,对应相同方法名的多个方法特点: 方法名相同,参数列表不同类方法(static方法)类名.方法名()封装:保护属性值不被随意修改私有化属性并提供getter,setter对外接口继承:代码重用,是多态的基础extends关键字默认的根类是Object,单根继承方法的重写:有继承关系方法名相同,参数列表

一.面向对象总结

面向对象:
类与对象的关系:类是对象的抽象,对象是类的实现
类是由属性和方法构成,它的每一个对象都有对应的属性和方法
方法:
方法的重载:
目的:针对同一个行为的多种表现,对应相同方法名的多个方法
特点: 方法名相同,参数列表不同
类方法(static方法)
类名.方法名()
封装:保护属性值不被随意修改
私有化属性并提供getter,setter对外接口
继承:代码重用,是多态的基础
extends关键字
默认的根类是Object,单根继承
方法的重写:
有继承关系
方法名相同,参数列表相同,返回值相同或小于父类,访问修饰符不能小于父类,异常不能严于父类
构造方法:
默认的构造方法都会先走父类无参构造方法
用super指定的构造方法,调用指定构造方法前,参照第一条
多态:
以父类做参数类型的
父类中方法如果被子类重写,那么在使用父类类型调用该方法时,则看具体的子类类型,决定调用的是哪个重写后的方法
以父类做返回值类型的
如果只调用父类方法,则没有问题
如果需要调用子类特有方法,则需要向下强制转型
抽象类和接口:
abstract关键字:定义抽象类和方法
interface关键字:定义接口
implements关键字:实现接口
相同点:都不能被实例化,都可以有抽象方法
不同点:接口的所有方法都默认是:public abstract类型
接口的所有属性都默认是:public static final类型
抽象类用来被继承,主要目的是代码重用
接口用来扩展功能,可以实现多个接口
异常:
异常的分类:Throwable–>Error , Exception
Exception–>checked异常,运行期异常(RuntimeException)
异常的处理:
try{有可能产出异常的代码}
catch(有可能的异常类型 e){打印堆栈/打印异常信息…}
finally{最终块,往往用于关闭资源}
异常类的定义:
自定义异常类,继承已知的异常类
写出有参构造,并用super调用父类的有参构造

二.QuickHit项目实战

1.玩家类

public class Player {
    private String name;
    private int curLevel=1;//当前级别编号
    private int curScore;
    private long startTime=System.currentTimeMillis();
    private long usedTiem;
    public Player(String name) {
        this.name = name; }
    public  void play(){
        Game g=new Game();
        g.player=this;
        g.run();
        System.out.println("恭喜"+name+",您已通关"); }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getCurLevel() {
        return curLevel;
    }
    public void setCurLevel(int curLevel) {
        this.curLevel = curLevel;
    }
    public int getCurScore() {
        return curScore;
    }
    public void setCurScore(int curScore) {
        this.curScore = curScore;
    }
    public long getStartTime() {
        return startTime;
    }
    public void setStartTime(long startTime) {
        this.startTime = startTime;
    }
    public long getUsedTiem() {
        return usedTiem;
    }
    public void setUsedTiem(long usedTiem) {
        this.usedTiem = usedTiem;
    }

2.游戏类

public class Game implements LevelParam {
    Player player = new Player("sam");
    //生成一串字符
    public String getStrings() {
        int curLvl = player.getCurLevel();
        Level lvl = LEVELS[curLvl - 1];
        String str = "";
        for (int i = 0; i < lvl.getCharCnt(); i++) {
            int ranNum = (int) (Math.random() * 10);
            str += ranNum;
        }
        return str;
    }
    //流程控制
    public void run(){
        Scanner sc=new Scanner(System.in);
        System.out.println("欢迎"+player.getName()+"来到quickHit峡谷!!!");
        while (player.getCurLevel()<=6){
        int lvlNum=player.getCurLevel();
        Level lvl=LEVELS[lvlNum-1];
        for (int i = 1; i <= lvl.getInputNum(); i++) {
            System.out.println("当前级别为:" + player.getCurLevel() + ",积分为:" + player.getCurScore()
                    + ",已用时间为:" + player.getUsedTiem()/1000+"秒");
            String out = getStrings();
            System.out.println(out);
            System.out.println("请输入对应的字符串:");
            String input = sc.next();
            long now = System.currentTimeMillis();
            player.setUsedTiem(now - player.getStartTime());
            if (!input.equals(out)) {//输入与输出不一致
                System.out.println("输入错误");
                System.exit(-1);
            } else if (player.getUsedTiem() / 1000 > lvl.getLimitTime()) {
                System.out.println("输入超时,游戏结束");
                System.exit(-1);
            }
            //输入正确且未超时的情况
            player.setCurScore(player.getCurScore() + lvl.getPerScore());//加分
        }

       player. setCurLevel(player.getCurLevel()+1);
        player.setUsedTiem(0);
        player.setStartTime(System.currentTimeMillis());
        }
    }

}

3.等级类

public class Level {
    private int lvlNum=1;//级别号
    private int charCnt;//当前级别每次输出的字符数
    private int perScore;//每次输入后的正确得分
    private long limitTime;//当前级别规定时间
    private int inputNum;//输入次数
    public int getLvlNum() {
        return lvlNum; }
    public void setLvlNum(int lvlNum) {
        this.lvlNum = lvlNum;}
        public int getCharCnt() {
        return charCnt; }
        public void setCharCnt(int charCnt) {
        this.charCnt = charCnt; }
        public int getPerScore() {
        return perScore; }

    public void setPerScore(int perScore) {
        this.perScore = perScore;
    }

    public long getLimitTime() {
        return limitTime;
    }

    public void setLimitTime(long limitTime) {
        this.limitTime = limitTime;
    }

    public int getInputNum() {
        return inputNum;
    }

    public void setInputNum(int inputNum) {
        this.inputNum = inputNum;
    }

    public Level(int lvlNum, int charCnt, int perScore, long limitTime, int inputNum) {
        this.lvlNum = lvlNum;
        this.charCnt = charCnt;
        this.perScore = perScore;
        this.limitTime = limitTime;
        this.inputNum = inputNum;

    }

4.等级接口

public interface LevelParam {
    public final static Level LEVELS[]={
       new Level(1,2,3,20,5),
            new Level(2,3,5,40,8),
            new Level(3,4,7,60,10),
            new Level(4,5,8,55,8),
            new Level(5,6,9,50,6),
            new Level(6,7,10,40,4)
    };

}

5.测试类

public class Test {
    public static void main(String[] args) {
        Player p=new Player("sam");
        p.play();
    }}

本文地址:https://blog.csdn.net/Zhuuu_ZZ/article/details/107623273

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
Copyright © 2017-2020  萬仟网 保留所有权利. 粤ICP备17035492号