Exemple #1
0
        public MZMaze()
        {
            int    cuurent_mod = (Application.Current as App).UserGameData.current_module;
            string path        = (Application.Current as App).UserGameData.GameSettings.what_module(cuurent_mod);

            path = string.Concat(path, ".mzp");
            //string path = "kal.mzp";
            Uri uri = new Uri(path, UriKind.Relative);

            StreamResourceInfo sri = Application.GetResourceStream(uri);

            byte[] data = new byte[sri.Stream.Length];
            sri.Stream.Read(data, 0, data.Length);

            //int level = 1;
            int level = (Application.Current as App).UserGameData.levelnumber;

            int n          = data[0];
            int baseOffset = 1 + n * 2 + data[1 + (level - 1) * 2] * 256 + data[2 + (level - 1) * 2];

            _width  = data[baseOffset];
            _height = data[baseOffset + 1];
            _minimalStepsRequired = data[baseOffset + 2] * 256 + data[baseOffset + 3];
            _cellMatrix           = new MZCellMatrix(_width, _height);

            for (int i = 0; i < _width; i++)
            {
                for (int j = 0; j < _height; j++)
                {
                    MZPosition thisPosition = new MZPosition(i, j);
                    MZCell     thisCell     = _cellMatrix.cellAtPosition(thisPosition);
                    MZByte     thisCellData = new MZByte(data[baseOffset + i * _height + j + 4]);
                    MZByte     walls        = new MZByte((byte)(thisCellData.value() & MZMacro.LOW4BIT));
                    bool       isWin        = (thisCellData.value() & MZMacro.BIT5) != 0;
                    bool       isStart      = (thisCellData.value() & MZMacro.BIT6) != 0;
                    bool       isEmpty      = (thisCellData.value() & MZMacro.BIT7) != 0;
                    thisCell.isEmpty = isEmpty;
                    thisCell.setWallsValue(walls);
                    if (isWin)
                    {
                        _winningPosition = thisPosition;
                    }
                    if (isStart)
                    {
                        _startingPosition = thisPosition;
                    }
                }
            }
            _flowList = new List <MZFlow>();

            /*
             * if(userGameData currentModuleName] isEqualToString: @"Reciever"] && level == 2)
             * {
             * [_flowList addObject:[[MZFlow alloc] initWithPosition: [[MZPosition alloc] initWithX:4 andY:8] direction: RIGHT length:6 andSpeed: 1.0/15.0]];
             * }*/
            //cuurent_mod == 4 - Reciever
            if ((cuurent_mod == 4) && (level == 2))
            {
                MZPosition pos  = new MZPosition(4, 8);
                MZFlow     flow = new MZFlow(pos, MZDirection.RIGHT, 6, 1.0 / 15.0);
                _flowList.Add(flow);
            }
        }
Exemple #2
0
        public bool hasWallAtDirection(MZDirection direction)
        {
            int result = (int)(_walls.value()) & (1 << (int)direction);

            return(result != 0 ? true : false);
        }