• QuickHit快速击键小程序 --S2.4.5


    我们现在要做一个项目

    一个小小的程序

    叫做快速击键

    很明了的目的

    就是在规定时间内,每次出现一组字母的组合,这个字母只能在DFJK中生成

    然后输入相应的文字,按回车 自动判断输入的是否正确

    在规定时间内输入完要求的组合数的字符串可以晋级

    一共有六个等级

    首先等级类

    public class Level {
        private int levelNo;    //等级编号
        private int steLength;    //当前等级字符串的长度
        private int strTimes;    //当前等级字符串的出现次数
        private int timeLimit;    //当前等级的总时间
        private int perScore;    //每一个键的积分
    
        public Level(int levelNo, int steLength, int strTimes, int timeLimit,
                int perScore) {
            super();
            this.levelNo = levelNo;
            this.steLength = steLength;
            this.strTimes = strTimes;
            this.timeLimit = timeLimit;
            this.perScore = perScore;
        }

    然后使用一个静态类初始化一个等级类的数组

    public class LevelPara {
        //一个静态常量Level对象数组,保存每一级的初始化信息
        public final static Level[] lv;
        static{
            lv=new Level[6];
            lv[0]=new Level(1, 2, 10, 30, 1);
            lv[1]=new Level(2, 3, 9, 28, 2);
            lv[2]=new Level(3, 4, 8, 26, 4);
            lv[3]=new Level(4, 5, 8, 24, 8);
            lv[4]=new Level(5, 6, 9, 22, 16);
            lv[5]=new Level(6, 8, 8, 20, 32);
        }

    然后呢 还有两个类

    一个是玩家类 一个是游戏类 玩家调用游戏类的方法,游戏类中保存当前玩家类的对象

    import java.util.Scanner;
    
    public class Player {
        private int levelNo;    //等级名称
        private int score;        //当前分数    
        private long startTime;    //开始时间
        private int elapsedTime;//已经过去的时间
        
        public void play(){
            //新建一个游戏,游戏玩家是自己
            Game game=new Game();
            game.setPlayer(this);
            Scanner sc=new Scanner(System.in);
            
            //循环6个难度等级
            for(int i=0;i<6;i++){
                levelNo=i+1;
                score=0;
                startTime=System.currentTimeMillis();
                //进行每一级的游戏
                for(int j=0;j<LevelPara.lv[i].getStrTimes();j++){
                    String str=game.printStr(LevelPara.lv[i].getSteLength());
                    System.out.println(str);
                    String input=sc.next();
                    
                    //判断是否输入正确
                    if(str.equalsIgnoreCase(input)){
                        game.printResualt();
                    }
                    else{
                        System.out.println("输入错误,游戏结束!");
                        System.exit(1);
                    }
                }
                System.out.println("
    晋级!
    ");
            }
            System.out.println("你太NB了,全过关了!!!");
        }

    玩家类中有一个play方法进行游戏 利用双重循环

    接下来我们看游戏类Game类的方法

    public class Game {
    
        private Player player;    //保存一个玩家对象
    
        //打印出下一个字符串
        public String printStr(int length) {
            StringBuffer sb=new StringBuffer();
            Random rd=new Random();
            //循环产生随机数
            for(int i=0;i<length;i++){
                int rand=rd.nextInt(4);
                switch(rand){
                case 0:
                    sb.append("D");
                    break;
                case 1:
                    sb.append("F");
                    break;
                case 2:
                    sb.append("J");
                    break;
                case 3:
                    sb.append("K");
                    break;        
                }
            }
            return sb.toString();
        }
    
        public void printResualt() {
            //判断是否超时
            long current=System.currentTimeMillis();
            if((current-player.getStartTime())/1000
                    >LevelPara.lv[player.getLevelNo()-1].getTimeLimit()){
                System.out.println("你输入太慢了,已经超时,自动退出!");
                System.exit(1);
            }
            
            //计算当前积分
            player.setScore(player.getScore()+
                    LevelPara.lv[player.getLevelNo()-1].getPerScore());
            //获取已用时间
            int time=(int)(current-player.getStartTime())/1000;
            
            System.out.println("输入正确,您的级别为"+player.getLevelNo()
                    +"您的积分为"+player.getScore()+"已经用时"+time+"秒.");
        
        }

    Test类中new一个Player类对象

    然后调用Play方法开始游戏

    效果如下

  • 相关阅读:
    关于Request.Form和动态添加服务器控件
    httpCookies
    简单的重写重置SessionID
    C# 内置类型表
    加密Web.Config(小技巧)
    C#委托实现系统回调
    C#中将字符串转成 Base64 编码(小技巧)
    关于跨域的SessionID的问题
    *.ashx文件
    Session中丢失的问题解决
  • 原文地址:https://www.cnblogs.com/swordtm/p/5977002.html
Copyright © 2020-2023  润新知