Пытаясь сделать простую игру с бактериями, используя WinForm в С#, но бактерии (я использую Panel
в настоящее время), похоже, не перемещаются наугад.
В частности, проблема, с которой я сталкиваюсь, заключается в том, что бактерии пытаются двигаться в верхний левый угол и двигаться туда только. В идеале, бактерии должны перемещаться по прямоугольному диапазону равномерно, но я не уверен, как это достичь. Посмотрите файл gif ниже.
Как видите, красная Panel
перемещается только в верхнем левом углу. Как я могу заставить его перемещаться повсюду равномерно и случайным образом?
Вот мой код:
private Panel _pnlBacteria; //Panel representing a piece of bacteria
private Random r = new Random(); //For randomly-generated values
private int _prevX; //Stores the previous X location
private int _prevY; //Stores the previous Y location
public Form1()
{
InitializeComponent();
_pnlBacteria = new Panel();
/* Get more property assignments to this._pnlBacteria (omitted) */
//Bacteria start position is also randomly selected
_prevX = r.Next(50, 300);
_prevY = r.Next(50, 500);
}
//Timer runs every 100 seconds changing the location of the bacteria
private void TmrMoveBacteria_Tick(object sender, EventArgs e)
{
int x, y;
//Get random values for X and Y based on where the bacteria was previously
//and move randomly within ±10 range. Also it cannot go off the screen.
do
{
x = r.Next(_prevX - 10, _prevX + 10);
y = r.Next(_prevY - 10, _prevY + 10);
}
while ((y <= 0) || (y >= 500) || (x <= 0) || (x >= 300));
//Save the new location to be used in the next Tick round as previous values
_prevX = x;
_prevY = y;
//Apply the actual location change to the bacteria panel
_pnlBacteria.Top = y;
_pnlBacteria.Left = x;
}
Я попытался сменить +10 на +12, оставив -10 как есть, но теперь это только заставило бактерии двигаться только в нижний правый угол. Я в растерянности. Кто-нибудь может помочь?