Eine Möglichkeit das zu "designen" wäre wie folgt:
- Jedes Objekt weiß welche Farbe es besitzt (auch mehrere möglich)
- Wenn ein Objekt ausgewählt wird
1) zwei variablen X,Y auf einen voreingestellten anfangswert gesetzt (da wo das erste farb panel erscheinen soll)
2) für jede mögliche Farbe geprüft ob das ausgewählte Objekt sie besitzt und wenn ja wird die entsprechenden Farbe an position X,Y dargestellt. Daraufhin wird X,Y verändert, sodass das nächste Panel dort platziert werden kann.
Wie du das nun implementierst steht dir frei. Eine relativ resourcen schonende variante wäre für die farb kombination einen skill zu nehmen. Und darin die farb kombination zu kodieren.
Z.B. könnten die farben wie folgt definiert werden:
#define color_Red, 1
#define color_Blue, 2
#define color_Green, 4
Hierbei ist zu beachten, dass es sich um zweier-potenzen handelt, da in dieser lösung die binär-operatoren verwendet werden.
Sagen wir, wir haben einen skill mit dem namen "ColorCombi" und ein objekt was die farben blau und grün besitzt, da könnten wir dies einspeichern durch:
my.ColorCombi = color_Blue + color_Green;
Um nun zu überprüfen welche Farbe enthalten ist benutzen wir das "bitwise-AND":
if(my.ColorCombi & color_Red) // ist rot enthalten?
{ //... }
if(my.ColorCombi & color_Blue) // ist blau enthalten
...
Wie gesagt, dass ist nur eine Variante. Wie du es implementierst hängt letztlich von dem ganzen drumrum ab.