我遇到了屏幕上某个对象随机移动的问题。它有点来回嘀嗒,所以它的运动根本不是随机的。这只是一个小型的C#控制台程序。
Dim b As Byte() = Convert.FromBase64String(strModified)
strTextOrFile = System.Text.Encoding.UTF8.GetString(b)
基本上,我希望在界限内有一些明显且更随机的动作,而不是在控制台底部来回移动。有人能指出我正确的方向吗?
答案 0 :(得分:1)
“随机”很好,不知道为什么每个人都会这样做。你的问题是你的初始行是40 - 但你的控制台在窗口时最初不会打开40行。所以它将它绘制在当前可见的最后一行,可能是第20行。这就是控制台的行为方式。
如果你最大化你的控制台窗口,或者将你的初始行设置为更低的值,比如10,你会看到它按预期移动。
答案 1 :(得分:0)
尝试在类上创建一个Random属性并在那里初始化它,而不是在move方法中一遍又一遍。像这样......
namespace MorgSimulator
{
class Program
{
static void Main(string[] args)
{
Morg A = new MorgA();
A.MovingTime();
Console.ReadKey();
}
}
class Morg
{
public Morg()
{}
protected MoveBehavior moveBehavior;
public void MovingTime()
{
moveBehavior.move();
}
}
class MorgA : Morg
{
public MorgA()
{
moveBehavior = new Ooze();
}
}
interface MoveBehavior
{
void move();
}
class Ooze : MoveBehavior
{
private readonly Random randomizer;
public Ooze()
{
this.randomizer = new Random();
}
public void move()
{
int row = 40, col = 25;
Console.CursorVisible = false;
Console.SetCursorPosition(col, row);
int direction = 0;
for (int i = 0; i < 25; i++) // count of movement
{
Console.Write("<(._.)>");
System.Threading.Thread.Sleep(100);
Console.Clear();
direction = this.randomizer.Next(5);
while (direction == 0)
direction = this.randomizer.Next(5);
switch (direction)
{
case 1:
if (row + 1 >= 80)
row = 0;
Console.SetCursorPosition(col, row++);
break;
case 2:
if (row - 1 <= 0)
row = 79;
Console.SetCursorPosition(col, row--);
break;
case 3:
if (col + 1 >= 50)
col = 0;
Console.SetCursorPosition(col++, row);
break;
case 4:
if (col - 1 <= 0)
col = 49;
Console.SetCursorPosition(col--, row);
break;
}
}
}
}
}