コード例 #1
0
ファイル: GameField.cs プロジェクト: SergeyKoz/Dashes
        private void InitFieldArray(int fx, int fy)
        {
            if (fileldArray != null)
            {
                //clean field
                int lx = fileldArray.GetLength(0);
                int ly = fileldArray.GetLength(1);
                for (int iy = 0; iy <= ly - 1; iy++)
                {
                    for (int ix = 0; ix <= lx - 1; ix++)
                    {
                        fileldArray[ix, iy].Clean();
                    }
                }
            }

            fileldArray = new GameCell[fx, fy];

            for (int iy = 0; iy <= fy - 1; iy++)
            {
                for (int ix = 0; ix <= fx - 1; ix++)
                {
                    if (fileldArray[ix, iy] is GameCell)
                    {
                        fileldArray[ix, iy].Clean();
                    }
                    else
                    {
                        fileldArray[ix, iy] = new GameCell(ix, iy, CellMode.Empty, CellMode.Empty, WinMode.None);
                    }
                }
            }
        }
コード例 #2
0
        public State(GameCell[,] field, GameState gs)
        {
            Inside = new string[field.GetLength(0), field.GetLength(1)];
            Moles  = new List <string>();
            Plants = new List <string>();

            for (var i = 0; i < field.GetLength(0); i++)
            {
                for (var j = 0; j < field.GetLength(1); j++)
                {
                    if (field[i, j].P != null)
                    {
                        Plants.Add("P" + field[i, j].P.Id + ": " + field[i, j].P.Health);
                    }

                    foreach (var m in field[i, j].M)
                    {
                        Moles.Add("M" + m.Id + (m.Gender == Gender.Male ? "M" : "F") + ": " + m.Health);
                    }

                    Inside[i, j] = (field[i, j]?.P?.Health > 0 ? "P" + field[i, j].P.Id + " " : "") +
                                   (field[i, j]?.C != null ? "C " : "") +
                                   field[i, j]?.M.Aggregate("",
                                                            (current, tmp) => current + "M" + tmp.Id + (tmp.Gender == Gender.Male ? "M " : "F "));
                }
            }

            Plants.Add(string.Empty);
            Plants.Add(gs == GameState.СWiNs ? "Cottager wins!" : gs == GameState.MWiNs ? "Moles wins!" : "");
        }
コード例 #3
0
ファイル: GameMap.cs プロジェクト: Team-on/LD42
 public GameMap()
 {
     map = new GameCell[Settings.fieldSize.X, Settings.fieldSize.Y];
     for (byte x = 0; x < map.GetLength(0); ++x)
     {
         for (byte y = 0; y < map.GetLength(1); ++y)
         {
             map[x, y] = new GameCell();
         }
     }
     camPos = new CoordReal(Settings.camStartPos);
 }
コード例 #4
0
 private static string[,] ConvertField(GameCell[,] gamefield)
 {
     string[,] stringField = new string[gamefield.GetLength(0), gamefield.GetLength(1)];
     for (int i = 0; i < stringField.GetLength(0); i++)
     {
         for (int j = 0; j < stringField.GetLength(1); j++)
         {
             stringField[i, j] = gamefield[i, j].Display;
         }
     }
     return(stringField);
 }
コード例 #5
0
        public static char[,] To2dChars(this GameCell[,] cells)
        {
            var grid = new char[cells.GetLength(0), cells.GetLength(1)];

            for (int x = 0; x < cells.GetLength(0); x += 1)
            {
                for (int y = 0; y < cells.GetLength(1); y += 1)
                {
                    grid[x, y] = (char)(cells[x, y].Value);
                }
            }

            return(grid);
        }
コード例 #6
0
 private static void AllOtherKeys(GameCell[,] gameField, int i, int j, GameCell elem, Panel MainPanel, PictureBox[,] pictureField)
 {
     if (j == gameField.GetLength(1) - 2 && i == gameField.GetLength(0) - 2)
     {
         CreateElement(i, j, -1, 0, gameField, elem, MainPanel, pictureField);
     }
     else if (j == gameField.GetLength(1) - 2)
     {
         CreateElement(i, j, 1, 0, gameField, elem, MainPanel, pictureField);
     }
     else
     {
         CreateElement(i, j, 0, 1, gameField, elem, MainPanel, pictureField);
     }
 }
コード例 #7
0
ファイル: GameBoard.cs プロジェクト: m-c-rogers/CST226
        //Iterate through two-dimensional array and set roughly 15% of cells to LIVE
        private void activateCells()
        {
            Random rand = new Random();

            for (int i = 0; i < gameboard.GetLength(0); i++)
            {
                for (int j = 0; j < gameboard.GetLength(1); j++)
                {
                    if (rand.Next(0, 100) <= 15)
                    {
                        gameboard[i, j].CellLive = true;
                    }
                }
            }
        }
コード例 #8
0
ファイル: GameLogic.cs プロジェクト: khrpnv/LodeRunner
 public static int[] FindPosition(GameCell[,] gameField, string type)
 {
     int[] result = new int[2];
     for (int i = 0; i < gameField.GetLength(0); i++)
     {
         for (int j = 0; j < gameField.GetLength(1); j++)
         {
             if (gameField[i, j].Type == type)
             {
                 result[0] = i;
                 result[1] = j;
             }
         }
     }
     return(result);
 }
コード例 #9
0
        public static Tuple <int, int> IndexOf(this GameCell[,] cells, GameCell cell)
        {
            for (var x = 0; x < cells.GetLength(0); x++)
            {
                for (var y = 0; y < cells.GetLength(1); y++)
                {
                    if (cells[x, y].Equals(cell))
                    {
                        return(new Tuple <int, int>(x, y));
                    }
                }
            }

            //If code reaches this point, then it didn't find anything, return -1
            return(new Tuple <int, int>(-1, -1));
        }
コード例 #10
0
        public GameMap(Windows.GameWindow window)
        {
            globalMap = new GlobalGameMap();

            map = new GameCell[Game.Settings.map_sizeY, Game.Settings.map_sizeX];
            for (byte i = 0; i < map.GetLength(0); ++i)
            {
                window.MazeGrid.RowDefinitions.Add(new RowDefinition());
                for (byte j = 0; j < map.GetLength(1); ++j)
                {
                    map[i, j] = new GameCell();
                }
            }
            for (byte j = 0; j < map.GetLength(1); ++j)
            {
                window.MazeGrid.ColumnDefinitions.Add(new ColumnDefinition());
            }
        }
コード例 #11
0
        public static Tuple <int, int> CoordinatesOf(this GameCell[,] matrix, CellType type)
        {
            int w = matrix.GetLength(0); // width
            int h = matrix.GetLength(1); // height

            for (int x = 0; x < w; ++x)
            {
                for (int y = 0; y < h; ++y)
                {
                    if (matrix[x, y].Value.Equals(type))
                    {
                        return(Tuple.Create(x, y));
                    }
                }
            }

            return(null);
        }
コード例 #12
0
ファイル: Player.cs プロジェクト: khrpnv/LodeRunner
 private static void DestroyCells(GameCell[,] gameField, PictureBox[,] pictureField, int i, int j, int delta, Panel MainPanel)
 {
     if (gameField[i + 1, j + delta].Type != "Ground" || gameField[i, j + delta].Type != "FreeArea" ||
         gameField[i, j + delta].Type == "Ground" || i + 1 == gameField.GetLength(0) - 1 || gameField[i, j + delta].Type == "SimpleEnemy")
     {
         return;
     }
     GeneralDestroy(gameField, pictureField, i, j, 1, delta, MainPanel);
 }
コード例 #13
0
ファイル: Player.cs プロジェクト: khrpnv/LodeRunner
 private static void DestroyStrong(GameCell[,] gameField, PictureBox[,] pictureField, int i, int j, Panel MainPanel)
 {
     if (gameField[i + 1, j].Type != "StrongGround" || gameField[i, j].Type == "Ladder" ||
         i + 1 == gameField.GetLength(0) - 1 || _harmerAmount <= 0)
     {
         return;
     }
     _harmerAmount--;
     GeneralDestroy(gameField, pictureField, i, j, 1, 0, MainPanel);
 }
コード例 #14
0
 private static void DeleteElement(int i, int j, int deltay, int deltax, GameCell[,] gameField, Panel MainPanel, PictureBox[,] pictureField)
 {
     if (i + deltay == gameField.GetLength(0) - 1 || j + deltax == 0)
     {
         return;
     }
     gameField[i + deltay, j + deltax] = new FreeArea();
     gameField[i, j] = new Cursor();
     UpdateCreator(i, j, deltax, deltay, gameField, pictureField, new Cursor(), new FreeArea(), MainPanel);
 }
コード例 #15
0
        public static void CreateLevel(GameCell[,] gameField, string name)
        {
            Matrix matrix = new Matrix {
                H     = gameField.GetLength(0),
                W     = gameField.GetLength(1),
                Field = ConvertField(gameField)
            };

            name += ".json";
            string data = JsonConvert.SerializeObject(matrix);

            if (!File.Exists("Data\\Levels\\" + name))
            {
                StreamWriter output = new StreamWriter("Data\\Levels\\" + name);
                output.WriteLine(data);
                output.Close();
                Application.Restart();
                Environment.Exit(0);
            }
        }
コード例 #16
0
        public void OutputMap(Windows.GameWindow window)
        {
            for (byte i = 0; i < map.GetLength(0); ++i)
            {
                for (byte j = 0; j < map.GetLength(1); ++j)
                {
                    Grid.SetRow(map[i, j].imageCell, i);
                    Grid.SetColumn(map[i, j].imageCell, j);
                    Grid.SetZIndex(map[i, j].imageCell, 0);
                    window.MazeGrid.Children.Add(map[i, j].imageCell);

                    Grid.SetRow(map[i, j].imageContent, i);
                    Grid.SetColumn(map[i, j].imageContent, j);
                    Grid.SetZIndex(map[i, j].imageContent, 1);
                    window.MazeGrid.Children.Add(map[i, j].imageContent);
                }
            }
            for (int i = 0; i < Game.Settings.handSize; ++i)
            {
                window.CardsGrid.ColumnDefinitions.Add(new ColumnDefinition());
            }

            for (byte i = 0; i < map.GetLength(0); ++i)
            {
                for (byte j = 0; j < map.GetLength(1); ++j)
                {
                    map[i, j].IsWall = !map[i, j].IsWall;
                }
            }
            for (byte i = 0; i < map.GetLength(0); ++i)
            {
                for (byte j = 0; j < map.GetLength(1); ++j)
                {
                    map[i, j].IsWall = !map[i, j].IsWall;
                }
            }
        }
コード例 #17
0
ファイル: Player.cs プロジェクト: khrpnv/LodeRunner
 private static void RopeOrScrap(GameCell[,] gameField, PictureBox[,] pictureField, int i, int j, int delta, Panel MainPanel)
 {
     if (j + delta == 0 || j + delta == gameField.GetLength(1) - 1)
     {
         return;
     }
     if (RopeTrapAmount > 0)
     {
         PutTrap(gameField, pictureField, i, j, delta, MainPanel);
     }
     else
     {
         DestroyWall(gameField, pictureField, i, j, delta, MainPanel);
     }
 }
コード例 #18
0
ファイル: GameMap.cs プロジェクト: Team-on/LD42
 public void GenerateNewMap()
 {
     for (byte x = 0; x < map.GetLength(0); ++x)
     {
         for (byte y = 0; y < map.GetLength(1); ++y)
         {
             if (x == 0 || y == 0 || x == map.GetLength(0) - 1 || y == map.GetLength(1) - 1)
             {
                 map[x, y].isWall = true;
                 map[x, y].image.LoadImg(@"wall\1");
             }
             else
             {
                 map[x, y].image.LoadImg(@"floor\1");
             }
         }
     }
 }
コード例 #19
0
        private void GameProcess()
        {
            gs = GameState.Playing;
            var rnd = new Random();

            while (gs == GameState.Playing)
            {
                for (var i = 0; i < _field.GetLength(0); i++)
                {
                    for (var j = 0; j < _field.GetLength(1); j++)
                    {
                        if (_field[i, j].M.Count > 0)
                        {
                            if (_field[i, j].M.Count >= 2) // плодим кротов
                            {
                                var femIndex = _field[i, j].M.FindIndex(x => x.Gender == Gender.Female && x.Hunger == GlobalVars.MaxHunger);
                                var malIndex = _field[i, j].M.FindIndex(x => x.Gender == Gender.Male && x.Hunger == GlobalVars.MaxHunger);
                                if (femIndex >= 0 && malIndex >= 0)
                                {
                                    _field[i, j].M.Add(new Mole((Gender)rnd.Next(0, 2), GlobalVars.DefaultSpeed, i, j, _moleId++));
                                }
                            }

                            foreach (var tmp in _field[i, j].M)
                            {
                                tmp.Eat(_field[i, j].P);
                            }

                            if (_field[i, j].P == null || _field[i, j].C != null) // двигаем крота
                            {
                                if (_field[i, j].M.Count == 0)
                                {
                                    break;
                                }

                                for (var x = 0; x < _field[i, j].M.Count; x++)
                                {
                                    if (_field[i, j].M[x].Moved)
                                    {
                                        continue;
                                    }

                                    var succeedMole = false;
                                    while (!succeedMole) // пока удается двигаться
                                    {
                                        var d = (Direction)rnd.Next(0, 4);

                                        switch (d)
                                        {
                                        case Direction.Left:
                                            if (i - 1 >= 0 && i - 1 != _field[i, j].M[x].PrevW)
                                            {
                                                _field[i, j].M[x].Moved = true;
                                                _field[i, j].M[x].PrevW = i;               // запоминаю этому кроту текущую клетку как предыдущую
                                                _field[i, j].M[x].PrevH = j;
                                                _field[i - 1, j].M.Add(_field[i, j].M[x]); // добавляю крота в новую клетку,
                                                _field[i, j].M.Remove(_field[i, j].M[x]);  // удаляю крота из текущей
                                                succeedMole = true;                        // удалось подвинуться
                                            }
                                            break;

                                        case Direction.Up:
                                            if (j - 1 >= 0 && j - 1 != _field[i, j].M[x].PrevH)
                                            {
                                                _field[i, j].M[x].Moved = true;
                                                _field[i, j].M[x].PrevW = i;
                                                _field[i, j].M[x].PrevH = j;
                                                _field[i, j - 1].M.Add(_field[i, j].M[x]);
                                                _field[i, j].M.Remove(_field[i, j].M[x]);
                                                succeedMole = true;
                                            }
                                            break;

                                        case Direction.Right:
                                            if (i + 1 < _field.GetLength(0) && i + 1 != _field[i, j].M[x].PrevW)
                                            {
                                                _field[i, j].M[x].Moved = true;
                                                _field[i, j].M[x].PrevW = i;
                                                _field[i, j].M[x].PrevH = j;
                                                _field[i + 1, j].M.Add(_field[i, j].M[x]);
                                                _field[i, j].M.Remove(_field[i, j].M[x]);
                                                succeedMole = true;
                                            }
                                            break;

                                        case Direction.Down:
                                            if (j + 1 < _field.GetLength(1) && j + 1 != _field[i, j].M[x].PrevH)
                                            {
                                                _field[i, j].M[x].Moved = true;
                                                _field[i, j].M[x].PrevW = i;
                                                _field[i, j].M[x].PrevH = j;
                                                _field[i, j + 1].M.Add(_field[i, j].M[x]);
                                                _field[i, j].M.Remove(_field[i, j].M[x]);
                                                succeedMole = true;
                                            }
                                            break;

                                        default:
                                            throw new ArgumentOutOfRangeException();     //Исключение, которое выдается, если значение аргумента не соответствует допустимому
                                                                                         //диапазону значений, установленному вызванным методом.
                                        }
                                    }
                                }
                            }
                        }

                        if (_field[i, j].C != null)
                        {
                            {
                                foreach (var tmp in _field[i, j].M)
                                {
                                    _field[i, j].C.Hit(tmp);
                                }

                                if (_field[i, j].M.Count == 0 && !_field[i, j].C.Moved) // двигаем дачника
                                {                                                       // двигается только если нет кротов, и он еще не двигался
                                    _field[i, j].C.PrevW = i;
                                    _field[i, j].C.PrevH = j;
                                    var succeedCottager = false;

                                    while (!succeedCottager)
                                    {
                                        var d = (Direction)rnd.Next(0, 4);
                                        switch (d)
                                        {
                                        case Direction.Left:
                                            if (i - 1 >= 0 && i - 1 != _field[i, j].C.PrevW)
                                            {
                                                _field[i - 1, j].C = _field[i, j].C;
                                                _field[i, j].C     = null;
                                                succeedCottager    = true;
                                            }
                                            break;

                                        case Direction.Up:
                                            if (j - 1 >= 0 && j - 1 != _field[i, j].C.PrevH)
                                            {
                                                _field[i, j - 1].C = _field[i, j].C;
                                                _field[i, j].C     = null;
                                                succeedCottager    = true;
                                            }
                                            break;

                                        case Direction.Right:
                                            if (i + 1 < _field.GetLength(0) && i + 1 != _field[i, j].C.PrevW)
                                            {
                                                _field[i + 1, j].C = _field[i, j].C;
                                                _field[i, j].C     = null;
                                                succeedCottager    = true;
                                            }
                                            break;

                                        case Direction.Down:
                                            if (j + 1 < _field.GetLength(1) && j + 1 != _field[i, j].C.PrevH)
                                            {
                                                _field[i, j + 1].C = _field[i, j].C;
                                                _field[i, j].C     = null;
                                                succeedCottager    = true;
                                            }
                                            break;

                                        default:
                                            throw new ArgumentOutOfRangeException();
                                        }
                                    }
                                }
                            }
                        }

                        if (_field[i, j].P != null && _field[i, j].P.S == Status.Dead)
                        {
                            _field[i, j].P = null;
                        }
                        if (_field[i, j].M.Count > 0)
                        {
                            _field[i, j].M.RemoveAll(a => a.S == Status.Dead);
                        }
                    }
                }

                _field.Cast <GameCell>().ToList().ForEach(x => x.M.ForEach(y => y.Moved = false));
                gs = _field.Cast <GameCell>().Count(x => x.P != null) == 0 // количество клеток, в которых растение не равно null.
                     // то есть все условие сверху значит - если нет растений, а далее если нет кротов
                    ? GameState.MWiNs                                      // значит, выиграли кроты, иначе либо дачник, либо играем дальше
                    : _field.Cast <GameCell>().Count(x => x.M.Count > 0) == 0 ? GameState.СWiNs : GameState.Playing;
                _form.Invoke(_update);                                     // обовляем форму
                Thread.Sleep(1000);
            }
        }
コード例 #20
0
        private void GameProcess()
        {
            gs = GameState.Playing;
            var rnd = new Random();

            while (gs == GameState.Playing)
            {
                for (var i = 0; i < _field.GetLength(0); i++)
                {
                    for (var j = 0; j < _field.GetLength(1); j++)
                    {
                        if (_field[i, j].M.Count > 0)
                        {
                            if (_field[i, j].M.Count >= 2) // what if female and male moles are in one cell
                            {
                                var femIndex = _field[i, j].M.FindIndex(x => x.Gender == Gender.Female && x.Hunger == GlobalVars.MaxHunger);
                                var malIndex = _field[i, j].M.FindIndex(x => x.Gender == Gender.Male && x.Hunger == GlobalVars.MaxHunger);
                                if (femIndex >= 0 && malIndex >= 0)
                                {
                                    _field[i, j].M.Add(new Mole((Gender)rnd.Next(0, 2), GlobalVars.DefaultSpeed, i, j, _moleId++));
                                }
                            }

                            foreach (var tmp in _field[i, j].M)
                            {
                                tmp.Eat(_field[i, j].P);
                            }

                            if (_field[i, j].P == null || _field[i, j].C != null) // move mole
                            {
                                if (_field[i, j].M.Count == 0)
                                {
                                    break;
                                }

                                for (var x = 0; x < _field[i, j].M.Count; x++)
                                {
                                    if (_field[i, j].M[x].Moved)
                                    {
                                        continue;
                                    }

                                    var succeedMole = false;
                                    while (!succeedMole) // while it's possible to move
                                    {
                                        var d = (Direction)rnd.Next(0, 4);

                                        switch (d)
                                        {
                                        case Direction.Left:
                                            if (i - 1 >= 0 && i - 1 != _field[i, j].M[x].PrevW)
                                            {
                                                _field[i, j].M[x].Moved = true;
                                                _field[i, j].M[x].PrevW = i;
                                                _field[i, j].M[x].PrevH = j;
                                                _field[i - 1, j].M.Add(_field[i, j].M[x]);
                                                _field[i, j].M.Remove(_field[i, j].M[x]);
                                                succeedMole = true;
                                            }
                                            break;

                                        case Direction.Up:
                                            if (j - 1 >= 0 && j - 1 != _field[i, j].M[x].PrevH)
                                            {
                                                _field[i, j].M[x].Moved = true;
                                                _field[i, j].M[x].PrevW = i;
                                                _field[i, j].M[x].PrevH = j;
                                                _field[i, j - 1].M.Add(_field[i, j].M[x]);
                                                _field[i, j].M.Remove(_field[i, j].M[x]);
                                                succeedMole = true;
                                            }
                                            break;

                                        case Direction.Right:
                                            if (i + 1 < _field.GetLength(0) && i + 1 != _field[i, j].M[x].PrevW)
                                            {
                                                _field[i, j].M[x].Moved = true;
                                                _field[i, j].M[x].PrevW = i;
                                                _field[i, j].M[x].PrevH = j;
                                                _field[i + 1, j].M.Add(_field[i, j].M[x]);
                                                _field[i, j].M.Remove(_field[i, j].M[x]);
                                                succeedMole = true;
                                            }
                                            break;

                                        case Direction.Down:
                                            if (j + 1 < _field.GetLength(1) && j + 1 != _field[i, j].M[x].PrevH)
                                            {
                                                _field[i, j].M[x].Moved = true;
                                                _field[i, j].M[x].PrevW = i;
                                                _field[i, j].M[x].PrevH = j;
                                                _field[i, j + 1].M.Add(_field[i, j].M[x]);
                                                _field[i, j].M.Remove(_field[i, j].M[x]);
                                                succeedMole = true;
                                            }
                                            break;

                                        default:
                                            throw new ArgumentOutOfRangeException();
                                        }
                                    }
                                }
                            }
                        }

                        if (_field[i, j].C != null)
                        {
                            {
                                foreach (var tmp in _field[i, j].M)
                                {
                                    _field[i, j].C.Hit(tmp);
                                }

                                if (_field[i, j].M.Count == 0 && !_field[i, j].C.Moved) // moving cottager
                                {                                                       // only if there is no mole and he hasn't moved yet                                    _field[i, j].C.PrevW = i;
                                    _field[i, j].C.PrevH = j;
                                    var succeedCottager = false;

                                    while (!succeedCottager)
                                    {
                                        var d = (Direction)rnd.Next(0, 4);
                                        switch (d)
                                        {
                                        case Direction.Left:
                                            if (i - 1 >= 0 && i - 1 != _field[i, j].C.PrevW)
                                            {
                                                _field[i - 1, j].C = _field[i, j].C;
                                                _field[i, j].C     = null;
                                                succeedCottager    = true;
                                            }
                                            break;

                                        case Direction.Up:
                                            if (j - 1 >= 0 && j - 1 != _field[i, j].C.PrevH)
                                            {
                                                _field[i, j - 1].C = _field[i, j].C;
                                                _field[i, j].C     = null;
                                                succeedCottager    = true;
                                            }
                                            break;

                                        case Direction.Right:
                                            if (i + 1 < _field.GetLength(0) && i + 1 != _field[i, j].C.PrevW)
                                            {
                                                _field[i + 1, j].C = _field[i, j].C;
                                                _field[i, j].C     = null;
                                                succeedCottager    = true;
                                            }
                                            break;

                                        case Direction.Down:
                                            if (j + 1 < _field.GetLength(1) && j + 1 != _field[i, j].C.PrevH)
                                            {
                                                _field[i, j + 1].C = _field[i, j].C;
                                                _field[i, j].C     = null;
                                                succeedCottager    = true;
                                            }
                                            break;

                                        default:
                                            throw new ArgumentOutOfRangeException();
                                        }
                                    }
                                }
                            }
                        }

                        if (_field[i, j].P != null && _field[i, j].P.S == Status.Dead)
                        {
                            _field[i, j].P = null;
                        }
                        if (_field[i, j].M.Count > 0)
                        {
                            _field[i, j].M.RemoveAll(a => a.S == Status.Dead);
                        }
                    }
                }

                _field.Cast <GameCell>().ToList().ForEach(x => x.M.ForEach(y => y.Moved = false));
                gs = _field.Cast <GameCell>().Count(x => x.P != null) == 0 // number of cell, where plant != null
                     // so, if there is no plants and if there is no mole , then moles wins. Else cottager wins or we continue playing
                    ? GameState.MWiNs
                    : _field.Cast <GameCell>().Count(x => x.M.Count > 0) == 0 ? GameState.СWiNs : GameState.Playing;
                _form.Invoke(_update);
                Thread.Sleep(1000);
            }
        }
コード例 #21
0
ファイル: Player.cs プロジェクト: khrpnv/LodeRunner
 private static void LeftRightArrowMovement(GameCell[,] gameField, PictureBox[,] pictureField, int i, int j, int delta, Panel MainPanel)
 {
     if (j + delta == 0 || j + delta == gameField.GetLength(1) - 1)
     {
         return;
     }
     if (_counter > _boost * 7)
     {
         _boost--;
     }
     if (_activePill > _pill * 20)
     {
         _pill--;
     }
     if (_helmetCount > _helmet * 4)
     {
         _helmet--;
     }
     if (_boost > 0)
     {
         if (gameField[i, j + 2 * delta] is Ground)
         {
             return;
         }
         SkipElements(gameField, pictureField, i, j, 2 * delta, 0, new Player(), MainPanel);
         pictureField[i, j + 2 * delta].Image = new Bitmap("Data\\Icons\\player.png");
         gameField[i, j + 2 * delta]          = new Player();
         _counter++;
         return;
     }
     if (gameField[i, j + delta].Type == "SimpleEnemy" || i == 0)
     {
         DieFromEnemy(gameField, pictureField, i, j, delta, MainPanel);
     }
     if (gameField[i, j + 2 * delta].Type == "Door")
     {
         _doorSide = delta;
     }
     else if (gameField[i, j + delta].Type == "Teleport")
     {
         Teleportation(gameField, pictureField, i, j, delta, new Player(), MainPanel);
         return;
     }
     if (_helmet > 0)
     {
         _helmetCount++;
         if (DetectItems(gameField, pictureField, i, j, delta, MainPanel))
         {
             SkipElements(gameField, pictureField, i, j, delta, 0, new Player(), MainPanel);
             _prev = new FreeArea();
         }
         else
         {
             SkipElements(gameField, pictureField, i, j, delta, 0, new Player(), MainPanel);
         }
         Update(i, j, delta, 0, gameField, pictureField, _prev, new Player(), MainPanel);
         return;
     }
     if (gameField[i - 1, j].Type == "Ladder" && gameField[i, j + delta].Type != "Ground" || gameField[i + 1, j].Type == "Ladder" && gameField[i, j + delta].Type != "Ground")
     {
         MoveOnLadder(i, j, 0, delta, gameField, new Player());
         Update(i, j, delta, 0, gameField, pictureField, new Player(), new Ladder(), MainPanel);
     }
     else if (gameField[i, j + delta].Type != "Ground" && gameField[i, j + delta].Type != "StrongGround" && gameField[i, j + delta].Type != "Door" && gameField[i, j + delta].Type != "Unbreakable" && j + delta > 0)
     {
         if (DetectItems(gameField, pictureField, i, j, delta, MainPanel))
         {
             SkipElements(gameField, pictureField, i, j, delta, 0, new Player(), MainPanel);
             _prev = new FreeArea();
         }
         else
         {
             SkipElements(gameField, pictureField, i, j, delta, 0, new Player(), MainPanel);
         }
         Update(i, j, delta, 0, gameField, pictureField, _prev, new Player(), MainPanel);
     }
 }
コード例 #22
0
        public static void MoveCursor(KeyEventArgs e, GameCell[,] gameField, PictureBox[,] pictureField, Panel MainPanel, string name)
        {
            int[] coords = FindPosition(gameField, "Cursor");
            int   i      = coords[0];
            int   j      = coords[1];

            switch (e.KeyValue)
            {
            case 37:
                ArrowKeys(gameField, i, j, 0, -1, j, 1, MainPanel, pictureField);
                break;

            case 39:
                ArrowKeys(gameField, i, j, 0, 1, gameField.GetLength(1) - 2, j, MainPanel, pictureField);
                break;

            case 38:
                ArrowKeys(gameField, i, j, -1, 0, i, 1, MainPanel, pictureField);
                break;

            case 40:
                ArrowKeys(gameField, i, j, 1, 0, gameField.GetLength(0) - 2, i, MainPanel, pictureField);
                break;

            case 51:
                AllOtherKeys(gameField, i, j, new Ground(), MainPanel, pictureField);
                break;

            case 50:
                AllOtherKeys(gameField, i, j, new Gold(), MainPanel, pictureField);
                break;

            case 111:
                AllOtherKeys(gameField, i, j, new Ladder(), MainPanel, pictureField);
                break;

            case 53:
                AllOtherKeys(gameField, i, j, new StrongGround(), MainPanel, pictureField);
                break;

            case 49:
                AllOtherKeys(gameField, i, j, new Harmer(), MainPanel, pictureField);
                break;

            case 9:
                AllOtherKeys(gameField, i, j, new Bar(), MainPanel, pictureField);
                break;

            case 71 when _player == true:
                AllOtherKeys(gameField, i, j, new Player(), MainPanel, pictureField);
                _player = false;
                break;

            case 69:
                AllOtherKeys(gameField, i, j, new SimpleEnemy(), MainPanel, pictureField);
                break;

            case 84:
                AllOtherKeys(gameField, i, j, new UsedRopeTrap(), MainPanel, pictureField);
                break;

            case 68:
                AllOtherKeys(gameField, i, j, new Door(), MainPanel, pictureField);
                break;

            case 75:
                AllOtherKeys(gameField, i, j, new Key(), MainPanel, pictureField);
                break;

            case 79:
                AllOtherKeys(gameField, i, j, new ExitDoor(), MainPanel, pictureField);
                _exitDoor = false;
                break;

            case 76:
                AllOtherKeys(gameField, i, j, new Scrap(), MainPanel, pictureField);
                break;

            case 70:
                AllOtherKeys(gameField, i, j, new Teleport(), MainPanel, pictureField);
                break;

            case 85:
                AllOtherKeys(gameField, i, j, new Unbreakable(), MainPanel, pictureField);
                break;

            case 80:
                AllOtherKeys(gameField, i, j, new BlindEnemy(), MainPanel, pictureField);
                break;

            case 89:
                AllOtherKeys(gameField, i, j, new SecondPlayer(), MainPanel, pictureField);
                break;

            case 73:
                AllOtherKeys(gameField, i, j, new RandomPrize(), MainPanel, pictureField);
                break;

            case 66:
                AllOtherKeys(gameField, i, j, new Boost(), MainPanel, pictureField);
                break;

            case 81:
                AllOtherKeys(gameField, i, j, new Pill(), MainPanel, pictureField);
                break;

            case 72:
                AllOtherKeys(gameField, i, j, new Helmet(), MainPanel, pictureField);
                break;

            case 67:
                AllOtherKeys(gameField, i, j, new Coin(), MainPanel, pictureField);
                break;

            case 8:
                DeleteElement(i, j, 0, -1, gameField, MainPanel, pictureField);
                break;

            case 90:
                DeleteElement(i, j, 1, 0, gameField, MainPanel, pictureField);
                break;

            case 27 when !_player && !_exitDoor:
                CreateLevel(gameField, name);
                break;

            case 27 when _player && _exitDoor:
                MessageBox.Show("The level wasn`t created, because you have forgotten to draw player and/or exit door.");
                break;
            }
        }
コード例 #23
0
ファイル: SetValueMathod.cs プロジェクト: taler0n/Students
 public SetValuesMathod(GameCell[,] field)
     : base(field.GetLength(0), field.GetLength(1))
 {
     _field = field;
 }
コード例 #24
0
ファイル: OpenCellsMathod.cs プロジェクト: taler0n/Students
 public OpenCellsMathod(GameCell[,] field)
     : base(field.GetLength(0), field.GetLength(1))
 {
     _field      = field;
     OpenedCells = new List <Cell>();
 }