예제 #1
0
 private static DataGridViewColumn GetColumnForRule(DataGridView grd, GridRule rule)
 {
     foreach (DataGridViewColumn item in grd.Columns)
     {
         if (item.HeaderText == rule.GridColumnHeaderText)
         {
             return(item);
         }
     }
     return(null);
 }
예제 #2
0
 private static bool DoValuesMatch(GridRule rule, object cellValue)
 {
     if (rule.Value.GetType() == cellValue.GetType())
     {
         return(DovaluesMatchExactly(rule.Value, cellValue, rule.Operator));
     }
     else
     {
         Type t = cellValue.GetType();
         if (cellValue is string)
         {
             rule.Value = rule.Value.ToString();
             return(DoValuesMatch(rule, cellValue));
         }
         else if (cellValue is int)
         {
             int?nv = TryConvertToInt(rule.Value);
             if (nv == null)
             {
                 return(false);
             }
             rule.Value = nv;
             return(DoValuesMatch(rule, cellValue));
         }
         else if (cellValue is double)
         {
             double?nv = TryConvertToDouble(rule.Value);
             if (nv == null)
             {
                 return(false);
             }
             rule.Value = nv;
             return(DoValuesMatch(rule, cellValue));
         }
         else if (cellValue is Time)
         {
             Time?nv = TryConvertToTime(rule.Value);
             if (nv == null)
             {
                 return(false);
             }
             rule.Value = nv;
             return(DoValuesMatch(rule, cellValue));
         }
         else
         {
             throw new NotSupportedException("This datatype in data grid view column is not supported yet.");
         }
     }
 }
예제 #3
0
        private static void ApplyGridRules(DataGridView grd)
        {
            GridRuleCollection rules = Program.GridRules;
            GridRuleCollection rls   = rules.GetRulesFor(grd.GetType().Name, null, null);

            foreach (DataGridViewRow row in grd.Rows)
            {
                GridRule gr = GetRuleApplicableForRow(rls, grd, row);
                if (gr == null)
                {
                    SetRowBackColor(row, grd.DefaultCellStyle.BackColor);
                }
                else
                {
                    SetRowBackColor(row, gr.Color);
                }
            }
        }
예제 #4
0
    private static bool RuleCheck(GridRule ar, Strategy str)
    {
        GridRule sr;
        double   min = Double.MaxValue;

        for (int i = 0; i < str.GStrategy.Rules.Count; i++)
        {
            sr = str.GStrategy.Rules[i];

            double ballRuleSize = ar.Ball.DistanceFrom(sr.Ball);

            double mineSize = 0;
            for (int j = 0; j < ar.Mine.Length; j++)
            {
                mineSize += ar.Mine[ar.ZMine[j]].DistanceFrom(sr.Mine[sr.ZMine[j]]);
            }

            double oppntSize = 0;
            for (int j = 0; j < ar.Oppnt.Length; j++)
            {
                oppntSize += ar.Oppnt[ar.ZOppnt[j]].DistanceFrom(sr.Oppnt[sr.ZOppnt[j]]);
            }

            if (ballRuleSize + mineSize + oppntSize < min)
            {
                min = ballRuleSize + mineSize + oppntSize;
            }
        }

        Debug.Log("Min dist: " + min);

        if (min < distTreshold)
        {
            return(true);
        }
        else
        {
            return(false);
        }
    }
예제 #5
0
        private static GridRule GetRuleApplicableForRow(GridRuleCollection rls, DataGridView grd, DataGridViewRow row)
        {
            GridRule ret = null;

            foreach (var rule in rls)
            {
                DataGridViewColumn column = GetColumnForRule(grd, rule);
                if (column == null)
                {
                    continue;
                }

                object ruleValue = rule.Value;
                object cellValue = row.Cells[column.Index].Value;

                if (DoValuesMatch(rule, cellValue))
                {
                    ret = rule;
                    break;
                }
            }

            return(ret);
        }
예제 #6
0
    public List <object> AdaptStrategy(object log, object strategy)
    {
        //clean rules
        discardedDefrules = 0;
        discardedOffrules = 0;
        adaptationDefRules.Clear();
        adaptationOffRules.Clear();

        var o = strategy as Strategy;

        ruleNum = o.GStrategy.Rules.Count;


        //def adapt
        try
        {
            AdaptDefRules((LogHolder)log, (Strategy)strategy);
        }
        catch (Exception e)
        {
        }
        //off adapt
        try
        {
            AdaptOffRules((LogHolder)log, (Strategy)strategy);
        }
        catch (Exception e)
        {
        }

        //complete list
        List <object> adaptedRules = new List <object>();

        //convert def rules
        foreach (Rule r in adaptationDefRules)
        {
            GridRule gr = new GridRule();

            gr.Number = r.ruleNum;
            gr.Type   = GridRule.RuleType.Deffense;
            gr.Name   = "AdaptedDef";
            Vector2D[] vmine = new Vector2D[] {
                new Vector2D(Convert.ToDouble(r.lr0x), Convert.ToDouble(r.lr0y)),
                new Vector2D(Convert.ToDouble(r.lr1x), Convert.ToDouble(r.lr1y)),
                new Vector2D(Convert.ToDouble(r.lr2x), Convert.ToDouble(r.lr2y)),
                new Vector2D(Convert.ToDouble(r.lr3x), Convert.ToDouble(r.lr3y))
            };
            gr.Mine = vmine;
            Vector2D[] voppnt = new Vector2D[] {
                new Vector2D(Convert.ToDouble(r.rr0x), Convert.ToDouble(r.rr0y)),
                new Vector2D(Convert.ToDouble(r.rr1x), Convert.ToDouble(r.rr1y)),
                new Vector2D(Convert.ToDouble(r.rr2x), Convert.ToDouble(r.rr2y)),
                new Vector2D(Convert.ToDouble(r.rr3x), Convert.ToDouble(r.rr3y))
            };
            gr.Oppnt = voppnt;
            gr.Ball  = new Vector2D(Convert.ToDouble(r.ballX), Convert.ToDouble(r.ballY));
            Vector2D[] vmove = new Vector2D[] {
                new Vector2D(Convert.ToDouble(r.lr0mx), Convert.ToDouble(r.lr0my)),
                new Vector2D(Convert.ToDouble(r.lr1mx), Convert.ToDouble(r.lr1my)),
                new Vector2D(Convert.ToDouble(r.lr2mx), Convert.ToDouble(r.lr2my)),
                new Vector2D(Convert.ToDouble(r.lr3mx), Convert.ToDouble(r.lr3my))
            };
            gr.Move = vmove;

            gr.fillZOrder();

            if (!RuleCheck(gr, (Strategy)strategy))
            {
                adaptedRules.Add(gr);
            }
            else
            {
                discardedDefrules++;
            }
        }

        //convert off rules
        foreach (Rule r in adaptationOffRules)
        {
            GridRule gr = new GridRule();

            gr.Number = r.ruleNum;
            gr.Type   = GridRule.RuleType.Offense;
            gr.Name   = "AdaptedOff";
            Vector2D[] vmine = new Vector2D[] {
                new Vector2D(Convert.ToDouble(r.lr0x), Convert.ToDouble(r.lr0y)),
                new Vector2D(Convert.ToDouble(r.lr1x), Convert.ToDouble(r.lr1y)),
                new Vector2D(Convert.ToDouble(r.lr2x), Convert.ToDouble(r.lr2y)),
                new Vector2D(Convert.ToDouble(r.lr3x), Convert.ToDouble(r.lr3y))
            };
            gr.Mine = vmine;
            Vector2D[] voppnt = new Vector2D[] {
                new Vector2D(Convert.ToDouble(r.rr0x), Convert.ToDouble(r.rr0y)),
                new Vector2D(Convert.ToDouble(r.rr1x), Convert.ToDouble(r.rr1y)),
                new Vector2D(Convert.ToDouble(r.rr2x), Convert.ToDouble(r.rr2y)),
                new Vector2D(Convert.ToDouble(r.rr3x), Convert.ToDouble(r.rr3y))
            };
            gr.Oppnt = voppnt;
            gr.Ball  = new Vector2D(Convert.ToDouble(r.ballX), Convert.ToDouble(r.ballY));
            Vector2D[] vmove = new Vector2D[] {
                new Vector2D(Convert.ToDouble(r.lr0mx), Convert.ToDouble(r.lr0my)),
                new Vector2D(Convert.ToDouble(r.lr1mx), Convert.ToDouble(r.lr1my)),
                new Vector2D(Convert.ToDouble(r.lr2mx), Convert.ToDouble(r.lr2my)),
                new Vector2D(Convert.ToDouble(r.lr3mx), Convert.ToDouble(r.lr3my))
            };
            gr.Move = vmove;

            gr.fillZOrder();

            if (!RuleCheck(gr, (Strategy)strategy))
            {
                adaptedRules.Add(gr);
            }
            else
            {
                discardedOffrules++;
            }
        }

        return(adaptedRules);
    }
예제 #7
0
    public List <object> AdaptStrategy(LogHolder log, object strategy)
    {
        discardedDefrules = 0;
        discardedOffrules = 0;
        adaptationDefRules.Clear();
        adaptationOffRules.Clear();

        ruleNum = (int)strategy.GetType().GetMethod("CurrentRuleNumberCount").Invoke(strategy, null);

        //def adapt
        try
        {
            AdaptDefRules(log, (Strategy)strategy);
        }
        catch (Exception e)
        {
            Debug.Log(e.Message);
        }
        //off adapt
        try
        {
            AdaptOffRules(log, (Strategy)strategy);
        }
        catch (Exception e)
        {
            Debug.Log(e.Message);
        }

        //complete list
        List <object> adaptedRules = new List <object>();

        //convert def rules
        foreach (Rule r in adaptationDefRules)
        {
            GridRule gr = new GridRule();

            gr.Number = r.ruleNum;
            gr.Type   = GridRule.RuleType.Deffense;
            gr.Name   = "AdaptedDef";
            Vector2D[] vmine = new Vector2D[] {
                new Vector2D(Convert.ToDouble(r.lr0x), Convert.ToDouble(r.lr0y)),
                new Vector2D(Convert.ToDouble(r.lr1x), Convert.ToDouble(r.lr1y)),
                new Vector2D(Convert.ToDouble(r.lr2x), Convert.ToDouble(r.lr2y)),
                new Vector2D(Convert.ToDouble(r.lr3x), Convert.ToDouble(r.lr3y))
            };
            gr.Mine = vmine;
            Vector2D[] voppnt = new Vector2D[] {
                new Vector2D(Convert.ToDouble(r.rr0x), Convert.ToDouble(r.rr0y)),
                new Vector2D(Convert.ToDouble(r.rr1x), Convert.ToDouble(r.rr1y)),
                new Vector2D(Convert.ToDouble(r.rr2x), Convert.ToDouble(r.rr2y)),
                new Vector2D(Convert.ToDouble(r.rr3x), Convert.ToDouble(r.rr3y))
            };
            gr.Oppnt = voppnt;
            gr.Ball  = new Vector2D(Convert.ToDouble(r.ballX), Convert.ToDouble(r.ballY));
            Vector2D[] vmove = new Vector2D[] {
                new Vector2D(Convert.ToDouble(r.lr0mx), Convert.ToDouble(r.lr0my)),
                new Vector2D(Convert.ToDouble(r.lr1mx), Convert.ToDouble(r.lr1my)),
                new Vector2D(Convert.ToDouble(r.lr2mx), Convert.ToDouble(r.lr2my)),
                new Vector2D(Convert.ToDouble(r.lr3mx), Convert.ToDouble(r.lr3my))
            };
            gr.Move = vmove;

            Debug.Log(gr.ToString());

            gr.fillZOrder();

            if (!RuleCheck(gr, (Strategy)strategy))
            {
                adaptedRules.Add(gr);
            }
            else
            {
                discardedDefrules++;
            }

            Debug.Log("Discarded def rules: " + discardedDefrules);
        }

        //convert off rules
        foreach (Rule r in adaptationOffRules)
        {
            GridRule gr = new GridRule();

            gr.Number = r.ruleNum;
            gr.Type   = GridRule.RuleType.Offense;
            gr.Name   = "AdaptedOff";
            Vector2D[] vmine = new Vector2D[] {
                new Vector2D(Convert.ToDouble(r.lr0x), Convert.ToDouble(r.lr0y)),
                new Vector2D(Convert.ToDouble(r.lr1x), Convert.ToDouble(r.lr1y)),
                new Vector2D(Convert.ToDouble(r.lr2x), Convert.ToDouble(r.lr2y)),
                new Vector2D(Convert.ToDouble(r.lr3x), Convert.ToDouble(r.lr3y))
            };
            gr.Mine = vmine;
            Vector2D[] voppnt = new Vector2D[] {
                new Vector2D(Convert.ToDouble(r.rr0x), Convert.ToDouble(r.rr0y)),
                new Vector2D(Convert.ToDouble(r.rr1x), Convert.ToDouble(r.rr1y)),
                new Vector2D(Convert.ToDouble(r.rr2x), Convert.ToDouble(r.rr2y)),
                new Vector2D(Convert.ToDouble(r.rr3x), Convert.ToDouble(r.rr3y))
            };
            gr.Oppnt = voppnt;
            gr.Ball  = new Vector2D(Convert.ToDouble(r.ballX), Convert.ToDouble(r.ballY));
            Vector2D[] vmove = new Vector2D[] {
                new Vector2D(Convert.ToDouble(r.lr0mx), Convert.ToDouble(r.lr0my)),
                new Vector2D(Convert.ToDouble(r.lr1mx), Convert.ToDouble(r.lr1my)),
                new Vector2D(Convert.ToDouble(r.lr2mx), Convert.ToDouble(r.lr2my)),
                new Vector2D(Convert.ToDouble(r.lr3mx), Convert.ToDouble(r.lr3my))
            };
            gr.Move = vmove;

            Debug.Log(gr.ToString());

            gr.fillZOrder();

            if (!RuleCheck(gr, (Strategy)strategy))
            {
                adaptedRules.Add(gr);
            }
            else
            {
                discardedOffrules++;
            }

            Debug.Log("Discarded off rules: " + discardedOffrules);
        }

        return(adaptedRules);
    }