Hi Randy. Richard's suggestion assumed that your agents are portraying themselves. I won't make that assumption. Let's say that each agent has a function called myColor() which returns a Color. Then you could simply do:
public class MyPortrayal
extends RectanglePortrayal2D {
public draw(Object obj Graphics2D g, DrawInfo2D inf)
{
MyAgent agent = (MyAgent) obj;
g.setPaint(agent.myColor());
super.draw();
}
}
}
On Mar 20, 2012, at 7:39 AM, Randolph Latimer wrote:
> Thanks Richard,
> I'm trying to have each agent portrayed with it's own particular color. I tried your code suggestion (I may not be doing something correct), and all the CoordinationPlayer agents have the same color, either red or yellow, in this case.
> I'd like a blend of different colored agents portrayed, and the color is determined within the single agent class, like CoordinationPlayer.
> Thanks for your help,
> Randy Latimer
>
> On 20.03.2012 04:20, Richard O. Legendi wrote:
>> Hi Randy,
>>
>> I'm a bit unsure if it helps you, but you can simply subclass
>> _RectanglePortrayal2D_ directly with _CoordinationPlayers_, something
>> like the following code (haven't tested).
>>
>> This way you'll have a _color_ variable (called _paint_) by default.
>>
>>> public class CoordinationPlayer
>>> extends RectanglePortrayal2D
>>> implements Steppable {
>>>
>>> private static final double DIAMETER = 6.0;
>>>
>>> public CoordinationPlayer() {
>>> super(DIAMETER);
>>> paint = (random.nextInt(2) == 0) ? Color.RED :
>>> Color.YELLOW;
>>> }
>>>
>>> ...
>>> }
>> This way you don't need the magic in the _setupPortroyals()_
>> function.
>>
>> HTH,
>> Richard
>>
>> --
>> Richard O. Legendi
>> Software developer
>> Intelligent Applications and Web Services
>> AITIA International, Inc.
>> http://people.inf.elte.hu/legendi/ [2]
>>
>> On 2012.03.19. 14:53, Randolph Latimer wrote:
>>
>>> I'm starting out again with Mason and will appreciate some help with
>>> what I expect are fairly simple questions.
>>>
>>> I'm transferring a Coordination Game model from Ascape to Mason.
>>> The Ascape code is described here, if anyone's interested -
>>> http://ascape.sourceforge.net/manual/Section3.html [1]
>>>
>>> In Mason, I'm using the Schoolyard model as a starter.
>>> In Coordination Game, each agent needs a variable for its color.
>>> I'm trying something like this (I don't think I'm implementing
>>> Mason SimpleColorMap correctly):
>>>
>>> public class CoordinationPlayer implements Steppable
>>> {
>>> //public static final double MAX_FORCE = 3.0;
>>> protected SimpleColorMap colormap = new
>>> SimpleColorMap(0,1,Color.black,Color.white);
>>> public Color color;
>>> public MersenneTwisterFast random = new
>>> MersenneTwisterFast();
>>>
>>> public CoordinationPlayer()
>>> {
>>> if (random.nextInt(2) == 0)
>>> color = Color.red;// colormap.getColor(.2);
>>> else color = Color.yellow; //colormap.getColor(.7);
>>> }
>>>
>>> public Color getColor()
>>> {
>>> return color;
>>> }
>>>
>>> In CoordinationGameWithUI, - the color is displayed here, in this
>>> hybrid code from the Schoolyard model.
>>> I'm trying to set the color with setPortryalForClass, where each
>>> class object has its own color.
>>> This isn't working correctly:
>>>
>>> public void setupPortrayals()
>>> {
>>> CoordinationPlayers students = (CoordinationPlayers)
>>> state;
>>>
>>> yardgridPortrayal.setField(students.yardgrid);
>>> I'M TRYING TO SET THE COLOR HERE:
>>>
>>> yardgridPortrayal.setPortrayalForClass(CoordinationPlayer.class,
>>> new
>>> RectanglePortrayal2D(CoordinationPlayer.getColor(),true)); //new
>>>
>>
>>> RectanglePortrayal2D(Color.red,true));
>>> yardgridPortrayal.setPortrayalForNull(new
>>> RectanglePortrayal2D(Color.blue,true));
>>>
>>> Thanks for any help -
>>> Randy Latimer
>>
>>
>> Links:
>> ------
>> [1] http://ascape.sourceforge.net/manual/Section3.html
>> [2] http://people.inf.elte.hu/legendi/
|