Beispiel #1
0
 public bool isValidStartPoint(Ldpoint pt)
 {
     return(GlobalFunctions.canBeHarvested(pt) && (BoundedPocketStandHarvester.visitationMap[(uint)pt.y, (uint)pt.x] != BoundedPocketStandHarvester.currentHarvestEventId));
 }
        public int harvest_EVENT_GROUP_SELECTION_REGIME_70(Ldpoint pt)
        {
            //int i, k;
            int k = 0;

            int[] r       = new int[4];
            int   siteCut = 0;
            int   sumCut  = 0;
            int   c       = 0;

            visitationMap[(uint)itsStartPoint.y, (uint)itsStartPoint.x] = currentHarvestEventId;
            itsNeighborList.Add(itsStartPoint);

            while (sumCut < itsTargetCut && itsNeighborList.Count > 0)
            {
                c  = itsNeighborList.Count;
                pt = itsNeighborList[0];
                itsNeighborList.RemoveAt(0);

                if (GlobalFunctions.canBeHarvested(pt))
                {
                    siteCut = EVENT_GROUP_SELECTION_REGIME_70_clear_cut(pt.y, pt.x);
                    sumCut += siteCut;

                    if (siteCut > 0)
                    {
                        for (int i = 0; i < 4; i++)
                        {
                            r[i] = i;
                        }
                        for (int i = 4; i > 0; i--)
                        {
                            k = (int)(i * system1.frand());

                            //orignal no control over k, potential out of bound err
                            //<Add By Qia on Nov 1 2012>
                            if (k < 0)
                            {
                                k = 0;
                            }
                            if (k > 3)
                            {
                                k = 3;
                            }
                            //</Add By Qia on Nov 1 2012>
                            switch (r[k])
                            {
                            case 0:
                                addSiteNeighbor(pt.y, pt.x - 1);
                                break;

                            case 1:
                                addSiteNeighbor(pt.y, pt.x + 1);
                                break;

                            case 2:
                                addSiteNeighbor(pt.y - 1, pt.x);
                                break;

                            case 3:
                                addSiteNeighbor(pt.y + 1, pt.x);
                                break;
                            }
                            r[k] = r[i - 1];
                            if (k < 0 || k > 3 || (i - 1) < 0 || (i - 1) > 3)
                            {
                                Console.Write("group selection index error\n");
                            }
                        }
                    }
                }
            }
            return(sumCut);
        }