Exemplo n.º 1
0
        private void GameUnitMonster_DragDrop(object sender, DragEventArgs e)
        {
            string id = (string)e.Data.GetData(DataFormats.Text);

            if (agentHeros.ContainsKey(id))
            {
                BattleUnit battleUnitHero = agentHeros[id]?.Unit;
                if (battleUnitHero != null)
                {
                    Hero    hero    = (Hero)battleUnitHero;
                    Monster monster = (Monster)((UnitAgent)sender).Unit;
                    if (hero.IsAlive && (monster?.IsAlive ?? false))
                    {
                        hero.Attack(monster);
                        if (!monster.IsAlive)
                        {
                            ((UnitAgent)sender).AllowDrop = false;
                        }
                        if (agentHeros.ContainsKey(id))
                        {   // 关闭该Hero对应的控件的攻击许可
                            UnitAgent agentHero = agentHeros[id];
                            if (agentHero != null)
                            {
                                agentHero.PermitAttack = false;
                            }
                        }
                        ReadyForRound();
                    }
                }
                battleUnitHero = null;
            }
        }
Exemplo n.º 2
0
        private void btnSceneLoad_Click(object sender, EventArgs e)
        {
            AllowPlayerToArchive(false);

            BinaryFormatter formatter = new BinaryFormatter();
            List <KeyValuePair <Hero, bool> > herosWithPermit = null;
            List <Monster> monsters = null;

            using (FileStream stream = new FileStream(pathGameArchive, FileMode.Open))
            {
                herosWithPermit = (List <KeyValuePair <Hero, bool> >)formatter.Deserialize(stream);
                monsters        = (List <Monster>)formatter.Deserialize(stream);
                stream.Dispose();
            }

            foreach (UnitAgent unitAgent in agentHeros.Values)
            {
                unitAgent.AttackMouseDown -= GameUnitHero_MouseDown;
                unitAgent.Dispose();
            }
            foreach (UnitAgent unitAgent in agentMonsters.Values)
            {
                unitAgent.DragEnter -= GameUnitMonster_DragEnter;
                unitAgent.DragDrop  -= GameUnitMonster_DragDrop;
                unitAgent.Dispose();
            }

            flayoutHeros.Controls.Clear();
            flayoutMonsters.Controls.Clear();
            agentHeros.Clear();
            agentMonsters.Clear();

            foreach (KeyValuePair <Hero, bool> heroWithPermit in herosWithPermit)
            {
                UnitAgent gameUnit = new UnitAgent(heroWithPermit.Key)
                {
                    PermitAttack = heroWithPermit.Value
                };
                gameUnit.AttackMouseDown += GameUnitHero_MouseDown;
                agentHeros.Add(heroWithPermit.Key.Id, gameUnit);
                flayoutHeros.Controls.Add(gameUnit);
            }

            foreach (Monster monster in monsters)
            {
                UnitAgent gameUnit = new UnitAgent(monster);
                gameUnit.DragEnter += GameUnitMonster_DragEnter;
                gameUnit.DragDrop  += GameUnitMonster_DragDrop;
                gameUnit.AllowDrop  = true;
                agentMonsters.Add(monster.Id, gameUnit);
                flayoutMonsters.Controls.Add(gameUnit);
            }

            herosWithPermit = null;
            monsters        = null;

            AllowPlayerToArchive(true);
        }
Exemplo n.º 3
0
        public FormMiddleRPG()
        {
            InitializeComponent();

            //Hero[] initHeros = new Hero[] {
            //    UnitFactory.CreateArchon(),
            //    UnitFactory.CreateDarkTemplar(),
            //    UnitFactory.CreateHighTemplar()
            //};
            //Monster[] initMonsters = new Monster[] {
            //    UnitFactory.CreateQueen(),
            //    UnitFactory.CreateHydralisk(),
            //    UnitFactory.CreateUltralisk()
            //};

            Hero[] initHeros = new string[] { "Archon", "DarkTemplar", "HighTemplar" }
            .Select(x => UnitFactory.CreateHero(x))
            .ToArray();
            Monster[] initMonsters = new string[] { "Queen", "Hydralisk", "Ultralisk" }
            .Select(x => UnitFactory.CreateMonster(x))
            .ToArray();

            foreach (Hero hero in initHeros)
            {
                UnitAgent gameUnit = new UnitAgent(hero);
                gameUnit.AttackMouseDown += GameUnitHero_MouseDown;
                agentHeros.Add(hero.Id, gameUnit);
                flayoutHeros.Controls.Add(gameUnit);
            }
            foreach (Monster monster in initMonsters)
            {
                UnitAgent gameUnit = new UnitAgent(monster);
                gameUnit.DragEnter += GameUnitMonster_DragEnter;
                gameUnit.DragDrop  += GameUnitMonster_DragDrop;
                gameUnit.AllowDrop  = true;
                agentMonsters.Add(monster.Id, gameUnit);
                flayoutMonsters.Controls.Add(gameUnit);
            }

            // 根据目前场上的所有单位,创建回合循环,false代表我方先手
            roundLoop = ControlRound(false).GetEnumerator();
            // 回合循环创建后,必须先迭代一次,执行战场回合初始化
            roundLoop.MoveNext();
            timerRound.Interval = 1000;
        }