打字游戏

打字游戏

一、需求概述
在这里插入图片描述
二、主要类
1.玩家类(Player)
2.游戏类(Game )
3.级别类(Level)

次要类:
4.规则接口
5.测试类

三、具体步骤
1、玩家类
成员变量:
private String name; //玩家名称
private int currScore; //玩家当前级别积分(currScore)
private long startTime; //当前级别开始时间(startTime)
private long uesdTime ; //当前级别已用时间(elapsedTime)
private int curlevel =1; //当前级别
成员方法:
玩游戏:play()

2、游戏类
成员变量:
private Player p; //玩家对象
成员方法:
随机生成指定长度字符串:showStr()
正常玩游戏:run()

3、等级类
成员变量:
private int levelNo; //级别编号
private int strLength; //字符串长度
private int strTimes; //输入次数
private int timeLimit; //限制时间
private int perScore; //每次输入正确的积分
成员方法:

四、代码实现
1.玩家类:

public class Player {

    private String name;        //玩家名称
    private int currScore;      //玩家当前级别积分(currScore)
    private long startTime = System.currentTimeMillis();   //当前级别开始时间(startTime)
    private long uesdTime ;    //当前级别已用时间(elapsedTime)
    private int curlevel =1;      //当前级别

    public void play(){
        Game g = new Game();
        g.setP(this);
        g.run();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    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 long getUesdTime() {
        return uesdTime;
    }

    public void setUesdTime(long uesdTime) {
        this.uesdTime = uesdTime;
    }

    public int getCurlevel() {
        return curlevel;
    }

    public void setCurlevel(int curlevel) {
        this.curlevel = curlevel;
    }
}

2.游戏类

public class Game {
    private Player p;
    private Scanner sc = new Scanner(System.in);
    public Player getP() {
        return p;
    }

    public void setP(Player p) {
        this.p = p;
    }

    public String showStr(){        //随机生成一串字符串,根据用户等级生成不同长度的字符串
        int curlevel = p.getCurlevel();
        int lvellength = LevelParm.levels[curlevel-1].getStrLength();
        String str = "";
        for(int i =0 ;i<lvellength;i++){
            //全部小写97~122
            int a = (int)(97+(Math.random()*26));
            char ch = (char)a;
            str+=ch;
        }
        System.out.println(str);
        return str;
    }
/**
 * 基本功能已实现
 * */
    public void run(){
        System.out.println("欢迎来到打字通!");
        System.out.println("请输入您的姓名");
        String name = sc.next();
        p.setName(name);
        for (int j = 0; j < 6; j++) {
            int curlevel = p.getCurlevel();     //获取用户当前等级
            int cnt = LevelParm.levels[curlevel-1].getStrTimes();     //每轮多少次
            int limit = LevelParm.levels[curlevel-1].getTimeLimit();  //每个等级要到多少轮
            int perScore = LevelParm.levels[curlevel-1].getPerScore();//每次获得的积分
            for (int i = 0; i < cnt; i++) {
                System.out.println("实例:");
                String s = showStr();           //获取随机生成字符串
                long curTime = System.currentTimeMillis();
                long useTime = curTime - p.getStartTime();
                p.setUesdTime(useTime);
                System.out.println("请输入:");
                String input = sc.next();       //接收用户输入的字符串
                if(!s.equals(input)){           //匹配字符串
                    System.out.println("输入错误,游戏结束");
                    System.exit(-1);
                }else if(useTime>limit*1000){
                    System.out.println("输入时间超时,游戏结束");
                    System.exit(-2);
                } 
                p.setCurrScore(p.getCurrScore()+perScore);
                System.out.println("您的目前积分:"+p.getCurrScore()+"\t您的级别:"+p.getCurlevel()+"\t已用时间"+useTime/1000);
            }
            if(p.getCurlevel()==6){             //等级为6则通关,否则会出现7级情况
                System.out.println("恭喜通关");
                System.exit(1);
            }
            p.setCurlevel(p.getCurlevel()+1);
            System.out.println("恭喜升级!");
            p.setStartTime(System.currentTimeMillis());     //重新设置开始时间
        }
    }
    }

3.等级类

public class Level {
    private int levelNo;        //级别编号
    private int strLength;      //字符串长度
    private int strTimes;       //输入次数
    private int timeLimit;      //限制时间
    private int perScore;       //每次输入正确的积分

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

    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 getPerScore() {
        return perScore;
    }

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

4.规则接口

public interface LevelParm {
    Level[] levels = {
            new Level(1,10,3,50,3),
            new Level(2,20,3,40,5),
            new Level(3,20,3,30,6),
            new Level(4,30,3,30,7),
            new Level(5,30,3,30,8),
            new Level(6,40,3,40,9),
    };
}

5.测试类

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

实际效果
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值