首页 > 解决方案 > 如何确保两种随机生成的颜色不相同?

问题描述

我正在制作一个简单的游戏,其中两个形状使用计时器反复改变颜色,我有一系列颜色可供选择,如何确保两个形状的颜色不同?

我的代码:

property variant colorArray: ["#008499","#963A65","#01FF97","#FF4140"] //colors to choose from
Timer{
        id: color_switch
        interval: 1000; running: true; repeat: true
        onTriggered: {
            shape1.color = colorArray[Math.floor(Math.random()*3)]
            shape2.color = colorArray[Math.floor(Math.random()*3)]
        }
    }

标签: qtqml

解决方案


一种方法是多次获得第二个颜色索引,它是不同的。请注意,理论上随机索引可能始终相同,因此您永远不会超过 while 循环:)

onTriggered: {
    var index1 = Math.floor(Math.random()*3)
    var index2 = Math.floor(Math.random()*3)
    while (index1 === index2) {
        index2 = Math.floor(Math.random()*3)
    }
    shape1.color = colorArray[index1]
    shape2.color = colorArray[index2]
}

更好的方法可能是在选择 color1 之后创建一个没有 color1 的数组副本,然后从缩减的数组中获取 color2 ...


推荐阅读