[英]Generate Random Speed letters for Race Game in C#
我正在創建一個簡單的任務,只是為了繼續練習。 現在我創建了一個非交互式游戲。 字母是A,B,C的字符。 現在因為我已經 position 我的“C”到 3 它總是第一個完成。 你如何隨機每個字符的速度?
static void Main()
{
Runner runnerA = new Runner('A');
Runner runnerB = new Runner('B');
Runner runnerC = new Runner('C');
runnerA.Position = 1;
runnerB.Position = 3;
runnerC.Position = 3;
string course = "---......------.......";
while (true)
{
runnerA.Position++;
runnerB.Position++;
runnerC.Position++;
if (runnerA.Position == course.Length)
{
}
for (int i = 0; i < course.Length; i++)
{
if (runnerA.Position == i)
{
Console.Write(runnerA.Glyph);
}
else if (runnerB.Position == i)
{
Console.Write(runnerB.Glyph);
}
else if (runnerB.Position == i) {
Console.Write(runnerB.Glyph);
}
else // No runners on this tile.
{
Console.Write(course[i]);
}
}
Console.Write('|');
Console.WriteLine();
Thread.Sleep(100);
Console.SetCursorPosition(0, 0);
}
}
}
如果 runnerB position 的條件相同,您還有另外兩個條件。 我假設你的意思是他們中的第二個將是 runnerC。 我改變了這個,我改變了,所以跑步者的 position 將在最后一個 position 到課程字符串結尾的范圍內是隨機的。 每個隨機 position 與之前的位置不同。 對於許多跑步者,我們可能會考慮更有效的解決方案。
static void main()
{
Runner runnerA = new Runner('A');
Runner runnerB = new Runner('B');
Runner runnerC = new Runner('C');
Random rand = new Random();
runnerA.Position = 1;
runnerB.Position = 2;
runnerC.Position = 3;
string course = "---......------.......";
while (true)
{
for (int i = 0; i < course.Length; i++)
{
if (runnerA.Position == i)
{
Console.Write(runnerA.Glyph);
}
else if (runnerB.Position == i)
{
Console.Write(runnerB.Glyph);
}
else if (runnerC.Position == i)
{
Console.Write(runnerC.Glyph);
}
else // No runners on this tile.
{
Console.Write(course[i]);
}
}
Random rand = new Random();
runnerA.Position = rand.Next(runnerA.Position, course.Length);
do
runnerB.Position = rand.Next(runnerB.Position, course.Length);
while (runnerB.Position == runnerA.Position);
do
runnerC.Position = rand.Next(runnerC.Position, course.Length);
while (runnerC.Position == runnerA.Position || runnerC.Position
== runnerB.Position);
Console.Write('|');
Console.WriteLine();
Thread.Sleep(100);
Console.SetCursorPosition(0, 0);
}
}
這是一個像這樣工作的解決方案:
主要空白:
internal class Program
{
static void Main()
{
Random random = new Random();
string map = "-----------............------..............-----------............|";
int interval = 50;
List<Runner> runners = new List<Runner>
{
new Runner('A', random.Next(1, 10), random.Next(1, 5) * interval),
new Runner('B', random.Next(1, 10), random.Next(1, 5) * interval),
new Runner('C', random.Next(1, 10), random.Next(1, 5) * interval)
};
while (true)
{
foreach (Runner runner in runners)
{
if (runner.Position == map.Length - 1)
{
Console.SetCursorPosition(0, 1);
Console.WriteLine($"The winner is: {runner.Glyph} !");
Console.ReadKey();
}
double mapFactor = map[runner.Position].Equals('-') ? 1 : 0.5;
runner.Update(interval, mapFactor);
}
for (int i = 0; i < map.Length; i++)
{
Runner matchingRunner = runners.Find(x => x.Position == i);
Console.Write(matchingRunner != null ? matchingRunner.Glyph : map[i]);
}
Console.WriteLine();
Thread.Sleep(interval);
Console.SetCursorPosition(0, 0);
}
}
}
以及相關的Runner class:
public class Runner
{
public char Glyph { get; set; }
public int Position { get; set; }
public int Speed { get; set; }
public int Timer { get; set; }
public Runner(char glyph, int position, int speed)
{
Glyph = glyph;
Position = position;
Speed = speed;
Timer = 0;
}
public void Update(int interval, double mapFactor)
{
Timer += interval;
if (Timer / mapFactor > Speed)
{
Timer = 0;
Position++;
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.