我有这两个方法
public void L1Timer()
{
Console.Clear();
int score = tot;
Console.Write("Chances : " + ch);
Console.CursorLeft = 40;
Console.Write("Marks : " + score);
for (int time = 0; time <= 100000; time++)
{
Console.SetCursorPosition(65, 0);
Console.Write("Time Elapsed : " + time + " Secs");
Console.CursorLeft = 40;
stime = time;
Thread.Sleep(1000);
Console.Beep();
//Level1();
}
}
public void Level1()
{
Console.WriteLine("\n\n");
Console.CursorLeft = 40;
Console.WriteLine("C _ _ E _ _ _ T _ _ N");
Console.WriteLine("\n\n");
tot = 0;
while ((tot <= 70) && (ch > 0))
{
Console.Write("Guess : ");
string gues = Console.ReadLine();
switch (gues)
{
case "E": tot += 10; ch--; L1Timer(); Level1(); break;
case "L": tot += 10; ch--; break;
case "B": tot += 10; ch--; break;
case "R": tot += 10; ch--; break;
case "A": tot += 10; ch--; break;
case "I": tot += 10; ch--; break;
case "O": tot += 10; ch--; break;
default: tot += 0; ch--; break;
}
Console.WriteLine();
}
}
我想首先执行第一个方法,然后使用第一个方法计时器继续执行第二个方法,但不延迟第二个线程......我试过这个
Thread T1 = new Thread(new ThreadStart(L1Timer));
Thread T2 = new Thread(new ThreadStart(Level1));
T1.Start();
T2.Start();
但它没有按照我想要的方式工作。它执行了第一个和第二个但是将光标带回第一个方法,它不允许用户键入第二个方法并回答问题......请帮帮我
答案 0 :(得分:0)
这是基本想法:
运行它并观察右上角经过的时间。点击一些字母并检查分数/机会。点击Escape然后'q'或'r',看看会发生什么。
这只是一个简单的例子来演示“花式”控制台界面的流程。 我在这个“游戏”背后几乎没有真正的逻辑,你还没有在你的原始问题描述中以某种方式发布;因此我不认为这是“为你做功课。”这只是游戏中的“绒毛”。一个真正的任务可能会让你将游戏逻辑放入 Class 。如果您将类实例声明为静态,就像我使用“Score”和“Chances”变量一样,那么Main()之外的不同例程可以访问它并使用类“游戏状态”中的值更新屏幕。培养班级代表董事会和当前的博弈状态通常是任务的核心,也是你的重点所在。
希望它有所帮助...
class Program
{
static int Score = 0;
static int Chances = 10;
static int promptX, promptY;
static string board = "{No Board Loaded}";
static System.Diagnostics.Stopwatch SW = new Stopwatch();
static void Main(string[] args)
{
ConsoleKeyInfo cki;
Console.Title = "Some Word Game";
bool quit = false;
bool gameWon = false;
bool gameOver = false;
while (!quit)
{
Reset();
ShowBoard("C _ _ E _ _ _ T _ _ N");
gameWon = false;
gameOver = false;
while (!gameOver)
{
UpdateStats();
// make it appear as though the cursor is waiting after the prompt:
Console.SetCursorPosition(promptX, promptY);
if (Console.KeyAvailable)
{
cki = Console.ReadKey(true); // don't display key
if (cki.Key == ConsoleKey.Escape)
{
gameOver = true;
}
else
{
// if it's A thru Z...
if (char.IsLetter(cki.KeyChar))
{
string key = cki.KeyChar.ToString().ToUpper();
Console.Write(key);
switch (key)
{
case "E":
Score += 10;
Chances--;
break;
case "L":
Score += 10;
Chances--;
break;
case "B":
Score += 10;
Chances--;
break;
case "R":
Score += 10;
Chances--;
break;
case "A":
Score += 10;
Chances--;
break;
case "I":
Score += 10;
Chances--;
break;
case "O":
Score += 10;
Chances--;
break;
default:
Score += 0;
Chances--;
break;
}
// ... possibly update the board somehow in here? ...
// ... some board logic ...
// ShowBoard("updated board in here");
// set gameOver to drop out of loop
// also set gameWon if the user beat the board
}
else
{
Console.Write(" ");
}
}
}
System.Threading.Thread.Sleep(200);
}
if (gameWon)
{
// ... do something ...
}
else
{
// ... do something else ...
}
quit = QuitProgram();
}
}
static void Reset()
{
// reset game variables and clock:
Score = 0;
Chances = 10;
SW.Restart();
Console.Clear();
CenterPrompt("Guess: ");
promptX = Console.CursorLeft;
promptY = Console.CursorTop;
}
static void ShowBoard(string NewBoard)
{
board = NewBoard;
Console.SetCursorPosition(Console.WindowWidth / 2 - board.Length / 2, promptY - 2);
Console.Write(board);
}
static void UpdateStats()
{
// hide cursor while we update the stats:
Console.CursorVisible = false;
Console.SetCursorPosition(0, 0);
Console.Write("Score: " + Score.ToString("000"));
Console.SetCursorPosition(35, 0);
Console.Write("Chances: " + Chances.ToString("00"));
TimeSpan ts = SW.Elapsed;
string totalTime = String.Format("Time Elapsed: {0}:{1}:{2}", ts.Hours, ts.Minutes.ToString("00"), ts.Seconds.ToString("00"));
Console.SetCursorPosition(Console.WindowWidth - totalTime.Length, 0);
Console.Write(totalTime);
// ... add other output statistics in here? ...
// turn cursor back on for the prompt:
Console.CursorVisible = true;
}
static void CenterPrompt(string message)
{
Console.SetCursorPosition(Console.WindowWidth / 2 - message.Length / 2, Console.WindowHeight / 2);
Console.Write(message);
}
static bool QuitProgram()
{
Console.Clear();
CenterPrompt("Thanks for playing! Press 'q' to Quit, or 'r' to Retry.");
while (true)
{
if (Console.KeyAvailable)
{
ConsoleKeyInfo cki = Console.ReadKey(true);
switch (cki.KeyChar.ToString().ToUpper())
{
case "Q":
return true;
case "R":
return false;
}
}
}
}
}