상속: Tools.TOKEN
예제 #1
0
        public void read(byte[] data, int offset)
        {
            cmd     = (short)LE.getuint16(data, offset); offset += 2;
            len     = (short)LE.getuint16(data, offset); offset += 2;
            session = LE.getuint32(data, offset); offset += 4;
            status  = LE.getuint32(data, offset); offset += 4;
            context = LE.getuint64(data, offset); offset += 8;
            options = LE.getuint32(data, offset); offset += 4;
            switch (cmd)
            {
            case CMD_RR_DATA:
                ihandle = LE.getuint32(data, offset); offset += 4;
                timeout = (short)LE.getuint16(data, offset); offset += 2;
                count   = (short)LE.getuint16(data, offset); offset += 2;
                if (count != 2)
                {
                    throw new Exception("ab:bad ip packet");
                }
                type_1 = (short)LE.getuint16(data, offset); offset += 2;
                len_1  = (short)LE.getuint16(data, offset); offset += 2;
                type_2 = (short)LE.getuint16(data, offset); offset += 2;
                len_2  = (short)LE.getuint16(data, offset); offset += 2;
                break;

            case CMD_GET_SESSION:
                protocol = (short)LE.getuint16(data, offset); offset += 2;
                flags    = (short)LE.getuint16(data, offset); offset += 2;
                break;
            }
        }
예제 #2
0
        public void write(byte[] data, int offset, ABContext abcontext)
        {
            session = abcontext.session;
            context = abcontext.context;
            abcontext.increment();
            LE.setuint16(data, offset, cmd); offset     += 2;
            LE.setuint16(data, offset, len); offset     += 2;
            LE.setuint32(data, offset, session); offset += 4;
            LE.setuint32(data, offset, status); offset  += 4;
            LE.setuint64(data, offset, context); offset += 8;
            LE.setuint32(data, offset, options); offset += 4;
            switch (cmd)
            {
            case CMD_RR_DATA:
                LE.setuint32(data, offset, ihandle); offset += 4;
                LE.setuint16(data, offset, timeout); offset += 2;
                LE.setuint16(data, offset, count); offset   += 2;
                LE.setuint16(data, offset, type_1); offset  += 2;
                LE.setuint16(data, offset, len_1); offset   += 2;
                LE.setuint16(data, offset, type_2); offset  += 2;
                LE.setuint16(data, offset, len_2); offset   += 2;
                break;

            case CMD_GET_SESSION:
                LE.setuint16(data, offset, protocol); offset += 2;
                LE.setuint16(data, offset, flags); offset    += 2;
                break;
            }
        }
예제 #3
0
        public static void Operaciones()
        {
            string frase, LE;
            int    indice = 0;
            string Aux    = "";

            Console.Clear();
            Console.WriteLine("********************************************************");
            Console.WriteLine(" ----- Intercalacion de Mayusculas y Minusculas --------");
            Console.WriteLine("********************************************************");
            Console.WriteLine("Digite una frase : ");
            frase = Console.ReadLine();
            Console.WriteLine("********************************************************");
            indice = 1;
            while ((indice <= frase.Length))
            {
                LE = IntercalarFrase(frase, indice - 1, 1);
                if ((indice % 2 == 0))
                {
                    Aux = Aux + LE.ToLower();
                }
                else
                {
                    Aux = Aux + LE.ToUpper();
                }

                indice++;
            }
            Console.WriteLine();
            Console.WriteLine("Frase Intercalada : {0}", Aux);
            Console.WriteLine("********************************************************");
            Console.WriteLine();
            Console.WriteLine("Pulsa para volver al Menu.");
            Console.ReadLine();
        }
예제 #4
0
        public static JFTag[] decodeMultiPacket(byte[] data, int tagcnt)
        {
            int cmd = LE.getuint16(data, 0);
            int id  = LE.getuint16(data, 2);
            int len = LE.getuint32(data, 4);
            int cnt = LE.getuint16(data, 8);

            if (cnt != tagcnt)
            {
                return(null);
            }
            JFTag[] tags = new JFTag[tagcnt];
            int     pos  = 10;

            for (int a = 0; a < tagcnt; a++)
            {
                tags[a] = new JFTag(null);
                int type = LE.getuint16(data, pos);
                pos += 2;
                int datalen = LE.getuint16(data, pos);
                pos += 2;
                JFTag tag = new JFTag(null);
                tag.data = Arrays <byte> .CopyOf(data, pos, pos + datalen);

                pos += datalen;
            }
            return(tags);
        }
예제 #5
0
        private int readuint32()
        {
            int _uint32 = LE.getuint32(data, datapos);

            datapos += 4;
            return(_uint32);
        }
예제 #6
0
 public void write(byte[] data, int offset)
 {
     data[offset++] = cmd;
     data[offset++] = count;
     data[offset++] = path_1;
     data[offset++] = class_1;
     data[offset++] = path_2;
     data[offset++] = class_2;
     data[offset++] = ticktime;
     data[offset++] = ticktimeout;
     LE.setuint16(data, offset, len); offset += 2;
     data[offset++] = service;
     data[offset++] = tag_size;
     data[offset++] = tag_type;
     data[offset++] = tag_len;
     Arrays <byte> .Copy(tag_chars, 0, data, offset, tag_chars.Length); offset += tag_chars.Length;
     if (tag_chars.Length % 2 != 0)
     {
         data[offset++] = 0; //padding
     }
     Arrays <byte> .Copy(tagdata, 0, data, offset, tagdata.Length); offset += tagdata.Length;
     data[offset++] = route_size;
     data[offset++] = route_res;
     data[offset++] = route_seg;
     data[offset++] = route_addr;
 }
예제 #7
0
        public static byte[] makeWritePacket(JFTag[] tags, byte[][] tagdata)
        {
            int size = 8 + 2;

            for (int a = 0; a < tags.Length; a++)
            {
                int strlen = tags[a].tag.Length;
                size += 1 + strlen;
                size += tagdata[a].Length;
            }
            byte[] data = new byte[size];
            LE.setuint16(data, 0, 0x0004);      //write tag cmd
            LE.setuint16(data, 2, 0x1234);      //unique id
            LE.setuint32(data, 4, size - 8);    //data Length
            LE.setuint16(data, 8, tags.Length); //count
            int pos = 12;

            for (int a = 0; a < tags.Length; a++)
            {
                int strlen = tags[a].tag.Length;
                LE.setuint8(data, pos, strlen); //strlen
                pos++;
                Arrays <byte> .Copy(tags[a].tag.ToByteArray(), 0, data, pos, strlen);

                pos += strlen;
                LE.setuint16(data, pos, tags[a].type);      //tag type
                pos += 2;
                LE.setuint16(data, pos, tagdata[a].Length); //tag size
                pos += 2;
                Arrays <byte> .Copy(tagdata[a], 0, data, pos, tagdata[a].Length);

                pos += tagdata[a].Length;
            }
            return(data);
        }
예제 #8
0
        private int readuint16()
        {
            int _uint16 = LE.getuint16(data, datapos);

            datapos += 2;
            return(_uint16);
        }
예제 #9
0
        public static void Operaciones()
        {
            string linea, LE;
            int    suma;

            Console.WriteLine("**************************************************");
            Console.WriteLine("-----------Cantidad de Volcales Cerradas ---------");
            Console.WriteLine("**************************************************");

            Console.WriteLine("Digite una Frase : ");
            Console.WriteLine("");
            linea = Console.ReadLine();
            Console.WriteLine("***************************************************");
            suma  = 0;
            linea = linea.ToUpper();
            Console.WriteLine(linea);
            for (int i = 0; i < linea.Length; i++)
            {
                LE = Mid(linea, i, 1);
                if (LE.Contains("U") || LE.Contains("I"))
                {
                    suma = suma + 1;
                }
            }
            Console.WriteLine("****************************************************");
            Console.WriteLine("Existen {0} Vocales Cerradas. ", suma);
            Console.WriteLine("****************************************************");
            Console.WriteLine("Pulsa una tecla para volver al menu."); Console.ReadLine();
        }         //End Method
예제 #10
0
        public Tile(TVec2 ID, TVec3 scale, TVec3 position, TMesh cube, TMesh ball, bool walkable)
        {
            this.ID       = ID;
            this.cube     = LE.CopyEntity(cube);
            this.ball     = LE.CopyEntity(ball);
            this.walkable = walkable;
            LE.ShowEntity(this.cube);

            //set position and scale
            LE.ScaleEntity(this.cube, scale);
            LE.PositionEntity(this.cube, position);

            LE.ScaleEntity(this.ball, new TVec3(scale.X / 2, scale.Y / 2, scale.Z / 2));
            LE.PositionEntity(this.ball, new TVec3(position.X, position.Y + 1, position.Z));

            //Set a different Color when the tile is non walkable
            if (!this.walkable)
            {
                LE.EntityColor(this.cube, Tile.BLACK);
            }
            else
            {
                LE.EntityColor(this.cube, Tile.PINK);
                LE.EntityColor(this.ball, Tile.YELLOW);
            }
        }
예제 #11
0
        public override string GenerateCode()
        {
            /**/
            var s        = "";
            var register = "";

            var v = TryGetValue();

            if (v != null)
            {
                register = MIPS.GetReg();
                s       += MIPS.Emit(MIPS.Opcodes.li, register, v.ToString(), "\t\t\t# calculated in compilation time :)");
                return(s);
            }
            var l = LE.GenerateCode();
            //var reg2 = (MIPS.regCount - 1).ToReg();
            var reg2 = MIPS.LastReg();//

            var r = RE.GenerateCode();
            //var reg1 = (MIPS.regCount - 1).ToReg();
            var reg1 = MIPS.LastReg();//

            register = MIPS.GetReg();

            switch (OP)
            {
            case "+":
                s += MIPS.Emit(MIPS.Opcodes.add, register, reg2, reg1);
                break;

            case "-":
                s += MIPS.Emit(MIPS.Opcodes.sub, register, reg2, reg1);
                break;

            case "*":
                s += MIPS.Emit(MIPS.Opcodes.mul, register, reg2, reg1);
                break;

            case "/":
                s += MIPS.Emit(MIPS.Opcodes.div, register, reg2, reg1);
                break;

            default:
                break;
            }
            if (l.Contains("Method"))
            {
                return(l + r + s);
            }
            else
            {
                return(r + l + s);
            }
        }
예제 #12
0
        public static bool isPacketComplete(byte[] data)
        {
            if (data.Length < 8)
            {
                return(false);
            }
            //int cmd = LE.getuint16(data, 0);
            //int id = LE.getuint16(data, 2);
            int len = LE.getuint32(data, 4);

            return(data.Length >= 8 + len);
        }
예제 #13
0
        /** Save entire wav file (supports 16/32bit only) */
        public bool Save(IOStream os)
        {
            if (bits != 16 && bits != 32)
            {
                return(false);
            }
            int size = 0;

            switch (bits)
            {
            case 16:
                bytes = 2;
                size  = samples16.Length * 2;
                break;

            case 32:
                bytes = 4;
                size  = samples32.Length * 4;
                break;
            }
            try {
                byte[] data = new byte[20];
                //write RIFF header (20 bytes);
                LE.setString(data, 0, 4, "RIFF");
                LE.setuint32(data, 4, size + 36);    //rest of file size
                LE.setString(data, 8, 4, "WAVE");
                LE.setString(data, 12, 4, "fmt ");
                LE.setuint32(data, 16, 16);    //fmt size
                os.Write(data, 0, 20);
                //write fmt header (16 bytes)
                data = new byte[16 + 4 + 4];
                LE.setuint16(data, 0, 1);    //PCM
                LE.setuint16(data, 2, chs);
                LE.setuint32(data, 4, rate);
                LE.setuint32(data, 8, bytes * chs * rate); //bytes rate/sec
                LE.setuint32(data, 12, bytes * chs);       //block align
                LE.setuint16(data, 14, bits);
                LE.setString(data, 16, 4, "data");
                LE.setuint32(data, 20, size);
                os.Write(data, 0, 16 + 4 + 4);
                switch (bits)
                {
                case 16: os.Write(LE.shortArray2byteArray(samples16, null)); break;

                case 32: os.Write(LE.intArray2byteArray(samples32, null)); break;
                }
            } catch (Exception e) {
                errmsg = e.ToString();
                return(false);
            }
            return(false);
        }
예제 #14
0
        public static byte[] makeReadPacket(JFTag tag)
        {
            int strlen = tag.tag.Length;

            byte[] data = new byte[8 + 2 + 1 + strlen];
            LE.setuint16(data, 0, 0x0003);     //read tag cmd
            LE.setuint16(data, 2, 0x1234);     //unique id
            LE.setuint32(data, 4, 2 + strlen); //data Length
            LE.setuint16(data, 8, 1);          //count
            LE.setuint8(data, 10, strlen);     //strlen
            Arrays <byte> .Copy(tag.tag.ToByteArray(), 0, data, 11, strlen);

            return(data);
        }
예제 #15
0
        private long readuint64()
        {
            long _uint64;

            if (le)
            {
                _uint64 = LE.getuint64(data, datapos);
            }
            else
            {
                _uint64 = BE.getuint64(data, datapos);
            }
            datapos += 8;
            return(_uint64);
        }
예제 #16
0
        private int readuint32()
        {
            int _uint32;

            if (le)
            {
                _uint32 = LE.getuint32(data, datapos);
            }
            else
            {
                _uint32 = BE.getuint32(data, datapos);
            }
            datapos += 4;
            return(_uint32);
        }
예제 #17
0
        private short readuint16()
        {
            int _uint16;

            if (le)
            {
                _uint16 = LE.getuint16(data, datapos);
            }
            else
            {
                _uint16 = BE.getuint16(data, datapos);
            }
            datapos += 2;
            return((short)_uint16);
        }
예제 #18
0
        public static JFTag decodePacket(byte[] data)
        {
            int cmd = LE.getuint16(data, 0);
            int id  = LE.getuint16(data, 2);
            int len = LE.getuint32(data, 4);
            int cnt = LE.getuint16(data, 8);

            if (cnt != 1)
            {
                return(null);
            }
            int   type    = LE.getuint16(data, 10);
            int   size    = LE.getuint16(data, 12);
            int   datalen = len - 6;
            JFTag tag     = new JFTag(null);

            tag.data = Arrays <byte> .CopyOf(data, 12, 12 + datalen);

            return(tag);
        }
예제 #19
0
파일: Tag.cs 프로젝트: attackgithub/QSharp
        /** Queues pending data to be written on next cycle. (only valid if start() has been called). */
        public void SetValue(String value)
        {
            byte[] data = null;
            if (IsBE())
            {
                switch (Size)
                {
                case TagType.Bit: data = new byte[] { (byte)(value.Equals("0") ? 0 : 1) }; break;

                case TagType.Int8: data = new byte[] { Byte.ValueOf(value) }; break;

                case TagType.Int16: data = new byte[2]; BE.setuint16(data, 0, Int32.ValueOf(value)); break;

                case TagType.Int32: data = new byte[4]; BE.setuint32(data, 0, Int32.ValueOf(value)); break;

                case TagType.Float32: data = new byte[4]; BE.setuint32(data, 0, Float.FloatToIntBits(Float.ValueOf(value))); break;

                case TagType.Float64: data = new byte[4]; BE.setuint64(data, 0, Double.DoubleToLongBits(Double.ValueOf(value))); break;
                }
            }
            else
            {
                switch (Size)
                {
                case TagType.Bit: data = new byte[] { (byte)(value.Equals("0") ? 0 : 1) }; break;

                case TagType.Int8: data = new byte[] { Byte.ValueOf(value) }; break;

                case TagType.Int16: data = new byte[2]; LE.setuint16(data, 0, Int32.ValueOf(value)); break;

                case TagType.Int32: data = new byte[4]; LE.setuint32(data, 0, Int32.ValueOf(value)); break;

                case TagType.Float32: data = new byte[4]; LE.setuint32(data, 0, Float.FloatToIntBits(Float.ValueOf(value))); break;

                case TagType.Float64: data = new byte[4]; LE.setuint64(data, 0, Double.DoubleToLongBits(Double.ValueOf(value))); break;
                }
            }
            lock (pendingLock) {
                pending = data;
            }
        }
예제 #20
0
        public static void CVocalesCerradas()
        {
            string NOM;
            int    K, SUM;
            string LE;

            Console.Write("DIGITE UNA FRASE : "); NOM = Console.ReadLine();
            SUM = 0;
            NOM = NOM.ToUpper();
            Console.Write(NOM);
            for (K = 1; K < NOM.Length; K++)
            {
                LE = Extras.Mid(NOM, K, 1);
                if (LE.Contains("U") || LE.Contains("I"))
                {
                    SUM = SUM + 1;
                }
            }
            Console.WriteLine("EXISTEN {0} VOCALES CERRADAS", SUM);
            Console.WriteLine("pulse una tecla:"); Console.ReadKey(); Console.Clear();
        }
예제 #21
0
        static void Main(string[] args)
        {
            string NOM;
            int    K, SUM;
            string LE;

            Console.Write("DIGITE UNA FRASE : "); NOM = Console.ReadLine();
            SUM = 0;
            NOM = NOM.ToUpper();
            Console.Write(NOM);
            for (K = 1; K < NOM.Length; K++)
            {
                LE = Mid(NOM, K, 1);
                if (LE.Contains("U") || LE.Contains("I"))
                {
                    SUM = SUM + 1;
                }
            }
            Console.WriteLine("EXISTEN {0} VOCALES CERRADAS", SUM);
            Console.Write("Pulse una Tecla:"); Console.ReadLine();
        }
예제 #22
0
        public void ShowPath()
        {
            bool startFound = false;

            TVec2        currentTile = endTile;
            List <TVec2> pathTiles   = new List <TVec2>();

            while (startFound == false)
            {
                List <TVec2> adjacentTiles = GetAdjacentTiles(currentTile);

                //check to see what newest current tile
                foreach (TVec2 adjacentTile in adjacentTiles)
                {
                    //Check if it is the start tile
                    if (adjacentTile.X == startTile.X && adjacentTile.Y == startTile.Y)
                    {
                        startFound = true;
                    }
                    //it has to be inside the closed as well as in the open list
                    if (closedList.Contains(adjacentTile) || openList.Contains(adjacentTile))
                    {
                        if (grid[(int)adjacentTile.X, (int)adjacentTile.Y].cost <= grid[(int)currentTile.X, (int)currentTile.Y].cost &&
                            grid[(int)adjacentTile.X, (int)adjacentTile.Y].cost > 0)
                        {
                            //Change the current Tile
                            currentTile = adjacentTile;

                            //Add this adjacent tile to the path list
                            pathTiles.Add(adjacentTile);

                            //Show the ball
                            LE.ShowEntity(grid[(int)adjacentTile.X, (int)adjacentTile.Y].ball);

                            break;
                        }
                    }
                }
            }
        }
예제 #23
0
        public static byte[] makeWritePacket(JFTag tag, byte[] tagdata)
        {
            int strlen = tag.tag.Length;

            byte[] data = new byte[8 + 2 + 1 + strlen + 2 + 2 + tagdata.Length];
            LE.setuint16(data, 0, 0x0004);     //write tag cmd
            LE.setuint16(data, 2, 0x1234);     //unique id
            LE.setuint32(data, 4, 2 + strlen); //data Length
            LE.setuint16(data, 8, 1);          //count
            LE.setuint8(data, 10, strlen);     //strlen
            Arrays <byte> .Copy(tag.tag.ToByteArray(), 0, data, 11, strlen);

            int pos = 11 + strlen;

            LE.setuint16(data, pos, tag.type);       //tagtype
            pos += 2;
            LE.setuint16(data, pos, tagdata.Length); //tag size
            pos += 2;
            Arrays <byte> .Copy(tagdata, 0, data, pos, tagdata.Length);

            return(data);
        }
예제 #24
0
        /// <summary>
        /// Divides the right operand from the left one.
        /// </summary>
        /// <param name="Left">Left operand.</param>
        /// <param name="Right">Right operand.</param>
        /// <param name="Node">Node performing the operation.</param>
        /// <returns>Result</returns>
        public static IElement EvaluateDivision(IElement Left, IElement Right, ScriptNode Node)
        {
            IRingElement RE = Right as IRingElement;
            IElement     Result;
            IRingElement Temp;

            if (Left is IRingElement LE && RE != null)
            {
                Temp = RE.Invert();
                if (Temp != null)
                {
                    Result = LE.MultiplyRight(Temp);
                    if (Result != null)
                    {
                        return(Result);
                    }

                    Result = Temp.MultiplyLeft(LE);
                    if (Result != null)
                    {
                        return(Result);
                    }
                }
            }

            if (Left.IsScalar)
            {
                if (Right.IsScalar)
                {
                    ISet LeftSet  = Left.AssociatedSet;
                    ISet RightSet = Right.AssociatedSet;

                    if (!LeftSet.Equals(RightSet))
                    {
                        if (!Expression.Upgrade(ref Left, ref LeftSet, ref Right, ref RightSet, Node))
                        {
                            throw new ScriptRuntimeException("Incompatible operands.", Node);
                        }

                        LE = Left as IRingElement;
                        RE = Right as IRingElement;
                        if (LE != null && RE != null)
                        {
                            Temp = RE.Invert();
                            if (Temp != null)
                            {
                                Result = LE.MultiplyRight(Temp);
                                if (Result != null)
                                {
                                    return(Result);
                                }

                                Result = Temp.MultiplyLeft(LE);
                                if (Result != null)
                                {
                                    return(Result);
                                }
                            }
                        }
                    }

                    throw new ScriptRuntimeException("Operands cannot be divided.", Node);
                }
                else
                {
                    LinkedList <IElement> Elements = new LinkedList <IElement>();

                    foreach (IElement RightChild in Right.ChildElements)
                    {
                        Elements.AddLast(EvaluateDivision(Left, RightChild, Node));
                    }

                    return(Right.Encapsulate(Elements, Node));
                }
            }
            else
            {
                if (Right.IsScalar)
                {
                    LinkedList <IElement> Elements = new LinkedList <IElement>();

                    foreach (IElement LeftChild in Left.ChildElements)
                    {
                        Elements.AddLast(EvaluateDivision(LeftChild, Right, Node));
                    }

                    return(Left.Encapsulate(Elements, Node));
                }
                else
                {
                    ICollection <IElement> LeftChildren  = Left.ChildElements;
                    ICollection <IElement> RightChildren = Right.ChildElements;

                    if (LeftChildren.Count == RightChildren.Count)
                    {
                        LinkedList <IElement>  Elements = new LinkedList <IElement>();
                        IEnumerator <IElement> eLeft    = LeftChildren.GetEnumerator();
                        IEnumerator <IElement> eRight   = RightChildren.GetEnumerator();

                        try
                        {
                            while (eLeft.MoveNext() && eRight.MoveNext())
                            {
                                Elements.AddLast(EvaluateDivision(eLeft.Current, eRight.Current, Node));
                            }
                        }
                        finally
                        {
                            eLeft.Dispose();
                            eRight.Dispose();
                        }

                        return(Left.Encapsulate(Elements, Node));
                    }
                    else
                    {
                        LinkedList <IElement> LeftResult = new LinkedList <IElement>();

                        foreach (IElement LeftChild in LeftChildren)
                        {
                            LinkedList <IElement> RightResult = new LinkedList <IElement>();

                            foreach (IElement RightChild in RightChildren)
                            {
                                RightResult.AddLast(EvaluateDivision(LeftChild, RightChild, Node));
                            }

                            LeftResult.AddLast(Right.Encapsulate(RightResult, Node));
                        }

                        return(Left.Encapsulate(LeftResult, Node));
                    }
                }
            }
        }
예제 #25
0
 private void writeuint32(int val)
 {
     LE.setuint32(tmp, 0, val);
     baos.Write(tmp, 0, 4);
 }
예제 #26
0
 private void writeuint16(int val)
 {
     LE.setuint16(tmp, 0, val);
     baos.Write(tmp, 0, 2);
 }
예제 #27
0
        /////////////////////// A* ///////////////////////
        ///add the starting node to the open list
        ///while the open list is not empty
        /// {
        ///  current node = node from open list with the lowest cost
        ///  if currentnode = goal
        ///    path complete
        ///  else
        ///    move current node to the closed list
        ///    for each adjacent node
        ///      if it lies with the field
        ///        and it isn't an obstacle
        ///          and it isn't on the open list
        ///            and isn't on the closed list
        ///              move it to the open list and calculate cost
        //////////////////////////////////////////////////
        #endregion

        public void SearchPath(TVec2 startTile, TVec2 endTile)
        {
            this.startTile = startTile;
            this.endTile   = endTile;

            //Reset all the values
            for (int i = 0; i < AStartTest.gridWidth; i++)
            {
                for (int j = 0; j < AStartTest.gridHeight; j++)
                {
                    grid[i, j].cost      = 0;
                    grid[i, j].heuristic = 0;
                }
            }

            #region Path validation
            bool canSearch = true;

            if (grid[(int)startTile.X, (int)startTile.Y].walkable == false)
            {
                Console.WriteLine("The start tile is non walkable. Choose a different value than: " + startTile.ToString());
                canSearch = false;
            }
            if (grid[(int)endTile.X, (int)endTile.Y].walkable == false)
            {
                Console.WriteLine("The end tile is non walkable. Choose a different value than: " + endTile.ToString());
                canSearch = false;
            }
            #endregion

            //Start the A* algorithm
            if (canSearch)
            {
                //add the starting tile to the open list
                openList.Add(startTile);
                currentTile = new TVec2(-1, -1);

                //while Openlist is not empty
                while (openList.Count != 0)
                {
                    //current node = node from open list with the lowest cost
                    currentTile = GetTileWithLowestTotal(openList);

                    //If the currentTile is the endtile, then we can stop searching
                    if (currentTile.X == endTile.X && currentTile.Y == endTile.Y)
                    {
                        Console.WriteLine("YEHA, We found the end tile!!!! :D");
                        break;
                    }
                    else
                    {
                        //move the current tile to the closed list and remove it from the open list
                        openList.Remove(currentTile);
                        closedList.Add(currentTile);

                        //Get all the adjacent Tiles
                        List <TVec2> adjacentTiles = GetAdjacentTiles(currentTile);

                        foreach (TVec2 adjacentTile in adjacentTiles)
                        {
                            //adjacent tile can not be in the open list
                            if (!openList.Contains(adjacentTile))
                            {
                                //adjacent tile can not be in the closed list
                                if (!closedList.Contains(adjacentTile))
                                {
                                    //move it to the open list and calculate cost
                                    openList.Add(adjacentTile);

                                    Tile tile = grid[(int)adjacentTile.X, (int)adjacentTile.Y];

                                    //Calculate the cost
                                    tile.cost = grid[(int)currentTile.X, (int)currentTile.Y].cost + 1;

                                    //Calculate the manhattan distance
                                    tile.heuristic = ManhattanDistance(adjacentTile);

                                    //calculate the total amount
                                    tile.total = tile.cost + tile.heuristic;

                                    //make this tile green
                                    LE.EntityColor(tile.cube, Tile.GREEN);
                                }
                            }
                        }
                    }
                }
            }

            //Pain the start and end tile red
            LE.EntityColor(grid[(int)startTile.X, (int)startTile.Y].cube, Tile.RED);
            LE.EntityColor(grid[(int)endTile.X, (int)endTile.Y].cube, Tile.RED);

            //Show the path
            ShowPath();
        }
예제 #28
0
        /// <summary>
        /// Calculates Left ^ Right.
        /// </summary>
        /// <param name="Left">Left operand.</param>
        /// <param name="Right">Right operand.</param>
        /// <param name="Node">Node performing the operation.</param>
        /// <returns>Result</returns>
        public static IElement EvaluatePower(IElement Left, IElement Right, ScriptNode Node)
        {
            DoubleNumber DR = Right as DoubleNumber;

            if (Left is DoubleNumber DL && DR != null)
            {
                return(new DoubleNumber(Math.Pow(DL.Value, DR.Value)));
            }

            if (Left is IRingElement LE && DR != null)
            {
                double d = DR.Value;
                if (d >= long.MinValue && d <= long.MaxValue && Math.Truncate(d) == d)
                {
                    long n = (long)d;

                    if (n < 0)
                    {
                        LE = LE.Invert();
                        if (LE == null)
                        {
                            throw new ScriptRuntimeException("Base element not invertible.", Node);
                        }

                        n = -n;
                    }
                    else if (n == 0)
                    {
                        if (!(LE is ICommutativeRingWithIdentityElement LE2))
                        {
                            throw new ScriptRuntimeException("Base element ring does not have unity.", Node);
                        }

                        return(LE2.One);
                    }

                    IRingElement Result = null;

                    while (n > 0)
                    {
                        if ((n & 1) == 1)
                        {
                            if (Result == null)
                            {
                                Result = LE;
                            }
                            else
                            {
                                Result = (IRingElement)Multiply.EvaluateMultiplication(Result, LE, Node);
                            }
                        }

                        n >>= 1;
                        if (n > 0)
                        {
                            LE = (IRingElement)Multiply.EvaluateMultiplication(LE, LE, Node);
                        }
                    }

                    return(Result);
                }
                else
                {
                    throw new ScriptRuntimeException("Exponent too large.", Node);
                }
            }

            if (Left.IsScalar)
            {
                if (Right.IsScalar)
                {
                    throw new ScriptRuntimeException("Power operation could not be computed.", Node);
                }
                else
                {
                    LinkedList <IElement> Elements = new LinkedList <IElement>();

                    foreach (IElement RightChild in Right.ChildElements)
                    {
                        Elements.AddLast(EvaluatePower(Left, RightChild, Node));
                    }

                    return(Right.Encapsulate(Elements, Node));
                }
            }
            else
            {
                if (Right.IsScalar)
                {
                    LinkedList <IElement> Elements = new LinkedList <IElement>();

                    foreach (IElement LeftChild in Left.ChildElements)
                    {
                        Elements.AddLast(EvaluatePower(LeftChild, Right, Node));
                    }

                    return(Left.Encapsulate(Elements, Node));
                }
                else
                {
                    ICollection <IElement> LeftChildren  = Left.ChildElements;
                    ICollection <IElement> RightChildren = Right.ChildElements;

                    if (LeftChildren.Count == RightChildren.Count)
                    {
                        LinkedList <IElement>  Elements = new LinkedList <IElement>();
                        IEnumerator <IElement> eLeft    = LeftChildren.GetEnumerator();
                        IEnumerator <IElement> eRight   = RightChildren.GetEnumerator();

                        try
                        {
                            while (eLeft.MoveNext() && eRight.MoveNext())
                            {
                                Elements.AddLast(EvaluatePower(eLeft.Current, eRight.Current, Node));
                            }
                        }
                        finally
                        {
                            eLeft.Dispose();
                            eRight.Dispose();
                        }

                        return(Left.Encapsulate(Elements, Node));
                    }
                    else
                    {
                        LinkedList <IElement> LeftResult = new LinkedList <IElement>();

                        foreach (IElement LeftChild in LeftChildren)
                        {
                            LinkedList <IElement> RightResult = new LinkedList <IElement>();

                            foreach (IElement RightChild in RightChildren)
                            {
                                RightResult.AddLast(EvaluatePower(LeftChild, RightChild, Node));
                            }

                            LeftResult.AddLast(Right.Encapsulate(RightResult, Node));
                        }

                        return(Left.Encapsulate(LeftResult, Node));
                    }
                }
            }
        }
예제 #29
0
        public bool Load(IOStream wav)
        {
            errmsg = "";
            try {
                byte[] data = new byte[30];
                //read RIFF header (20 bytes);
                wav.Read(data, 0, 20);
                if (!LE.getString(data, 0, 4).Equals("RIFF"))
                {
                    throw new Exception("wav is not a valid WAV file (RIFF)");
                }
                if (!LE.getString(data, 8, 4).Equals("WAVE"))
                {
                    throw new Exception("wav is not a valid WAV file (WAVE)");
                }
                if (!LE.getString(data, 12, 4).Equals("fmt "))
                {
                    throw new Exception("wav is not a valid WAV file (fmt )");
                }
                int fmtsiz = LE.getuint32(data, 16);
                if ((fmtsiz < 16) || (fmtsiz > 30))
                {
                    throw new Exception("wav is not a valid WAV file (fmtsiz)");
                }
                wav.Read(data, 0, fmtsiz);
                if (LE.getuint16(data, 0) != 1)
                {
                    throw new Exception("wav is not PCM");
                }
                chs = LE.getuint16(data, 2);
                if (chs < 1 || chs > 2)
                {
                    throw new Exception("wav is not supported (# chs)");
                }
                rate = LE.getuint32(data, 4);
                bits = LE.getuint16(data, 14);
                switch (bits)
                {
                //                case 8: bytes = 1; break;    //can't support 8bit for now (upscale later ???)
                case 16: bytes = 2; break;

                case 24: bytes = 3; break;

                case 32: bytes = 4; break;

                default: throw new Exception("wav is not supported (bits=" + bits + ")");
                }
                wav.Read(data, 0, 8);
                while (true)
                {
                    dataLength = LE.getuint32(data, 4);
                    if (LE.getString(data, 0, 4).Equals("data"))
                    {
                        break;
                    }
                    //ignore chunk (FACT, INFO, etc.)
                    wav.SetPosition(wav.GetPosition() + dataLength);
                    wav.Read(data, 0, 8);
                }
                samples8 = wav.ReadAll().ToArray();
                wav.Close();
                switch (bits)
                {
                case 8: return(true);

                case 24:
                    //TODO!!!???
                    break;

                case 16:
                    samples16 = new short[dataLength / 2];
                    CPP.Add("std::memcpy(samples16->data(), samples8->data(), dataLength);");
                    break;

                case 32:
                    samples32 = new int[dataLength / 4];
                    CPP.Add("std::memcpy(samples32->data(), samples8->data(), dataLength);");
                    break;
                }
            } catch (Exception e1) {
                errmsg = e1.ToString();
                wav.Close();
                return(false);
            }
            return(true);
        }
예제 #30
0
        // Module defining this command


        // Optional custom code for this activity


        /// <summary>
        /// Returns a configured instance of System.Management.Automation.PowerShell, pre-populated with the command to run.
        /// </summary>
        /// <param name="context">The NativeActivityContext for the currently running activity.</param>
        /// <returns>A populated instance of Sytem.Management.Automation.PowerShell</returns>
        /// <remarks>The infrastructure takes responsibility for closing and disposing the PowerShell instance returned.</remarks>
        protected override ActivityImplementationContext GetPowerShell(NativeActivityContext context)
        {
            System.Management.Automation.PowerShell invoker       = global::System.Management.Automation.PowerShell.Create();
            System.Management.Automation.PowerShell targetCommand = invoker.AddCommand(PSCommandName);

            // Initialize the arguments

            if (InputObject.Expression != null)
            {
                targetCommand.AddParameter("InputObject", InputObject.Get(context));
            }

            if (FilterScript.Expression != null)
            {
                targetCommand.AddParameter("FilterScript", FilterScript.Get(context));
            }

            if (Property.Expression != null)
            {
                targetCommand.AddParameter("Property", Property.Get(context));
            }

            if (Value.Expression != null)
            {
                targetCommand.AddParameter("Value", Value.Get(context));
            }

            if (EQ.Expression != null)
            {
                targetCommand.AddParameter("EQ", EQ.Get(context));
            }

            if (CEQ.Expression != null)
            {
                targetCommand.AddParameter("CEQ", CEQ.Get(context));
            }

            if (NE.Expression != null)
            {
                targetCommand.AddParameter("NE", NE.Get(context));
            }

            if (CNE.Expression != null)
            {
                targetCommand.AddParameter("CNE", CNE.Get(context));
            }

            if (GT.Expression != null)
            {
                targetCommand.AddParameter("GT", GT.Get(context));
            }

            if (CGT.Expression != null)
            {
                targetCommand.AddParameter("CGT", CGT.Get(context));
            }

            if (LT.Expression != null)
            {
                targetCommand.AddParameter("LT", LT.Get(context));
            }

            if (CLT.Expression != null)
            {
                targetCommand.AddParameter("CLT", CLT.Get(context));
            }

            if (GE.Expression != null)
            {
                targetCommand.AddParameter("GE", GE.Get(context));
            }

            if (CGE.Expression != null)
            {
                targetCommand.AddParameter("CGE", CGE.Get(context));
            }

            if (LE.Expression != null)
            {
                targetCommand.AddParameter("LE", LE.Get(context));
            }

            if (CLE.Expression != null)
            {
                targetCommand.AddParameter("CLE", CLE.Get(context));
            }

            if (Like.Expression != null)
            {
                targetCommand.AddParameter("Like", Like.Get(context));
            }

            if (CLike.Expression != null)
            {
                targetCommand.AddParameter("CLike", CLike.Get(context));
            }

            if (NotLike.Expression != null)
            {
                targetCommand.AddParameter("NotLike", NotLike.Get(context));
            }

            if (CNotLike.Expression != null)
            {
                targetCommand.AddParameter("CNotLike", CNotLike.Get(context));
            }

            if (Match.Expression != null)
            {
                targetCommand.AddParameter("Match", Match.Get(context));
            }

            if (CMatch.Expression != null)
            {
                targetCommand.AddParameter("CMatch", CMatch.Get(context));
            }

            if (NotMatch.Expression != null)
            {
                targetCommand.AddParameter("NotMatch", NotMatch.Get(context));
            }

            if (CNotMatch.Expression != null)
            {
                targetCommand.AddParameter("CNotMatch", CNotMatch.Get(context));
            }

            if (Contains.Expression != null)
            {
                targetCommand.AddParameter("Contains", Contains.Get(context));
            }

            if (CContains.Expression != null)
            {
                targetCommand.AddParameter("CContains", CContains.Get(context));
            }

            if (NotContains.Expression != null)
            {
                targetCommand.AddParameter("NotContains", NotContains.Get(context));
            }

            if (CNotContains.Expression != null)
            {
                targetCommand.AddParameter("CNotContains", CNotContains.Get(context));
            }

            if (In.Expression != null)
            {
                targetCommand.AddParameter("In", In.Get(context));
            }

            if (CIn.Expression != null)
            {
                targetCommand.AddParameter("CIn", CIn.Get(context));
            }

            if (NotIn.Expression != null)
            {
                targetCommand.AddParameter("NotIn", NotIn.Get(context));
            }

            if (CNotIn.Expression != null)
            {
                targetCommand.AddParameter("CNotIn", CNotIn.Get(context));
            }

            if (Is.Expression != null)
            {
                targetCommand.AddParameter("Is", Is.Get(context));
            }

            if (IsNot.Expression != null)
            {
                targetCommand.AddParameter("IsNot", IsNot.Get(context));
            }


            return(new ActivityImplementationContext()
            {
                PowerShellInstance = invoker
            });
        }
        internal void LoadData(LE.GameEngine.board.BoardSerializable gameData)
        {
            //Player1.LoadSaveData(gameData);
            //Game.StartNewGame();

        }