示例#1
0
        public static ElementBase CreateElment(GameDef.GameObj e, int v, int h, int rt = -1)
        {
            switch (e)
            {
            case GameDef.GameObj.Fire:
                return(new FireElement(v, h, rt));

            case GameDef.GameObj.Water:
                return(new WaterElement(v, h, rt));

            case GameDef.GameObj.FlowWater:
                return(new FlowWaterElement(v, h, rt));

            case GameDef.GameObj.Wood:
                return(new WoodElement(v, h, rt, Tools.rand.Next(3, 7), Tools.rand.Next(5, 10)));

            case GameDef.GameObj.Glod:
                return(new GlodElement(v, h, rt));

            case GameDef.GameObj.Obsidian:
                return(new ObsidianElement(v, h, rt));

            case GameDef.GameObj.Log:
                var ne = new WoodElement(v, h, rt, 15, 1000);
                ne.type = GameDef.GameObj.Log;     //TODO临时基于木元素实现的耐烧木头,后期要改掉
                return(ne);
                //TODO
            }

            return(new FireElement(0, 0));
        }
示例#2
0
        // tool method

        //check

        /*
         *     X
         *   X o X
         *     X
         */
        protected bool isAdjacency(GameDef.GameObj elementType)
        {
            var map   = gsm.stage.running_stage_map;
            var stage = gsm.stage;

            //up
            if (stage.isValidPos(pos_v + 1, pos_h) && map[pos_v + 1, pos_h] == elementType)
            {
                return(true);
            }
            //down
            if (stage.isValidPos(pos_v - 1, pos_h) && map[pos_v - 1, pos_h] == elementType)
            {
                return(true);
            }

            //right
            if (stage.isValidPos(pos_v, pos_h + 1) && map[pos_v, pos_h + 1] == elementType)
            {
                return(true);
            }
            //left
            if (stage.isValidPos(pos_v, pos_h - 1) && map[pos_v, pos_h - 1] == elementType)
            {
                return(true);
            }

            return(false);
        }
示例#3
0
        public bool isSpecifyGameObjAt(GameDef.GameObj obj, int v, int h)
        {
            if (!isValidPos(v, h))
            {
                return(false);
            }

            return(running_stage_map[v, h] == obj);
        }
示例#4
0
        // 只设置关卡的元素地图还有玩家,其他特殊条件在各自的关卡类中实现
        public static void LoadStageCommonDataFromFile(Stage stage)
        {
            System.IO.StreamReader file = new System.IO.StreamReader(stage.filePath);
            string line;

            //get map size
            line = file.ReadLine();
            string[] size = line.Split(" ");

            int map_v_size = Int32.Parse(size[0]);
            int map_h_size = Int32.Parse(size[1]);

            int v_idx = 0;
            int h_idx = 0;

            stage.h_size = map_h_size;
            stage.v_size = map_v_size;

            stage.running_stage_map = new GameDef.GameObj[map_v_size + 1, map_h_size + 1];
            stage.orignal_stage_map = new GameDef.GameObj[map_v_size + 1, map_h_size + 1];
            stage.elements_map      = new ElementBase[map_v_size + 1, map_h_size + 1];
            stage.activateElement   = new List <ElementBase>();
            stage.goalDict          = new Dictionary <int, bool>();

            while ((line = file.ReadLine()) != null)
            {
                foreach (char c in line)
                {
                    GameDef.GameObj obj = GameDef.GameObj.Air;
                    if (GameDef.GlobalData.char2GameObjDict.ContainsKey(c))
                    {
                        obj = GameDef.GlobalData.char2GameObjDict[c];
                    }

                    //player 和 goal不往地图上写
                    if (obj == GameDef.GameObj.Player)
                    {
                        stage.player = new Player(h_idx, v_idx);
                    }
                    else if (obj == GameDef.GameObj.Goal)
                    {
                        stage.goalDict[Tools.PackCoords(v: v_idx, h: h_idx)] = false;
                    }
                    else
                    {
                        stage.running_stage_map[v_idx, h_idx] = obj;
                    }

                    stage.orignal_stage_map[v_idx, h_idx] = obj;
                    h_idx++;
                }
                h_idx = 0;
                v_idx++;
            }

            stage.InitialCommon();
        }
示例#5
0
        //check

        /*
         *   X X X
         *   X o X
         *   X X X
         */
        protected bool isNear(GameDef.GameObj elementType)
        {
            var map   = gsm.stage.running_stage_map;
            var stage = gsm.stage;

            for (int r = this.pos_v - 1; r < this.pos_v + 3; r++)
            {
                for (int c = this.pos_h; c < this.pos_h + 3; c++)
                {
                    if (stage.isValidPos(r, c) && map[r, c] == elementType)
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
示例#6
0
        protected int getNearElementNum(GameDef.GameObj elementType)
        {
            var map   = gsm.stage.running_stage_map;
            var stage = gsm.stage;

            int num = 0;

            for (int r = this.pos_v - 1; r <= this.pos_v + 1; r++)
            {
                for (int c = this.pos_h - 1; c <= this.pos_h + 1; c++)
                {
                    if (stage.isValidPos(r, c) && map[r, c] == elementType)
                    {
                        num++;
                        continue;
                    }
                }
            }
            return(num);
        }
示例#7
0
        // tool method area
        public bool GenerateNewElement(GameDef.GameObj e, int v, int h, int rt = -1)
        {
            if (!Tools.isElment(e) || !isValidPos(v, h))
            {
                Debug.WriteLine("[Stage] invaild element or pos!");
                return(false);
            }

            // 只能覆盖空气或者火
            if (!isAirAt(v, h) && !isFire(v, h))
            {
                return(false);
            }

            // 先清理原位置的
            this.RemoveElement(v, h);

            this.running_stage_map[v, h] = e;
            this.elements_map[v, h]      = ElementFactory.CreateElment(e, v, h, rt);
            this.activateElement.Add(this.elements_map[v, h]);
            Debug.WriteLine("[Stage] generate new {0} element at ({1}, {2})", this.elements_map[v, h].name, v, h);
            return(true);
        }
示例#8
0
 private void AddPoint(GameDef.GameObj obj)
 {
     //TODO
 }
示例#9
0
 public static bool isElment(GameDef.GameObj o)
 {
     return(o > GameDef.GameObj.ElementStart && o < GameDef.GameObj.ElementEnd);
 }