java打字游戏和解析_java类与对象案例之打字游戏

本文介绍了一个使用Java编写的打字游戏案例,包括玩家类、等级类、游戏类的设计,以及如何生成随机字符串和判断输入是否正确。通过详细解释代码和示例,帮助理解Java类与对象的应用。
摘要由CSDN通过智能技术生成

类与对象案例-童年回忆之打字游戏

一、玩家类

二、等级类

三、游戏类

四、等级地图

五、测试类

这次要做的案例是一个打字游戏的案例,相信大家小时候都玩过金山打字通的警察抓小偷和飞机大战,这次的案例是类似的简易版。

首先对于这个案例,我们要解决的是如何生成随机的字符串,如何判断生成的字符串和输入的字符串是否相等。

一、玩家类

package com.yc.oop6.hc0705;

public class Player {

private int score; //积分

private long startTime; //各级别的开始时间

private long dis; //每次闯关剩余时间

private int levelNo; //级别号码

public int getScore() {

return score;

}

public void setScore(int score) {

this.score = score;

}

public long getStartTime() {

return startTime;

}

public void setStartTime(long startTime) {

this.startTime = startTime;

}

public int getLevelNo() {

return levelNo;

}

public void setLevelNo(int levelNo) {

this.levelNo = levelNo;

}

public Player(int score, long startTime, int levelNo) {

super();

this.score = score;

this.startTime = startTime;

this.levelNo = levelNo;

}

public Player() {

super();

}

public long getDis() {

return dis;

}

public void setDis(long dis) {

this.dis = dis;

}

}

二、等级类

package com.yc.oop6.hc0705;

public class Level {

private int levelNo; //第几关

private int strLength; //字符串长度

private int strTime; //需要输入的次数

private int timeLimit; //时间限制

private int score; //答对一次获得的积分

public int getLevelNo() {

return levelNo;

}

public int getStrLength() {

return strLength;

}

public int getStrTime() {

return strTime;

}

public int getTimeLimit() {

return timeLimit;

}

public int getScore() {

return score;

}

public Level(int levelNo, int strLength, int strTime, int timeLimit, int score) {

super();

this.levelNo = levelNo;

this.strLength = strLength;

this.strTime = strTime;

this.timeLimit = timeLimit;

this.score = score;

}

public Level() {

super();

}

}

三、游戏类

package com.yc.oop6.hc0705;

import java.util.Random;

import java.util.Scanner;

public class Game {

private Player player;

private Random r = new Random();

private Scanner sc = new Scanner(System.in) ;

public Game(Player player) {

this.player = player;

}

//开始游戏

public void startGame() {

System.out.println("游戏开始");

//开始闯关

for(int i = 0; i < Levels.ls.length; i++) {

System.out.println("开始进入第" + (i+1) + "关");

//每一关的开始在这里

player.setLevelNo(player.getLevelNo() + 1);

player.setStartTime(System.currentTimeMillis());

//循环,这一关要输入多少次

for(int j = 0 ; j < Levels.ls[player.getLevelNo() - 1].getStrTime() ; j++ ) {

String out = printStr();

System.out.println(out);

String in = sc.nextLine();

boolean flag = result(in, out);

if(flag == false) {

System.exit(1);;

}

}

//每剩下1s 增加20分

player.setScore(player.getScore() + (int)player.getDis() * 20);

System.out.println("完成第" + (i+1) + "关,您现在的积分为:" + player.getScore());

System.out.println("进入下一关");

}

}

//随机字符串

public String printStr( ) {

String str = "";

double rNum = 0;

for(int i = 0; i < Levels.ls[player.getLevelNo()-1].getStrLength(); i++ ) {

rNum = r.nextDouble();

if(rNum < 0.3333) {

str += (r.nextInt(9)+1);

}else if(rNum < 0.6667){

str += (char)(r.nextInt(26)+65);

}else {

str += (char)(r.nextInt(26)+97);

}

}

return str;

}

//字符串对比

public boolean result(String in, String out) {

//字符串判断

if(out.equals(in)) {

//先获取一下当前的系统时间

long endTimes = System.currentTimeMillis();

long startTimes = player.getStartTime();

//获得下一关的时间

long dis = Levels.ls[player.getLevelNo() -1 ].getTimeLimit();

if((endTimes - startTimes)/1000 > dis) {

System.out.println("游戏超时,游戏结束,您的最终得分为:" + player.getScore());

return false;

}else {

//输入正确,且没有超时

//加积分

int score = Levels.ls[player.getLevelNo()].getScore();

player.setDis(dis - (endTimes - startTimes)/1000);

player.setScore(player.getScore() + score );

System.out.println("输入正确,您现在的积分为:"+ player.getScore() +" ,这一关您还有: " + player.getDis() + " 秒钟");

return true;

}

}else {

System.out.println("输入错误,游戏结束,您的最终得分为:" + player.getScore());

return false;//输入错误

}

}

}

四、等级地图

package com.yc.oop6.hc0705;

public class Levels {

//定义一个静态的对象数组

public static Level ls[] = new Level[7];

static {

ls[0] = new Level(1,2,5,20,10);

ls[1] = new Level(2,3,5,18,20);

ls[2] = new Level(3,4,4,16,30);

ls[3] = new Level(4,5,4,15,40);

ls[4] = new Level(5,6,4,15,50);

ls[5] = new Level(6,7,3,15,60);

ls[6] = new Level(7,8,3,15,70);

}

}

五、测试类

package com.yc.oop6.hc0705;

public class Test {

public static void main(String[] args) {

Player p = new Player();

Game g = new Game(p);

g.startGame();

}

}

详细的解释都在代码的注释里了,大家细品。

更多有趣的经典小游戏实现专题,分享给大家:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值