Java面向对象总复习-QuickHit

1、创建玩家级别类Level.java

 1 package com.bdqn;
 2 /**
 3  * 1.玩家级别类
 4  * @author pc
 5  *
 6  */
 7 public class Level {
 8     /**
 9      * 级别号
10      */
11     private int levelNo;
12     /**
13      * 各级别一次输出字符串的长度
14      */
15     private int strLength;
16     /**
17      * 各级别输出字符串的次数
18      */
19     private int strTime;
20     /**
21      * 各级别闯关的时间限制
22      */
23     private int timeLimit;
24     /**
25      * 各级别成功输入一次的得分
26      */
27     private int perScore;
28
29     public Level() {
30     }
31     /**
32      * 有参数构造赋值
33      * @param levelNo 级别号
34      * @param strLength 各级别一次输出字符串的长度
35      * @param strTime 各级别输出字符串的次数
36      * @param timeLimit 各级别闯关的时间限制
37      * @param perScore 各级别成功输入一次的得分
38      */
39     public Level(int levelNo, int strLength, int strTime, int timeLimit,
40             int perScore) {
41         this.levelNo = levelNo;
42         this.strLength = strLength;
43         this.strTime = strTime;
44         this.timeLimit = timeLimit;
45         this.perScore = perScore;
46     }
47     public int getLevelNo() {
48         return levelNo;
49     }
50     public void setLevelNo(int levelNo) {
51         this.levelNo = levelNo;
52     }
53     public int getStrLength() {
54         return strLength;
55     }
56     public void setStrLength(int strLength) {
57         this.strLength = strLength;
58     }
59     public int getStrTime() {
60         return strTime;
61     }
62     public void setStrTime(int strTime) {
63         this.strTime = strTime;
64     }
65     public int getTimeLimit() {
66         return timeLimit;
67     }
68     public void setTimeLimit(int timeLimit) {
69         this.timeLimit = timeLimit;
70     }
71     public int getPerScore() {
72         return perScore;
73     }
74     public void setPerScore(int perScore) {
75         this.perScore = perScore;
76     }
77
78
79 }

Level.java

2、游戏级别参数设置类LevelParam.java

 1 package com.bdqn;
 2 /**
 3  * 2.游戏级别参数设置
 4  */
 5 public class LevelParam {
 6      //规定游戏级别为6级
 7     public final static Level[] levels=new Level[6];
 8
 9     //设置各个级别的游戏参数值
10     static{
11         levels[0]=new Level(1, 2, 10, 30, 1);
12         levels[1]=new Level(2, 3, 9, 26, 2);
13         levels[2]=new Level(3, 4, 8, 22, 5);
14         levels[3]=new Level(4, 5, 7, 18, 8);
15         levels[4]=new Level(5, 6, 6, 14, 10);
16         levels[5]=new Level(6, 7, 5, 10, 15);
17     }
18
19 }

LevelParam.java

3、玩家类Player.java

 1 package com.bdqn;
 2
 3 import java.util.Scanner;
 4
 5 /**
 6  * 3.玩家类
 7  * @author pc
 8  *
 9  */
10 public class Player {
11     /**
12      * 玩家的级别号
13      */
14     private int levelNo;
15     /**
16      * 当前积分
17      */
18     private int curScore;
19     /**
20      * 各级别的开始时间
21      */
22     private long startTime=0;
23     /**
24      * 各级别已用时间
25      */
26     private int elapsedTime;
27     public int getLevelNo() {
28         return levelNo;
29     }
30     public void setLevelNo(int levelNo) {
31         this.levelNo = levelNo;
32     }
33     public int getCurScore() {
34         return curScore;
35     }
36     public void setCurScore(int curScore) {
37         this.curScore = curScore;
38     }
39     public long getStartTime() {
40         return startTime;
41     }
42     public void setStartTime(long startTime) {
43         this.startTime = startTime;
44     }
45     public int getElapsedTime() {
46         return elapsedTime;
47     }
48     public void setElapsedTime(int elapsedTime) {
49         this.elapsedTime = elapsedTime;
50     }
51     /**
52      * 玩家玩游戏
53      */
54     public void play(){
55         /**
56          * 玩家玩游戏
57          * this: 本类对象的
58          */
59         Game game=new Game(this);
60         /**
61          * 外层循环一次,内层循环一周
62          * 外层:关数=级别
63          * 内层:每关的里的局数
64          * 循环一次晋级一次,一次通关成功
65          */
66         for (int i = 0; i < LevelParam.levels.length; i++) {
67             //1.玩家记录游戏级别,晋级
68             this.levelNo+=1;
69
70             //2.晋级后计时清零,积分清零
71             //开始时间=当前系统时间
72             this.startTime=System.currentTimeMillis();
73             this.curScore=0;
74
75             //3.内层循环,循环一次完成一次字符串的输出、输入,比较
76             for (int j = 0; j < LevelParam.levels[levelNo-1].getStrTime(); j++) {
77                 //3.1 游戏输出字符串
78                 String outStr=game.printStr();
79
80                 //3.2 接受用户控制台输入
81                 Scanner input=new Scanner(System.in);
82                 String inStr=input.next();
83
84                 //3.3 游戏判断玩家输入是否正确,并输出相应结果
85                 game.printResult(outStr,inStr);
86             }
87
88         }
89     }
90 }

Player.java

4、游戏类Game.java

  1 package com.bdqn;
  2
  3 import java.util.Random;
  4
  5
  6
  7 public class Game {
  8     /**
  9      *1. 引入玩家类
 10      */
 11     private Player player;
 12
 13     /**
 14      * 2.游戏被玩家玩
 15      * @param player
 16      */
 17     public Game(Player player) {
 18         this.player=player;
 19     }
 20     /**
 21      * 3.游戏随机输出字符串
 22      * @return 输出的字符串,用于和玩家输入的比较
 23      */
 24     public String printStr() {
 25         //1.获取一次输出的字符串的长度
 26         int strLength=LevelParam.levels[player.getLevelNo()-1].getStrLength();
 27         //2.定义动态拼接字符串的对象
 28         StringBuffer sbf=new StringBuffer();
 29         //3.创建生成随机数的对象
 30         Random random=new Random();
 31         //4.循环拼接生成要输出的字符串
 32         for (int i = 0; i < strLength; i++) {
 33             //4.1 产生随机数
 34             int rand=random.nextInt(strLength);
 35             //4.2 根据随机数拼接字符串
 36             switch (rand) {
 37             case 0:
 38                   sbf.append(">");
 39                 break;
 40             case 1:
 41                  sbf.append("<");
 42                 break;
 43             case 2:
 44                  sbf.append("*");
 45                 break;
 46             case 3:
 47                 sbf.append("&");
 48                 break;
 49             case 4:
 50                 sbf.append("%");
 51                 break;
 52             case 5:
 53                 sbf.append("#");
 54                 break;
 55             }
 56         }
 57         //5.输出字符串
 58         System.out.println(sbf.toString());
 59
 60         //6.返回字符串用于和玩家输入做对比
 61         return sbf.toString();
 62     }
 63     /**
 64      * 4.游戏判断玩家输入是否正确,并输出相应结果
 65      * @param outStr 游戏打印的输出字符串
 66      * @param inStr  玩家输入的字符串
 67      */
 68     public void printResult(String outStr, String inStr) {
 69         //1.输入正确
 70         if(outStr.equals(inStr)){
 71              //1.1 获取当前系统时间(毫秒为单位)
 72             long currentTime=System.currentTimeMillis();
 73             //1.2游戏时间=当前时间-开始时间(秒)
 74             long palytime=(currentTime-player.getStartTime())/1000;
 75             //1.3游戏规定的时间限制
 76             long limitTime=LevelParam.levels[player.getLevelNo()-1].getTimeLimit();
 77             //1.4判断游戏是否超时
 78             if(palytime>limitTime){
 79                 //1.4.1 超时
 80                   System.out.println("你输入太慢,已经超时,退出!!");
 81                   System.exit(1);
 82               }else{
 83                   //1.4.2 没有超时
 84                   //1.4.2.1 计算当前积分=原来积分+当前等级游戏积分
 85                   //原来积分
 86                   int currentScore=player.getCurScore();
 87                   //当前等级成功输入一次的游戏积分
 88                   int playPerScore=LevelParam.levels[player.getLevelNo()-1].getPerScore();
 89                   //玩完当局之后设置当前的积分
 90                   player.setCurScore(currentScore+playPerScore);
 91                   //1.4.2.2 计算已用时间
 92                   player.setElapsedTime((int)palytime);
 93                   //1.4.2.3 输出当前积分,当前级别,已用时间
 94                   System.out.println("输入正确,您的级别"
 95                           +player.getLevelNo()
 96                           +",您的积分"+player.getCurScore()
 97                           +",已用时间"+player.getElapsedTime());
 98                   //1.4.2.4 判断用户是否已经闯过最后一关
 99                   if(player.getLevelNo()==LevelParam.levels.length){
100                       //计算闯关分数
101                       //当前局成功一次的积分
102                       int perScore=LevelParam.levels[player.getLevelNo()-1].getPerScore();
103                       //获取当前关的局数
104                       int perNum=LevelParam.levels[player.getLevelNo()-1].getStrTime();
105                       //计算每关的总积分
106                       int score=perScore*perNum;
107                       //判断是否最后通关
108                       if(player.getCurScore()==score){
109                           System.out.println("恭喜你已经通关成功,成为绝世高手!");
110                           System.exit(0);
111                       }
112
113                   }
114               }
115         }else{
116          //2.输入不正确
117             System.out.println("输入错误,退出!");
118             System.exit(0);
119         }
120     }
121
122     public Player getPlayer() {
123         return player;
124     }
125     public void setPlayer(Player player) {
126         this.player = player;
127     }
128
129 }

Game.java

5、测试类Test.java

 1 package com.bdqn;
 2
 3 public class Test {
 4
 5     /**
 6      * @param args
 7      */
 8     public static void main(String[] args) {
 9       Player player=new Player();
10       player.play();
11
12     }
13
14 }

Test.java

时间: 2024-08-01 10:44:00

Java面向对象总复习-QuickHit的相关文章

java面向对象基础复习

this关键字用法: 表示当前对象的引用,即调用成员属性和方法时,表示当前正在调用的对象 调用其他构造方法(必须放在第一行): super关键字 指向自己(直接)父类对象的一个指针,可以调用父类的成员属性和方法 调用父类中的某一个构造函数 面向对象三大特征: 继承 继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力. 子类拥有父类非private的属性和方法 JAVA不支持多继承,继承关系是传递的 父类是子类的一般化,子类是父类的特殊化(具体化) 封装 属性描述

Java年度总复习基础部分(五)

JDBC数据库连接 1.Jdbc是什么? 我们之前提到了数据库,如何使用java代码来操作数据库呢,程序要通过sql语句来操作数据库库,而必须拥有一个类库,类库提供sql语句的执行方法 jdbc就是因此而产生的,jdbc是java中提供的一个接口 允许程序员通过这个接口来操作数据库. 2.如何使用jdbc来完成数据的增删该查 Jdbc拥有自己的驱动使用前需要加载 Jdbc加载驱动获得连接 Jdbc执行sql语句 Jdbc关闭连接 从连接数据库到操作数据库的详细步骤如下 首先加载驱动程序 clas

复习 深入理解Java面向对象程序设计1

复习 深入理解Java面向对象程序设计 类是一种抽象的概念,对象是类的一种具体表示形式,是具体的概念.先有类,然后由类生成对象(Object).对象又叫做实例(Instance). 类由两大部分构成:属性及方法.属性一般用名词来表示,方法一般用动词来表示. 如果一个Java源文件定义了多个类,那么这些类中最多只有一个类是public的,换句话说,定义的多个类可以都不是public的. 在Java中进行方法的参数传递时,无论传递的是原生数据类型还是引用类型,参数传递方式统一是传值(pass by

java面向对象复习

Java面向对象复习 1.类是抽象的,对象是具体的 2.方法的重载: 条件: (1):在同一个类中 (2):方法名称相同 (3):方法参数不同 3.构造方法: 语法: (1)必须和类名相同 (2)必须没有返回类型,可以重载 (3)如果没有自定义一个构造方法,系统会为自动创建一个无参构造方法 (4)如果已经自定义了一个构造方法,系统就不会创建这个无参的构造方法 作用: (1)初始化类中的成员变量 (2)完成一些必须的初始化工作 4.this相当于当前对象,一般情况下可以省略 5.作用域: 类的作用

实验十八 总复习

实验十八  总复习 实验时间 2018-12-30 1.实验目的与要求 (1) 综合掌握java基本程序结构: (2) 综合掌握java面向对象程序设计特点: (3) 综合掌握java GUI 程序设计结构: (4) 综合掌握java多线程编程模型: (5) 综合编程练习. 2.实验内容和步骤 任务1:填写课程课后调查问卷,网址:https://www.wjx.cn/jq/33108969.aspx. 任务2:综合编程练习 练习1:设计一个用户信息采集程序,要求如下: (1)  用户信息输入界面

java面向对象编程(三)--类变量、类方法

1.什么是类变量? 类变量是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量. 如何定义类变量? 定义语法:     访问修饰符 static 数据类型 变量名; 如何访问类变量?     类名.类变量名 或者 对象名.类变量名 案例:有一群小孩玩堆雪人,不时有新的小朋友加入,请问如何知道现在共有多少人在玩?请使用面向对象的思想,编写程序解决. public class Demo113{ public static

黑马程序员---java基础-Java面向对象

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 面向对象是Java语言区别c语言的一个重要特点,也是学好Java必须掌握的重要部分.接下来我会根据视频教程,总结对Java面向对象的理解与应用,以及牵涉到的一些知识点. 一.面向对象 面向对象的特点: 1. 是一种符合人们思考习惯的思想 2. 可以将复杂的事情简单化 3.将程序员从执行者转换成了指挥者 4. 完成需求时: a)先要去找具有所需的功能的对象来用. b) 如果该对象不存在,那么创建

JAVA SE 基础复习-基本程序设计(1)

1.java基本数据类型 int         4      最大值 0x7fffffff 2147483647=2的31次方-1  首位为符号位   最小值-2147483648  0x80000000  补码存储 首位不变 其他位取反后加1 short     2      最大值2^15-1  32767  最小值-2^15  -32768 long       8     最大值2^63-1    最小值-2^63 byte       1     最大值2^7-1  127  最小值

2062326 齐力锋 实验四《Java面向对象程序设计Android开发》实验报告

北京电子科技学院(BESTI) 实 验 报 告 课程: 程序设计与数据结构  班级: 1623  姓名: 齐力锋 学号: 20162326 成绩: 指导教师: 娄嘉鹏/王志强 实验日期: 2017年5月26日 实验密级:非密级 预习程度: 优良 实验时间: 2 Hours 仪器组次: 必修/选修: 必修 实验序号: 04 实验名称:Java面向对象程序设计Android开发 实验内容 1.Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBI