java面向对象随机字符游戏(代码在最后)

1.游戏的要求:

根据输出的随机字符,输入对应的字符进行判断.正确进入下一关,级别、字符数量,积分随之升高,错误则直接结束.注:每升一级,时间归零重新开始计时,且运用面向对象思想。

2.实现思路:

第一步:创建 游戏类(a),各级别的公共类(b),各级别的数据常量类(c),玩游戏类(d),最终测试类(e)。

第二步:在b类中声明私有变量:级别号、字符串长度、字符串次数、闯关时间限制、输入正确的的积分.完成后对其进行构造及get(获取)和set(设置)。

第三步:在c类中声明一个存储常量且长度为6的数组(因为共有6级)。创建好后用静态修饰符向数组中添加数据(该数组为b类的对象数组实例化)。

第四步:在d类中声明私有变量:当前级别号、当前级别积分、开始时间、已用时间。声明好后对其进行构造及get(获取)和set(设置).最后创建玩游戏的方法。

第五步:在a类中声明私有的类型是d类的变量F,并构造。

编写逻辑,大致分为三步:

        1.通过构造方法将d类传进a类的变量F。

        2.输出字符串。获取级别号、把a类和d类的级别统一。生成随机字符输出并返回

        3.输入字符比较并判断。双层判断,第一层判断输入是否正确:不正确游戏结束,正确进入第二               层、第二层判断输入时间是否超时:超时游戏结束,没超时就计算总积分和所用时间然后返回             级别、所用时间、总积分.

第六步:在e类中创建d类对象实例并调用。

3.效果展示:

1.Game游戏类

 2.Level级别类

 3.LevelParam级别常量数据类

 4.Player玩游戏类

 5.Test测试类

 6.最终运行效果

 4.代码:

1.Game

package com.ytzl.Quick;

import java.util.Random;

public class Game {
    private Player player;
    /**
     * 通过构造方法,传入玩家信息
     * @param player
     *
     * */
    public Game(Player player) {
        this.player = player;
    }

    /**
    * 输出字符串
    * @return 字符串用于和玩家输入比较
    * */
    public String printStr(){
        //从创建好的player对象中获取级别号
        //因为我们需要将Game中和player中的两个方法对应的级别统一
        int strLength = LevelParam.levels[player.getLevelNo()-1].getStrLength();
        //随机
        Random random = new Random();
        //操作字符串
        StringBuffer buffer = new StringBuffer();
//        buffer.append()字符串的连接
        for (int i = 0; i < strLength; i++) {
            //生成随机数
            int rand = random.nextInt(3);
            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;
                default:
                    buffer.append("?");
                    break;
            }
        }
        System.out.println(buffer.toString());
        return buffer.toString();
    }
    /**
    * 根据比较结果输出相应信息
     * @param out 游戏输出字符
     * @param in 玩家输入字符
    * */
    public void printResult(String out,String in){
        boolean flag;
        if (out.equals(in)){
            flag = true;
        }else {
            flag = false;
        }
        //第一层:是否输入正确
        if (flag){
            //第二层:是否超时
            //currentTime :输入正确之后拿到的时间
            long currentTime = System.currentTimeMillis();
            if ((currentTime-player.getStartTime())/1000>LevelParam.levels[player.getLevelNo()-1].getTimeLimit()){
                System.out.println("已超时!游戏结束!");
                System.exit(1);
            }else {
                //没有超时
                //计算当前积分
                //当前积分+各级别给的积分
                player.setCurrScore(player.getCurrScore()+LevelParam.levels[player.getLevelNo()-1].getPetScore());
                //当前所用时间 用每一次输入正确之后的时间减去初始进入游戏的时间
                player.setElapsedTime((int)(currentTime-player.getStartTime())/1000);
                System.out.println("输入正确,您的级别为:"+player.getLevelNo()+
                        ",您的积分为:"+player.getCurrScore()+",已用时间为:"+
                        player.getElapsedTime() +"秒。"
                );
                //判断是否闯关成功
                if (player.getLevelNo()==6){
                    int score = LevelParam.levels[player.getLevelNo()-1].getStrTimes() *
                            LevelParam.levels[player.getLevelNo()-1].getPetScore();
                    System.out.println("闯关成功!");
                    System.out.println("总积分为:"+score);
                    System.exit(1);
                }
            }
        }else {
            System.out.println("输入错误!退出");
            System.exit(1);
        }
    }
}

2.Level

package com.ytzl.Quick;

public class Level {
    private int levelNo;//各级别号
    private int strLength;//各级别输入字符串的长度
    private int strTimes;//各级输出字符串的次数
    private int timeLimit;//各级闯关时间限制
    private int petScore;//各级输入正确得分

    public Level() {
    }

    public Level(int levelNo, int strLength, int strTimes, int timeLimit, int petScore) {
        this.levelNo = levelNo;
        this.strLength = strLength;
        this.strTimes = strTimes;
        this.timeLimit = timeLimit;
        this.petScore = petScore;
    }

    public int getLevelNo() {
        return levelNo;
    }

    public void setLevelNo(int levelNo) {
        this.levelNo = levelNo;
    }

    public int getStrLength() {
        return strLength;
    }

    public void setStrLength(int strLength) {
        this.strLength = strLength;
    }

    public int getStrTimes() {
        return strTimes;
    }

    public void setStrTimes(int strTimes) {
        this.strTimes = strTimes;
    }

    public int getTimeLimit() {
        return timeLimit;
    }

    public void setTimeLimit(int timeLimit) {
        this.timeLimit = timeLimit;
    }

    public int getPetScore() {
        return petScore;
    }

    public void setPetScore(int petScore) {
        this.petScore = petScore;
    }

}

3.LevelParam

package com.ytzl.Quick;

public class LevelParam {
    //final : 最终的 无法再改变 可以修饰非抽象类
    //用final修饰的变量 我们叫做常量 表示:值一旦给定就无法改变
    //static: 静态变量
    //直接可以通过 类名.静态方法 类名.静态变量
    //所以用final和static 一起修饰的变量就是全局变量
    //表示:值一旦给定就无法改变 并且可以通过类名调用
    public final static Level levels[]=new Level[6];//对应六个级别
    static {
        levels[0] = new Level(1,2,10,30,1);
        levels[1] = new Level(2,3,9,35,2);
        levels[2] = new Level(3,4,8,40,4);
        levels[3] = new Level(4,5,7,45,6);
        levels[4] = new Level(5,6,6,50,8);
        levels[5] = new Level(6,7,5,55,10);
    }
}

4.Player

package com.ytzl.Quick;

import java.util.Scanner;

public class Player {
    private int levelNo;//当前级别号
    private int currScore;//当前级别积分
    private Long startTime;//开始时间
    private int elapsedTime;//已用时间

    public Player() {
    }

    public Player(int levelNo, int currScore, Long startTime, int elapsedTime) {
        this.levelNo = levelNo;
        this.currScore = currScore;
        this.startTime = startTime;
        this.elapsedTime = elapsedTime;
    }

    public int getLevelNo() {
        return levelNo;
    }

    public void setLevelNo(int levelNo) {
        this.levelNo = levelNo;
    }

    public int getCurrScore() {
        return currScore;
    }

    public void setCurrScore(int currScore) {
        this.currScore = currScore;
    }

    public Long getStartTime() {
        return startTime;
    }

    public void setStartTime(Long startTime) {
        this.startTime = startTime;
    }

    public int getElapsedTime() {
        return elapsedTime;
    }

    public void setElapsedTime(int elapsedTime) {
        this.elapsedTime = elapsedTime;
    }

    //玩游戏
    public void play(){
        Game game = new Game(this);
        Scanner scanner = new Scanner(System.in);
        for (int i = 0; i < LevelParam.levels.length; i++) {
            //晋级
            this.levelNo += 1;
            //2.时间开始计时
            this.startTime = System.currentTimeMillis();
            //3.积分清零
            this.currScore = 0;
            //4.内层循环 循环的是电脑输出,玩家输入,比较
            for (int j = 0; j < LevelParam.levels[levelNo - 1].getStrTimes(); j++) {
                //4.1电脑输出字符串
                String out = game.printStr();
                //4.2接收用户输入
                String in = scanner.next();
                //4.3比较,并判断结果
                game.printResult(out,in);
            }
        }
    }
}

5.Test

package com.ytzl.Quick;

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值