展开全部
package test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Timer;
import java.util.TimerTask;
/**
* Created by Administrator on 2017/8/22.
*/
public class mian {
static String player1 = "1号玩家";
static String player2 = "2号玩家";
static String attacker = player1;//默认player1先攻击
static String beAttacker = player2;//默认player2先被攻击
static boolean isTimeOver = false;//是否攻击超时
public static void main(String[] args) {
while (true) {
System.out.println(attacker + "攻击回合e69da5e887aa3231313335323631343130323136353331333363383436,是否发动攻击? 是:1 否:任意符号 回车确定.");
getSystemIn();
}
}
/**
* 获取控制台的命令;
*/
public static void getSystemIn() {
Timer timer = new Timer();
timerTest(timer);
boolean attacked = false;//是否成功攻击
try {
while (isTimeOver == false) {//是否超时
if (System.in.available() == 0) continue;//用户时候在控制台输出了命令
BufferedReader sc = new BufferedReader(new InputStreamReader(System.in));
String s = sc.readLine();//读取用户命令
if ("1".equals(s)) {//攻击命令
attack(attacker, beAttacker);//调用攻击方法
attacked = true;//攻击成功
} else {
System.out.println(attacker + "主动放弃攻击,攻守转换!");
}
timer.cancel();//用户给出指令,取消定时器.
break;//跳出接受命令功能
}
if (attacked == false && isTimeOver == true) {//只有用户没有攻击,并且攻击超时时才打印
System.out.println(attacker + "攻击超时,攻守转换!");
}
isTimeOver = false;//将攻击超时标志重新置为flase
attackTransition(attacker, beAttacker);//攻守转换
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 攻守转换
*
* @param _attacker 攻击者
* @param _beAttacked 被攻击者
*/
public static void attackTransition(String _attacker, String _beAttacked) {
String cache = null;
cache = _attacker;
attacker = _beAttacked;
beAttacker = cache;
}
public static void timerTest(Timer timer) {
timer.schedule(new TimerTask() {
public void run() {
new Thread(new Runnable() {
@Override
public void run() {
try {
isTimeOver = true;//将超时标志置为true
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}).start();
}
}, 2000*60);// 设定指定的时间time,此处为60*2000毫秒(2分钟)
}
/**
* 攻击方法
*
* @param attacker 攻击者
* @param beAttacked 被攻击者
*/
public static void attack(String attacker, String beAttacked) {
System.out.println(attacker + "开始攻击" + beAttacked);
}
}
结果:
看你的逻辑挺好玩的.这里不要试图使用Scanner,因为Scanner会阻塞当前线程.除非有方法能够主动打破阻塞(我没找到).所以这里我自己写了个读取的小逻辑.