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; } }
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); }
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; }