list - 如何随机播放列表
问题描述
此代码适用于我统一创建的游戏。我有一个包含 100 个坐标元素的列表,我想为它们实例化框。盒子的数量应该是 50% 并且完全随机。如果我运行我的脚本,我会得到 50% 的框,但按默认顺序。我的脚本不会打乱列表中的元素。感谢帮助!
// List has 100 elements of coordinates ( x & y)
public List<Vector2> ListPosBoxes = new List<Vector2>();
// Start
void Start()
{
AmountOfBoxes(ListPosBoxes);
}
// Method to display 50% shuffled boxes
void AmountOfBoxes(List<Vector2> list)
{
// Take list -> shuffle -> new list
list = ShuffleList(list);
for (int i = 0; i < list.Count/2; i++)
{
// Create Box
BoxGenerator(list[i]);
}
}
// Method to suffle list
List<Vector2> ShuffleList(List<Vector2> list)
{
Vector2 tmp;
// fisher–yates shuffle
for (int i = list.Count; i < 1; i--)
{
// Pick random Element
int j = Random.Range(0, list.Count);
// Swap Elements
tmp = list[j];
list[j] = list[i - 1];
list[i - 1] = tmp;
}
return list;
}
// Method to create Box
void BoxGenerator(Vector2 box)
{
CreateBox(box.x, box.y);
}
问题是:列表没有混合。
解决方案
我认为问题在于您正在尝试重新声明参数。
也许开始:
void AmountOfBoxes(List<Vector2> list)
{
// Take list -> shuffle -> new list
shuffled_list = ShuffleList(list);
for (int i = 0; i < list.Count/2; i++)
{
// Create Box
BoxGenerator(shuffled_list[i]);
}
}
// Method to suffle list
List<Vector2> ShuffleList(List<Vector2> list)
{
Vector2 tmp;
list *= list;
// fisher–yates shuffle
for (int i = list.Count; i < 1; i--)
{
// Pick random Element
int j = Random.Range(0, list.Count);
// Swap Elements
tmp = list[j];
list[j] = list[i - 1];
list[i - 1] = tmp;
}
return list;
}
我希望这有帮助。
还可以帮助您进行调试的方法是将变量记录在某个地方,以便您知道哪里出错了。
推荐阅读
- javascript - 删除第二次点击添加的id名
- c - 在 C 中创建共享库
- three.js - 将存储为四元数的旋转转换为三个.js 网格的欧拉
- c# - Session.GetOperationState() 方法抛出异常“方法 C_GetOperationState 在 SoftHSM 中返回 CKR_FUNCTION_NOT_SUPPORTED”
- javascript - 将 ArcGIS v 3.2 WMS 图层转换为 4.7
- python - Pyparsing:在 parseaction 中访问外部 ParseResults
- javascript - 为什么我在点击我的 div 元素后被重定向?
- ios - 如何将 NSString 值转换为 NSMutableData?货币字符
- python - Python 3.6:'elif' 语句破坏了单词交换功能
- ios - 自定义表格视图单元格中的 UITextField。点击单元格/文本字段时显示选择器视图