本段时间的总结和QuickHit项目

在这段时间的学习中,主要学习了封装,继承和多态,其中有几个需要注意的,也是我比较薄弱的方面:

1.类继承的注意点:类的构造方法是不可以被继承的;虽然不能继承构造方法,但是我们可以 在子类的构造方法中 通过关键字 super 来调用到 父类的构造方法
2.构造方法一旦程序员自己给定了,那么jvm不再提供默认的 无参构造方法;
3.abstract关键字的注意点:
   (1)不可以和final关键字一起使用,因为abstract关键字 是要求子类一定要重写父类的方法,但是final是不允许重写的;
   (2)不可以和private关键字一起使用,因为private是私有的,不能被继承的内容,代表根本不存在方法重写,因此不能一起使用;
   (3)不可以和static一起使用,因为static是静态修饰符,代表不需要实例化对象,直接用类名就可以调用方法, 那么如果是抽象方法,没有方法实现调用方法会出错,所以编译              器禁止 abstract和static一起使用
4.多态的三要素:
   (1)一定要有继承
   (2)一定要重写
   (3)父类的指针,指向子类的对象。

下面是QuickHit的代码:

import java.util.*;


class Game {


private Player player;
public Game(Player player){

this.player = player;
}

public String printStr(){

int levelNo = player.getLevelNo() - 1;

int strlen = LevelInitial.levelsArr[levelNo].getStrlength();

Random random = new Random();

StringBuffer buffer = new StringBuffer();

for(int i = 0; i < strlen; i++){

int rand = random.nextInt(strlen);

switch(rand){

case 0:
buffer.append("<");
break;
case 1:
buffer.append(">");
break;
case 2:
buffer.append("&");
break;
case 3:
buffer.append("*");
break;
case 4:
buffer.append("%");
break;
case 5:
buffer.append("#");
break;
case 6:
buffer.append("@");
break;
}
}

System.out.println(buffer);

return buffer.toString();
}

public void result(String out, String in){

if(out.equals(in)){

long currentTime = System.currentTimeMillis();

if((currentTime - player.getStartTime())/ 1000 <= LevelInitial.levelsArr[player.getLevelNo() -1].getTimeLimit()){

int newScore = player.getScore()+ LevelInitial.levelsArr[player.getLevelNo() -1].getPerScore();

player.setScore(newScore);

long time = (currentTime - player.getStartTime())/ 1000;

player.setElapseTime(time);

System.out.println("输入正确,您的等级是:" + player.getLevelNo() + ", 您的积分是:" + player.getScore() + ", 您的用时为:" + player.getElapseTime() + "秒");

if(player.getLevelNo() == 6){

int sum = 0;

for(int j = 0; j < LevelInitial.levelsArr.length; j++ ){

    int currentScore = LevelInitial.levelsArr[j].getPerScore() * LevelInitial.levelsArr[j].getStrTime();

    sum += currentScore;  
   }

if(player.getScore() == sum){

System.out.println("恭喜您全部通关!!真棒!!");
System.exit(0);
}

}

}else{
System.out.println("输入正确,但是时间超时,游戏结束!!游戏退出!!");
System.exit(1);
}

}else{
System.out.println("输入错误,游戏结束!!游戏退出!!");

System.exit(1);

}


}

}

class Level {

private int levelNo;

private int strlength;

private int timeLimit;

private int strTime;

private int perScore;

public Level(int levelNo, int strlength, int timeLimit, int strTime, int perScore){

this.levelNo = levelNo;
this.strlength = strlength;
this.timeLimit = timeLimit;
this.perScore = perScore;
this.strTime = strTime;
}

public int getLevelNum(){

return this.levelNo;
}

    public int getTimeLimit(){

return this.timeLimit;
}
    
     public int getStrTime(){

return this.strTime;
}

     public int getStrlength(){
 
  return this.strlength;
  }
     
     public int getPerScore(){
 
  return this.perScore;
  }
}

class LevelInitial {

public static Level[] levelsArr = new Level[6];

static {

levelsArr[0] = new Level(1, 2, 30, 5, 1);
levelsArr[1] = new Level(2, 3, 25, 4, 2);
levelsArr[2] = new Level(3, 4, 22, 3, 5);
levelsArr[3] = new Level(4, 5, 20, 3, 8);
levelsArr[4] = new Level(5, 6, 18, 3, 10);
levelsArr[5] = new Level(6, 7, 15, 3, 15);
}

}







class Player {

private int levelNo;

private long startTime;

private int score;

private long elapseTime;

public void setLevelNo(int levelNo){

this.levelNo = levelNo;


}

public void setScore(int score){

this.score = score;
}

    public void setStartTime(long time){

this.startTime = time;
}

    public void setElapseTime(long elapse){

   this.elapseTime = elapse;
    }

    public int getLevelNo(){
   
    return this.levelNo;
    }
    
    public int getScore(){
   
    return this.score;
    }
 
    public long getStartTime(){
 
      return this.startTime;
    }
 
    public long getElapseTime(){
 
      return this.elapseTime;
    }

    public void play(){

    Game game = new Game(this);

    Scanner input = new Scanner(System.in);

    for(int i = 0; i < LevelInitial.levelsArr.length; i++){

    levelNo += 1;

    startTime = System.currentTimeMillis();

    for(int j = 0; j < LevelInitial.levelsArr[levelNo -1].getStrTime();j++){

    String out = game.printStr();

    String in = input.next();

    game.result(out, in);
   
    }  
    }
    }
}



public class Test {

public static void main(String[] args){

Player p = new Player();

p.play();
}
}

你可能感兴趣的:(本段时间的总结和QuickHit项目)