예제 #1
0
        private void SenseAdjacentSquares(ScratchRover rover)
        {
            _mapDirty = false;
            _adjacentSquares.Clear();
            rover.SenseSquare(Direction.Up);
            if (_mappedTerrain[(_posY - 1) * Width + _posX] != rover.Sense) // Reversed for Scratch
            {
                _mapDirty = true;
            }
            _mappedTerrain[(_posY - 1) * Width + _posX] = rover.Sense; // Reversed for Scratch
            _adjacentSquares.Add(rover.Sense);

            rover.SenseSquare(Direction.Right);
            if (_mappedTerrain[_posY * Width + _posX + 1] != rover.Sense)
            {
                _mapDirty = true;
            }
            _mappedTerrain[_posY * Width + _posX + 1] = rover.Sense;
            _adjacentSquares.Add(rover.Sense);

            rover.SenseSquare(Direction.Down);
            if (_mappedTerrain[(_posY + 1) * Width + _posX] != rover.Sense) // Reversed for Scratch
            {
                _mapDirty = true;
            }
            _mappedTerrain[(_posY + 1) * Width + _posX] = rover.Sense; // Reversed for Scratch
            _adjacentSquares.Add(rover.Sense);

            rover.SenseSquare(Direction.Left);
            if (_mappedTerrain[_posY * Width + _posX - 1] != rover.Sense)
            {
                _mapDirty = true;
            }
            _mappedTerrain[_posY * Width + _posX - 1] = rover.Sense;
            _adjacentSquares.Add(rover.Sense);

            rover.SenseSquare(Direction.None);
            _mappedTerrain[_posY * Width + _posX] = rover.Sense;
            _adjacentSquares.Add(rover.Sense);

            _potentialPower[0] = 0;
            _potentialPower[1] = 0;

            if (_adjacentSquares[4] == TerrainType.Smooth)
            {
                _potentialPower[0] = rover.NoBacktrack * rover.NoBacktrack * rover.NoBacktrack;
            }

            for (Int32 i = 0; i < 4; i++)
            {
                if (_adjacentSquares[i] == TerrainType.Smooth)
                {
                    _potentialPower[1] = (rover.NoBacktrack + 1) * (rover.NoBacktrack + 1) * (rover.NoBacktrack + 1);
                    break;
                }
            }
        }
예제 #2
0
 private void SenseAdjacentSquares(ScratchRover rover)
 {
     adjacentSquares.Clear();
     rover.SenseSquare(Direction.Up);
     adjacentSquares.Add(rover.Sense);
     rover.SenseSquare(Direction.Right);
     adjacentSquares.Add(rover.Sense);
     rover.SenseSquare(Direction.Down);
     adjacentSquares.Add(rover.Sense);
     rover.SenseSquare(Direction.Left);
     adjacentSquares.Add(rover.Sense);
     rover.SenseSquare(Direction.None);
     adjacentSquares.Add(rover.Sense);
 }