2014-03-24 31 views
0

我是一位新手程序員,現在我一直試圖解決這個問題超過2個小時。我想讓程序做的事情是計算秒數,如果它超過秒數(什麼?),做些事情,例如顯示「遊戲結束」或類似的事情。問題是,這段時間過去了2秒後程序沒有做任何事情。問題可能是什麼?如何計算秒數,然後在條件中使用它們?

編輯:好的這裏是整個背後的信息。用戶必須在2秒內按下與屏幕上顯示的字符相對應的鍵。如果用戶在2秒內沒有按下按鍵或者按錯了按鍵,那麼遊戲必須結束,但它不能像預期的那樣工作。lol

這是目前的整個代碼(是的,我知道轉到後面我會改變它):

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Globalization; 
using System.Threading; 
using System.Diagnostics; 

class Game 
{ 
    static void Main() 
    { 
    Start: 
     Console.CursorVisible = false; 
     Random rnd = new Random(); 
     int row = rnd.Next(1, 80); 
     int col = rnd.Next(1, 25); 
     int chars = rnd.Next(0, 62); 
     string lettersAndChars = ""; 
     lettersAndChars = lettersAndChars.ToUpper(); 
     Console.SetCursorPosition(row, col); 
     if (chars <= 10) 
     { 
      lettersAndChars += (char)(chars + '0'); 
     } 
     else 
     { 
      lettersAndChars += (char)(chars + 'A'); 
     } 
     lettersAndChars = lettersAndChars.ToUpper(); 
     Console.WriteLine(lettersAndChars); 
     DateTime endTime = DateTime.Now.AddSeconds(2); 
     var keyPress = Console.ReadKey(); 
     string keyPressString = keyPress.KeyChar.ToString(); 
     keyPressString = keyPressString.ToUpper(); 
     if (keyPressString == lettersAndChars && DateTime.Now < endTime) 
     { 
      Console.Clear(); 
      goto Start; 
     } 
     else if (keyPressString != lettersAndChars || DateTime.Now > endTime) 
     { 
      Console.Clear(); 
      Console.WriteLine("Game Over"); 
     } 


    } 
} 
+0

使用計時器計算秒數(每1000ms)到一個靜態變量中,然後使用它。 – Ilan321

+0

您只在按下按鈕時檢查傳遞的結束時間。你想在兩秒鐘後採取一些行動,而不是等待輸入? – Chris

+0

@Chris定時器解決方案也可以做到這一點:) – Ilan321

回答

0

我不會使用計時器。您可以執行以下操作:

DateTime endTime = DateTime.Now.AddSeconds(2); 
while (!Console.KeyAvailable && DateTime.Now < endTime) 
    Thread.Sleep(1); 
if (Console.KeyAvailable) 
{ 
    var keyPress = Console.ReadKey(); 
    string keyPressString = keyPress.KeyChar.ToString(); 
    keyPressString = keyPressString.ToUpper(); 
    if (keyPressString == lettersAndChars) 
    { 
     Console.Clear(); 
     goto Start; 
    } 
} 
Console.Clear(); 
Console.WriteLine("Game Over"); 
+0

這工作,謝謝! :) – Milenchy

0

@Ulugbek Umirov的回答很奏效!謝謝!這裏是它現在的樣子(我也改變了很多以前的代碼):

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 
    using System.Globalization; 
    using System.Threading; 
    using System.Diagnostics; 

    class Game 
    { 
    static void Main() 
    { 
     bool isTrue = true; 
     while (isTrue == true) 
     { 
     Console.BufferHeight = 25; 
     Console.BufferWidth = 80; 
     Console.CursorVisible = false; 
     Random rnd = new Random(); 
     int row = rnd.Next(1, 80); 
     int col = rnd.Next(1, 25); 
     int numbers = rnd.Next(0,9); 
     int chars = rnd.Next(0, 25); 
     string lettersAndChars = ""; 
     Console.SetCursorPosition(row, col); 
     int choose = rnd.Next(1,3); 
     while (choose == 1) 
     {   
      lettersAndChars += (int)(numbers); 
      break; 
     } 
     while (choose == 2) 
     { 
      lettersAndChars += (char)(chars + 'A'); 
      break; 
     } 
     lettersAndChars = lettersAndChars.ToUpper(); 
     Console.WriteLine(lettersAndChars); 
     DateTime endTime = DateTime.Now.AddSeconds(2);  
     while (!Console.KeyAvailable && DateTime.Now < endTime) 
      Thread.Sleep(1); 
     if (Console.KeyAvailable) 
     { 
      var keyPress = Console.ReadKey(); 
      string keyPressString = keyPress.KeyChar.ToString(); 
      keyPressString = keyPressString.ToUpper(); 
      if (keyPressString == lettersAndChars) 
      { 
       Console.Clear(); 
       continue; 
      } 
     } 

     Console.Clear(); 
     int leftOffSet = (Console.WindowWidth/2) -3; 
     int topOffSet = (Console.WindowHeight/2) -2; 
     Console.SetCursorPosition(leftOffSet, topOffSet); 
     Console.WriteLine("Game Over"); 
     leftOffSet = (Console.WindowWidth/2) - 25; 
     topOffSet = (Console.WindowHeight/2); 
     Console.SetCursorPosition(leftOffSet, topOffSet); 
     Console.WriteLine("Press \"R\" to start again or \"ESC\" to exit the game..."); 
     var resOrExit = Console.ReadKey(); 
     Console.Clear(); 
     if ((char)resOrExit.Key == 'R') 
     { 
      continue; 
     } 
     else if (resOrExit.Key == ConsoleKey.Escape) 
     { 
      Environment.Exit(0); 
     } 
     } 

    } 
    } 
相關問題