【发布时间】:2019-09-20 06:04:59
【问题描述】:
我有一个游戏,我想做随机动作。我写了一个算法来计算移动的方向和距离。这些目的地是圆周上的点。想象一下这个角色总是在这个圆圈的中间。为了使方向变化更平滑,我认为每个方向变化都应该取决于前一个。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace randomwalk
{
class Program
{
static void Main(string[] args)
{
int? previousAngle = null;
while (true)
{
var angle = 0;
Random rnd;
if (previousAngle.HasValue)
{
rnd = new Random();
var shift = 10;
angle = previousAngle.Value + rnd.Next(shift) - shift/2;
if (angle > 359)
angle -= 180;
}
else
{
rnd = new Random();
angle = rnd.Next(359);
}
var radius = 160;
var x = Convert.ToInt32(Math.Cos(angle) * radius);
var y = Convert.ToInt32(Math.Sin(angle) * radius);
Console.WriteLine("Moved to: X:{0}, Y:{1}", x, y);
previousAngle = angle;
Thread.Sleep(1000);
}
}
}
}
问题是我没有得到预期的结果。此处的每次迭代都应使用 0-10 之间的随机数改变角度。实际结果角度变化远不止10度,甚至感觉完全随机。
Actual results:
Moved to: X:5, Y:160
Moved to: X:18, Y:-159
Moved to: X:143, Y:-71
Moved to: X:109, Y:117
Moved to: X:109, Y:117
我也想知道如何改进这一点,如果我已经可以使用可用的运动算法,也许比这更好?
【问题讨论】:
-
所以...您对算法的描述是您的代码块...但它不会产生预期的结果...那么我们究竟应该如何帮助您?
-
"问题是我没有得到预期的结果。"那么您期望的结果是什么?
-
@SamAxe 抱歉,我想不出一个结果正确的样本。但这里的问题是每次迭代的角度变化应该最大为 10 度。
-
@Code-Apprentice 抱歉,我加了解释