如何确保两种随机生成的颜色都不相同?

时间:2019-09-06 11:36:03

标签: qt qml

我正在制作一个简单的游戏,其中两个形状使用计时器重复更改颜色,我有多种颜色可供选择,如何确定两个形状的颜色是否不同?

我的代码:

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)]
        }
    }

2 个答案:

答案 0 :(得分:2)

一种方法是获得第二种颜色索引,而第二种颜色索引却是如此。请注意,理论上随机索引始终可以相同,因此您永远不会越过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 ...

答案 1 :(得分:1)

使shape2抓取新颜色,直到它与shape1不同为止

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