I guess I must be missing something here - I still don't understand the
advantage of 'encoding' the conditions as numbers.
As I see it, there is no way around evaluating 16 conditions. We can
either make this transparent or we can 'elegantly' hide it behind
numbers - which we'll have to comment heavily to 'decode' the meaning of
the numbers and to make the code readable for humans.
It's about reacting to the possible combinations of 4 different events,
right?
Let's say the events are 'Inited','Clicked','Bedazzeled','Dragged'.
We could now just do this:
// When event 'Inited' is dispatched, set the flag Inited to true, etc.
combo = '';
if(events[i]){ combo += 'Inited';}
if(events[i]){ combo += 'Clicked';}
if(events[i]){ combo += 'Bedazzeled';}
if(events[i]){ combo += 'Dragged';}
switch(combo){
case "":
//do stuff here
break;
case "Bedazzeled":
//do stuff here
break;
case "BedazzeledDragged":
//do stuff here
break;
case "Clicked":
//do stuff here
break;
case "ClickedBedazzeled":
//do stuff here
break;
case "ClickedBedazzeledDragged":
//do stuff here
break;
case "ClickedDragged":
//do stuff here
break;
case "Dragged":
//do stuff here
break;
case "Inited":
//do stuff here
break;
case "InitedBedazzeled":
//do stuff here
break;
case "InitedBedazzeledDragged":
//do stuff here
break;
case "InitedClicked":
//do stuff here
break;
case "InitedClickedBedazzeled":
//do stuff here
break;
case "InitedClickedBedazzeledDragged":
//do stuff here
break;
case "InitedClickedDragged":
//do stuff here
break;
case "InitedDragged":
//do stuff here
break;
}
//----------------------------------------------------------------------
-----------------
Imo this is a very readable solution - no comments needed to explain
what the code is doing.
Above code is generated and traced to the Output window with this:
events = ['Inited','Clicked','Bedazzeled','Dragged'];
numElems = events.length;
combos = new Array();
// find the combinations
c=0;
while(c<numElems*numElems){
combo = '';
for(var i=0; i<numElems; i++){
if(Math.random() < 0.5){
combo += events[i];
}
}
inArray = false;
for(var i=0, len=combos.length; i<len; i++){
if(combo == combos[i]){
inArray = true;
break
}
}
if(!inArray){
combos[c++] = combo;
}
}
combos.sort();
// write the code for copy/paste from the output window
trace("// When event '"+ events[0]+"' is dispatched, set the flag
"+events[0]+" to true, etc.");
trace("combo = '';");
for(var i=0, len=events.length; i<len; i++){
trace("if(events[i]){ combo += '"+events[i]+"';}");
}
trace('\nswitch(combo){');
// write the switch statement
for(var i=0, len=combos.length; i<len; i++){
trace('\n case "'+combos[i]+'":');
trace(' //do stuff here');
trace(' break;');
}
trace('}');
Just overwrite the 'events' Array to accommodate your needs.
hth
--------------
Andreas Weber
motiondraw.com
-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of eric
dolecki
Sent: Mittwoch, 25. Januar 2006 21:17
To: Flashcoders mailing list
Subject: Re: [Flashcoders] checking combinations
Thats interesting. A bit more involved than what I was doing but it is
indeed interesting.
On 1/25/06, Daniel Cascais <[EMAIL PROTECTED]> wrote:
>
> What about something like this:
>
>
> var results:Array = [ "a", "b", "c", "d", "e", "f", "g", "h", "i",
> "j", "k", "l", "m", "n", "o", "p" ];
>
> function getResult( value1:Boolean, value2:Boolean, value3:Boolean,
> value4:Boolean ):Number {
> var resultIndex:Number = 0;
>
> if( value1 ) resultIndex |= 8;
> if( value2 ) resultIndex |= 4;
> if( value3 ) resultIndex |= 2;
> if( value4 ) resultIndex |= 1;
>
> return results[ resultIndex ];
> }
>
> trace( getResult( true, true, false, true) );
>
> /*
> Results Table
>
> value1 value2 value3 value4 Results
> 0 0 0
> 0 a
> 0 0 0
> 1 b
> 0 0 1
> 0 c
> 0 0 1
> 1 d
> 0 1 0
> 0 e
> 0 1 0
> 1 f
> 0 1 1
> 0 g
> 0 1 1
> 1 h
> 1 0 0
> 0 i
> 1 0 0
> 1 j
> 1 0 1
> 0 k
> 1 0 1
> 1 l
> 1 1 0
> 0 m
> 1 1 0
> 1 n
> 1 1 1
> 0 o
> 1 1 1
> 1 p
> */
>
> On 1/25/06, eric dolecki <[EMAIL PROTECTED]> wrote:
> > I have 4 variables I need to check the states of routinely... and
> > combinations thereof.
>
> --
> Daniel Cascais
> Tel: +56 (0)2 4589495
> Cel: +56 (0)9 9417355 _______________________________________________
> Flashcoders mailing list
> [email protected]
> http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
>
_______________________________________________
Flashcoders mailing list
[email protected]
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
_______________________________________________
Flashcoders mailing list
[email protected]
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders