Esempio n. 1
0
        public Field(int _w, int _h, int _g, int _amnt)
        {
            grid_step = _g;
            kX = _w / _g;
            kY = _h / _g;
            amnt = _amnt;
            ParicleS = new List<ParicleS>();
            wall = new int[kX, kY];
            countC1 = countL1 = countT1 = countC2 = countL2 = countT2 = 0;


            for (var i = 0; i < amnt; ++i)
            {
                ParicleS part;
                bool f;
                do
                {
                    part = new ParicleS(kY);

                    f = ParicleS.Any(p => p.X == part.X && p.Y == part.Y);
                } while (f);
                ParicleS.Add(part);
            }

            //создание стен
            for (var i = 0; i < (kX / 2); i++)
            {
                wall[i, (kY/3 - 1)] = 1;
                wall[i, ((kY / 3)*2)] = 1;
            }

            for (int i = 0; i < (kY/3); i++)
                wall[(kX/2), i] = 1;

            for (int i = (kY / 3) * 2; i < kY; i++)
                wall[(kX/2), i] = 1;

            for (int i = (kX / 2); i < kX; i++)
            {
                wall[i, 0] = 1;
                wall[i, kY-1] = 1;
            }

            for (int i = (kY / 3); i < (kY / 3) * 2; i++)
                wall[(kX/3)*2, i] = 1;

            for (int i = (kX / 3)*2; i < kX; i++)
            {
                wall[i, (kY/3)] = 1;
                wall[i, (kY / 3)*2] = 1;
            }

            for (int i = 0; i < (kY / 3); i++)
                wall[kX-1, i] = 1;

            for (int i = (kY / 3) * 2; i < kY; i++)
                wall[kX-1, i] = 1;
        }
Esempio n. 2
0
        private Vector NextPos(ParicleS p)
        {
            var v = new Vector(p.X, p.Y);
            var oldV = new Vector(p.X, p.Y);
            if (p.Go())
            {
                var rand = new Random((int)DateTime.Now.Ticks);
                var m = (float)rand.NextDouble();
                if (0.2 >= m)
                {
                    if (p.type==0)
                        v.Y += 1;
                    else
                        v.Y -= 1;
                }
                if (feelWall(v))
                    v.Y = oldV.Y;
                if(v.Y == oldV.Y)
                    v.X += 1;
            }
            if(feelWall(v))
                v.X -= 1;

            if (v.X == kX / 3 && !p.isCnt1)
            {
                countC1++;
                p.isCnt1 = true;
            }

            if ((v.X == (kX / 3) * 2 + 2) && !p.isCnt2)
            {
                if (v.Y < kY / 2)
                    countC2++;
                else
                    countL2++;
                p.isCnt2 = true;
            }
            return v;
        }