Java,时间,事件

时间:2014-11-07 19:31:53

标签: java events command-line command

我是一个相对较新的程序员,我正在使用Java来构建一个刽子手游戏。我的问题主要与我所说的"时间和/或事件有关#34;(如果你觉得有更好的描述请告诉我)。

当我的应用程序开始执行时,会发生一些事情:1)它显示一条问候消息("欢迎使用Java Hangman ......"),2)它调用startgame(),其中一件事情startgame()做的是调用drawman(o),这显示一个空的绞架,3)如果你赢了(当然你将从游戏刚刚开始),会显示一个问题供用户尝试回答(所有这些代码都在下面。

我的问题/我想做的是:1)每隔2秒钟就会发出问候语"闪烁"(出现和消失),而空的绞架(manZero())正在&# 34;内置"在屏幕上,2)到"构建"空的绞架,从顶部开始#34;或"底部"并且每隔2秒显示一个不同的"绞刑架(字符串),直到完成,3)一旦绞架的最后一块建成",问候消息停止"闪烁"然后提示用户提出第一个问题。

最终结果:游戏开始,问候消息"闪烁",绞架正在建造"在添加最后一块绞架后,问候停止"闪烁&#34 ;并提出了问题。

用另一种方式描述,输出看起来像这样:

//application begins execution 

System.out.println("Welcome to Java Hangman...");// greet flashes every two seconds

// meanwhile the gallows is being built below greet
public void manZero() 
{ 
    System.out.println("_____"); // 2 sec after that this string appears("last piece")
    System.out.println("|   |"); // 2 seconds after that this string appears
    System.out.println("|   "); // 2 seconds after that this string appears
    System.out.println("|   "); // 2 seconds later this string appears
    System.out.println("|   "); // first this string appears

当"最后一块"出现在输出中,问候停止闪烁,空的绞架(manZero())完好无损,然后第一个问题提交给用户(即出现在输出中)。

这是一个多阶段的问题,我意识到Stack喜欢简洁的东西,但由于这些问题都处理类似的问题,我认为它会成为一个好的,可能有趣的话题。此外,由于我是编程新手,请提供建议的示例,最好是使用现有代码的完整示例,因为我不会花太多时间在杂草中找到自己。

现在游戏运行命令,但我有兴趣添加一些挥杆功能,如果你想帮我这个或希望看到整个程序的代码,请发送电子邮件给reedwilliams8404 @ gmail .COM

感谢您的时间和意见,我对您提出的建议感兴趣。

/*
main, greeting, call to start
*/

public class HangmanMain 
{


    public static void main(String[] args)      
    {
        System.out.println("Welcome to Java Hangman...");
        HangmanGame hangmanGame = new HangmanGame(initQuestions());
        try 
        {
            hangmanGame.startGame();
        } 

/*
startGame(), call to drawman(O), pose first question
*/

public HangmanGame(List<Question> questions) 
{
    this.questions = questions;
    manDrawer = new ManDrawer();
    questionPoser = new QuestionPoser();
}
// sets/resets values 
public void startGame() throws IOException 
{
    manDrawer.drawMan(0);
    incorrectGuesses = 0;
    guesses = 6;

    // for each Question question in questions
    for(Question question : questions) 
    {
        // not winning
        if(!isWinning) 
        {
            break;
        }
        // winning
        else 
        {
            questionPoser.poseQuestion(question);
            askQuestionUntilCorrectOrOutOfGuesses(question);
            handleQuestionSuccessOrGameFailure(question);
        }
    }


/*
"builds" gallows
*/


//gets value  of field incorrectGuesses, determines corresponding method to call,
// calls corresponding method, corresponding method displays/draws hangman image 
public class ManDrawer 
{

// determines which man#() to call based on the value of incorrectGuesses 
public void drawMan(int incorrectGuesses)
{
    switch (incorrectGuesses) {
        case 0:
            manZero();
            break;
        case 1:
            manOne();
            break;
            //...

// value of incorrectGuesses is 0
public void manZero() 
{ 
    System.out.println("_____"); 
    System.out.println("|   |"); 
    System.out.println("|   "); 
    System.out.println("|   "); 
    System.out.println("|   "); 
} 

// value of incorrectGuesses is 1
public void manOne() 
{ 
    System.out.println("_____"); 
    System.out.println("|   |"); 
    System.out.println("|   o"); 
    System.out.println("|    "); 
    System.out.println("|    "); 
} 
//...

2 个答案:

答案 0 :(得分:0)

让线程休眠2秒钟。

try{
Thread.sleep(2000)
}catch...

答案 1 :(得分:0)

对于1个问题(闪烁欢迎使用Java Hangman ...),这应该可以在系统控制台上正常工作,但不能在IDE控制台中正常工作。

try {
   int i=0;
   while (i<10) {
      System.out.print("Welcome to Java Hangman...");
      Thread.sleep(100);
      System.out.print("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
      Thread.sleep(100);
      i++;
    }
} catch (Exception e){
}

对于绘制刽子手形象的2部分,你可以这样做:

try
{
    final String os = System.getProperty("os.name");
    for(int i=0;i<7;i++) {
        manDrawer.drawMan(i);
        Thread.sleep(200);
        if (os.contains("Windows")) {
             Runtime.getRuntime().exec("cls");
         } else {
             Runtime.getRuntime().exec("clear");
         }
    }
} catch (final Exception e) {
   //  Handle any exceptions.
}

编辑:

Eclipse Bug #76936.没有列出变通办法。

您可能很幸运找到了一个可以提供更高级控制台的插件。