コード例 #1
0
ファイル: frmJoinGame.cs プロジェクト: sakseichek/homm
        public frmJoinGame()
        {
            InitializeComponent();

            _player = null;

            this.txtServerIp.Text = "127.0.0.1";

            this.listBox1.SelectedIndexChanged += new EventHandler(listBox1_SelectedIndexChanged);
        }
コード例 #2
0
ファイル: frmDuel.cs プロジェクト: sakseichek/homm
        public frmDuel()
        {
            InitializeComponent();

            _players = new ArrayList();

            Random rnd = new Random();
            int heroId = rnd.Next(1, 16);
            CreatePlayer(heroId);
            //CreatePlayer(2);

            _playerMe = (Heroes.Core.Player)_players[0];
            _currentPlayer = (Heroes.Core.Player)_players[0];
            _currentHero = (Heroes.Core.Hero)_currentPlayer._heroes[0];
        }
コード例 #3
0
ファイル: frmDuelNetwork.cs プロジェクト: sakseichek/homm
        public frmDuelNetwork()
        {
            InitializeComponent();

            _playerKIds = new Hashtable();
            _currentPlayer = null;
            _currentHero = null;

            this.ReadOnly = true;

            _isFirstRun = true;
            _hasVisitKnowStone = false;

            _day = 1;
            _week = 1;
            _month = 1;

            this._artifactVisitCounts = new int [4];
        }
コード例 #4
0
ファイル: frmGame2.cs プロジェクト: sakseichek/homm
        public frmGame2()
        {
            InitializeComponent();

            _playerIdMe = 0;
            _playerMe = null;
            _playerKIds = new Hashtable();
            _startingHeroId = 0;
            _isDoingTurn = false;
            _isBattleStarted = false;

            _attackHero = null;
            _defendHero = null;

            _isExit = false;

            _frmDuel = null;
            _frmBattle = null;

            // thread
            ThreadStart entryPoint = new ThreadStart(StartProcess);
            _processThread = new Thread(entryPoint);
            _processThread.Name = "Processing Thread";

            // timer to start game
            _timerGame = new System.Windows.Forms.Timer();
            _timerGame.Interval = 500;
            _timerGame.Tick += new EventHandler(_timerGame_Tick);
            _timerGame.Stop();

            // timer to start battle
            _timerBattle = new System.Windows.Forms.Timer();
            _timerBattle.Interval = 500;
            _timerBattle.Tick += new EventHandler(_timerBattle_Tick);
            _timerBattle.Stop();

            this.FormClosing += new FormClosingEventHandler(frmGame_FormClosing);
            this.FormClosed += new FormClosedEventHandler(frmGame_FormClosed);
        }
コード例 #5
0
ファイル: frmGame2.cs プロジェクト: sakseichek/homm
        private bool RemoteGetPlayer()
        {
            Heroes.Core.Player player = null;
            if (!RemoteGetPlayer(_playerMe._id, out player)) return false;
            if (player == null) return false;
            _playerMe = player;

            return true;
        }
コード例 #6
0
ファイル: frmGame2.cs プロジェクト: sakseichek/homm
        public DialogResult ShowDialog(Heroes.Core.Player player, bool isMaster)
        {
            _playerMe = player;
            this._playerIdMe = player._id;

            if (isMaster)
            {
                this.Text = "Server";
                cmdStart.Visible = true;
            }
            else
            {
                this.Text = "Client";
                cmdStart.Visible = false;
            }

            // start thread
            _processThread.Start();

            return this.ShowDialog();
        }
コード例 #7
0
ファイル: frmGame2.cs プロジェクト: sakseichek/homm
        private void StartProcess()
        {
            while (!_isExit)
            {
                Thread.Sleep(1000);
                //Debug.WriteLine(string.Format("Thread: {0:HH:mm:ss}", DateTime.Now));

                // wait to join game
                bool isWaitToJoingGame = false;
                if (!RemoteIsWaitToJoinGame(out isWaitToJoingGame))
                {
                    Debug.WriteLine("RemoteIsWaitToJoinGame failed.");
                    return;
                }

                if (isWaitToJoingGame)
                {
                    // get players
                    //GetPlayers();
                    //ppl players
                    //SetControlPropertyThreadSafe(this, "PplPlayersProperty", true);
                    goto NEXT_ROUND;
                }

                // starting game
                bool isNeedToStartGame = false;
                if (!RemoteIsNeedToStartGame(this._playerMe._id, out isNeedToStartGame))
                {
                    Debug.WriteLine("RemoteIsNeedToStartGame failed.");
                    return;
                }

                if (isNeedToStartGame)
                {
                    if (!RemoteSetIsNeedToStartGame(this._playerMe._id))
                    {
                        Debug.WriteLine("RemoteSetIsNeedToStartGame failed.");
                        return;
                    }

                    if (!RemoteGetPlayerIds(out this._playerIds))
                    {
                        Debug.WriteLine("RemoteGetPlayerIds failed.");
                        return;
                    }

                    if (!RemoteGetPlayer())
                    {
                        Debug.WriteLine("RemoteGetPlayer failed.");
                        return;
                    }

                    if (!RemoteGetStartingHeroId(this._playerMe._id, out this._startingHeroId))
                    {
                        Debug.WriteLine("RemoteGetStartingHeroId failed.");
                        return;
                    }

                    frmGame.SetControlPropertyThreadSafe(this, "StartGameProperty", true);
                    goto NEXT_ROUND;
                }

                // game started
                bool isGameStarted = false;
                if (!RemoteIsGameStarted(out isGameStarted))
                {
                    Debug.WriteLine("RemoteIsGameStarted failed.");
                    return;
                }

                if (isGameStarted)
                {
                    int playerId = 0;
                    if (!RemoteGetCurrentPlayerId(out playerId))
                    {
                        Debug.WriteLine("RemoteGetCurrentPlayerId failed.");
                        return;
                    }

                    if (this._playerMe._id == playerId)
                    {
                        if (!this._isDoingTurn)
                        {
                            lock (_lockMe)
                            {
                                this._isDoingTurn = true;
                            }

                            Hashtable playerKIds = null;
                            if (!RemoteGetAllPlayers(out playerKIds))
                            {
                                Debug.WriteLine("RemoteGetAllPlayers failed.");
                                return;
                            }
                            if (playerKIds == null)
                            {
                                Debug.WriteLine("playes is null.");
                                return;
                            }

                            lock (_lockMe)
                            {
                                this._playerKIds = playerKIds;
                                if (!this._playerKIds.ContainsKey(this._playerIdMe))
                                {
                                    Debug.WriteLine("Me is not found.");
                                    return;
                                }

                                this._playerMe = (Heroes.Core.Player)this._playerKIds[this._playerIdMe];
                            }

                            _frmDuel.SetPlayer(this._playerMe, this._playerKIds);

                            frmGame.SetControlPropertyThreadSafe(this, "MapReadOnlyProperty", false);
                            goto NEXT_ROUND;
                        }
                    }

                    bool _isNeedToStartBattle = false;
                    if (!RemoteIsNeedToStartBattle(this._playerIdMe, out _isNeedToStartBattle))
                    {
                        Debug.WriteLine("RemoteGetStartingBattle failed.");
                        return;
                    }

                    if (_isNeedToStartBattle)
                    {
                        if (!RemoteSetIsNeedToStartBattle(this._playerIdMe))
                        {
                            Debug.WriteLine("RemoteSetBattleStarted failed.");
                            return;
                        }

                        if (!RemoteGetBattle(out this._attackHero, out this._defendHero))
                        {
                            Debug.WriteLine("RemoteGetBattle failed.");
                            return;
                        }

                        frmGame.SetControlPropertyThreadSafe(this, "StartBattleProperty", false);
                        goto NEXT_ROUND;
                    }

                    if (this._isBattleStarted)
                    {
                        // get commands
                        Heroes.Core.Remoting.BattleCommand cmd = null;
                        do
                        {
                            // get commands from queue
                            if (!DequeueBattleCommand(this._playerIdMe, out cmd))
                            {
                                // error
                                return;
                            }
                            if (cmd == null) break;

                            // execute commands
                            frmGame.SetControlPropertyThreadSafe(this, "ExecuteBattleCommandProperty", cmd);
                        } while (cmd != null);
                    }
                }

            NEXT_ROUND:
                continue;
            }
        }
コード例 #8
0
ファイル: frmDuel.cs プロジェクト: sakseichek/homm
        private void CreatePlayer(int id)
        {
            Heroes.Core.Player player = new Heroes.Core.Player();
            player._id = id;
            player._wood = 20;
            player._mercury = 10;
            player._ore = 20;
            player._sulfur = 10;
            player._crystal = 10;
            player._gem = 10;
            player._gold = 20000;
            _players.Add(player);

            Random rnd = new Random();

            // hero
            Heroes.Core.Hero hero = (Heroes.Core.Hero)Heroes.Core.Setting._heros[id];
            hero._playerId = player._id;
            hero._player = player;
            hero._level = 1;
            hero._experience = rnd.Next(45, 99);
            hero.CalculateMaxSpellPoint();
            hero._spellPointLeft = hero._maxSpellPoint;
            hero._movementPoint = 1;
            hero._movementPointLeft = hero._movementPoint;
            player._heroes.Add(hero);

            // army
            {
                Heroes.Core.Army army = new Heroes.Core.Army();
                army.CopyFrom((Heroes.Core.Army)Heroes.Core.Setting._armies[(int)Heroes.Core.ArmyIdEnum.Pikeman]);
                army.AddAttribute(hero);
                army._heroId = hero._id;
                army._playerId = player._id;
                //army._qty = rnd.Next(20, 49);
                army._qty = rnd.Next(500, 999);
                army._slotNo = 1;
                hero._armyKSlots.Add(army._slotNo, army);

                army = new Heroes.Core.Army();
                army.CopyFrom((Heroes.Core.Army)Heroes.Core.Setting._armies[(int)Heroes.Core.ArmyIdEnum.Archer]);
                army.AddAttribute(hero);
                army._heroId = hero._id;
                army._playerId = player._id;
                //army._qty = rnd.Next(10, 19);
                army._qty = rnd.Next(500, 999);
                army._slotNo = 0;
                hero._armyKSlots.Add(army._slotNo, army);

                //army = new Heroes.Core.Army();
                //army.CopyFrom((Heroes.Core.Army)Heroes.Core.Setting._armies[(int)Heroes.Core.ArmyIdEnum.Griffin]);
                //army.AddAttribute(hero);
                //army._heroId = hero._id;
                //army._playerId = player._id;
                //army._qty = rnd.Next(10, 19);
                ////army._qty = rnd.Next(500, 999);
                //army._slotNo = 4;
                //hero._armyKSlots.Add(army._slotNo, army);

                //army = new Heroes.Core.Army();
                //army.CopyFrom((Heroes.Core.Army)Heroes.Core.Setting._armies[(int)Heroes.Core.ArmyIdEnum.Swordman]);
                //army.AddAttribute(hero);
                //army._heroId = hero._id;
                //army._playerId = player._id;
                //army._qty = rnd.Next(10, 19);
                ////army._qty = rnd.Next(500, 999);
                //army._slotNo = 5;
                //hero._armyKSlots.Add(army._slotNo, army);

                //army = new Heroes.Core.Army();
                //army.CopyFrom((Heroes.Core.Army)Heroes.Core.Setting._armies[(int)Heroes.Core.ArmyIdEnum.Cavalier]);
                //army.AddAttribute(hero);
                //army._heroId = hero._id;
                //army._playerId = player._id;
                //army._qty = rnd.Next(5, 9);
                ////army._qty = rnd.Next(500, 999);
                //army._slotNo = 2;
                //hero._armyKSlots.Add(army._slotNo, army);

                //army = new Heroes.Core.Army();
                //army.CopyFrom((Heroes.Core.Army)Heroes.Core.Setting._armies[(int)Heroes.Core.ArmyIdEnum.Monk]);
                //army.AddAttribute(hero);
                //army._heroId = hero._id;
                //army._playerId = player._id;
                //army._qty = rnd.Next(10, 19);
                ////army._qty = rnd.Next(500, 999);
                //army._slotNo = 6;
                //hero._armyKSlots.Add(army._slotNo, army);

                //army = new Heroes.Core.Army();
                //army.CopyFrom((Heroes.Core.Army)Heroes.Core.Setting._armies[(int)Heroes.Core.ArmyIdEnum.Angel]);
                //army.AddAttribute(hero);
                //army._heroId = hero._id;
                //army._playerId = player._id;
                //army._qty = rnd.Next(1, 4);
                ////army._qty = rnd.Next(500, 999);
                //army._slotNo = 3;
                //hero._armyKSlots.Add(army._slotNo, army);
            }

            // spells
            {
                Heroes.Core.Spell spell = new Heroes.Core.Spell();
                spell.CopyFrom((Heroes.Core.Spell)Heroes.Core.Setting._spells[(int)Heroes.Core.SpellIdEnum.MagicArrow]);
                spell.CalculateDamage(hero);
                hero._spells.Add(spell._id, spell);

                spell = new Heroes.Core.Spell();
                spell.CopyFrom((Heroes.Core.Spell)Heroes.Core.Setting._spells[(int)Heroes.Core.SpellIdEnum.Haste]);
                hero._spells.Add(spell._id, spell);
            }

            // castle
            {
                Heroes.Core.Town town = new Heroes.Core.Town();
                town._id = player._id;
                town._playerId = player._id;
                town._player = player;
                town._heroVisit = hero;
                player._castles.Add(town);

                // buildings
                {
                    Heroes.Core.Building building = new Heroes.Core.Building();
                    building.CopyFrom((Heroes.Core.Building)Heroes.Core.Setting._buildings[(int)Heroes.Core.BuildingIdEnum.VillageHall]);
                    town._buildingKIds.Add(building._id, building);

                    building = new Heroes.Core.Building();
                    building.CopyFrom((Heroes.Core.Building)Heroes.Core.Setting._buildings[(int)Heroes.Core.BuildingIdEnum.Tavern]);
                    town._buildingKIds.Add(building._id, building);

                    building = new Heroes.Core.Building();
                    building.CopyFrom((Heroes.Core.Building)Heroes.Core.Setting._buildings[(int)Heroes.Core.BuildingIdEnum.Fort]);
                    town._buildingKIds.Add(building._id, building);
                }
            }
        }
コード例 #9
0
ファイル: frmDuel.cs プロジェクト: sakseichek/homm
        private void cmdNextTurn_Click(object sender, EventArgs e)
        {
            // next player
            int index = _players.IndexOf(this._currentPlayer);
            index += 1;
            if (index >= this._players.Count) index = 0;
            this._currentPlayer = (Heroes.Core.Player)this._players[index];

            if (this._currentPlayer._heroes.Count > 0)
            {
                this._currentHero = (Heroes.Core.Hero)this._currentPlayer._heroes[0];

                // reset to full spell points
                this._currentHero._spellPointLeft = this._currentHero._maxSpellPoint;
            }

            _currentPlayer.AddResources();
            _currentPlayer.AddGrowth();
            _currentPlayer.ResetBuilt();
            _currentPlayer.ResetMovementPoints();
        }
コード例 #10
0
ファイル: GameSetting.cs プロジェクト: sakseichek/homm
        public static void ConvertBattleToNetwork(Heroes.Core.Player attackPlayerMap, Heroes.Core.Hero attackHeroMap, Hashtable attackArmiesMap,
            Heroes.Core.Player defendPlayerMap, Heroes.Core.Hero defendHeroMap, Heroes.Core.Town defendCastleMap, Hashtable defendArmiesMap,
            out Heroes.Core.Player attackPlayer, out Heroes.Core.Hero attackHero, out Hashtable attackArmies,
            out Heroes.Core.Player defendPlayer, out Heroes.Core.Hero defendHero, out Heroes.Core.Town defendCastle, out Hashtable defendArmies)
        {
            attackPlayer = null;
            attackHero = null;
            attackArmies = new Hashtable();
            defendPlayer = null;
            defendHero = null;
            defendCastle = null;
            defendArmies = new Hashtable();

            if (attackArmiesMap != null)
            {
                foreach (Heroes.Core.Army armyMap in attackArmiesMap.Values)
                {
                    Heroes.Core.Army army = new Heroes.Core.Army();
                    army._id = armyMap._id;
                    army._qty = armyMap._qty;
                    army._slotNo = armyMap._slotNo;
                    attackArmies.Add(army._slotNo, army);
                }
            }

            if (attackPlayerMap != null)
            {
                attackPlayer = new Heroes.Core.Player();
                attackPlayer._id = attackPlayerMap._id;
            }

            if (attackHeroMap != null)
            {
                attackHero = new Heroes.Core.Hero();
                attackHero._id = attackHeroMap._id;
                attackHero._player = attackPlayer;
                attackHero._armyKSlots = attackArmies;
            }

            if (defendArmiesMap != null)
            {
                foreach (Heroes.Core.Army armyMap in defendArmiesMap.Values)
                {
                    Heroes.Core.Army army = new Heroes.Core.Army();
                    army._id = armyMap._id;
                    army._qty = armyMap._qty;
                    army._slotNo = armyMap._slotNo;
                    defendArmies.Add(army._slotNo, army);
                }
            }

            if (defendPlayerMap != null)
            {
                defendPlayer = new Heroes.Core.Player();
                defendPlayer._id = defendPlayerMap._id;
            }

            if (defendHeroMap != null)
            {
                defendHero = new Heroes.Core.Hero();
                defendHero._id = defendHeroMap._id;
                defendHero._player = defendPlayer;
                defendHero._armyKSlots = defendArmies;
            }

            // castle
        }
コード例 #11
0
ファイル: GameSetting.cs プロジェクト: sakseichek/homm
        public static void ResetAll()
        {
            if (_frmBattle != null)
            {
                _frmBattle.Close();
                _frmBattle = null;
            }

            if (_frmMap != null)
            {
                _frmMap.Close();
                _frmMap = null;
            }

            if (_frmGame != null)
            {
                _frmGame.Close();
                _frmGame = null;
            }

            _isServer = false;
            _me = null;
            _server = null;
            _players.Clear();
            _currentPlayer = null;

            _isNeedToStartGame = false;
            _isGameStarted = false;
            _isInitialized = false;
            _isAllPlayerInitialized = false;
            _needToRunNextPlayer = false;

            _isNeedToStartBattle = false;
            _amIBattle = false;
            _isBattleStarted = false;
            _attackPlayer = null;
            _attackHero = null;
            _attackArmies = null;
            _defendPlayer = null;
            _defendHero = null;
            _defendCastle = null;
            _defendArmies = null;
            _victory = 0;
            _isBattleEnded = false;

            _attackCommands.Clear();
            _defendCommands.Clear();
        }
コード例 #12
0
ファイル: GameSetting.cs プロジェクト: sakseichek/homm
        public static void ConvertMapToNetwork(ArrayList mapPlayers, ArrayList mapMines, Heroes.Core.Map.Cell[,] mapCells,
            out ArrayList players, out Hashtable heroCells)
        {
            players = new ArrayList();
            heroCells = new Hashtable();

            // copy players and heroes
            foreach (Heroes.Core.Map.Player player in mapPlayers)
            {
                Heroes.Core.Player player2 = new Heroes.Core.Player();
                player2._id = player._id;
                player2._gold = player._gold;
                players.Add(player2);

                foreach (Heroes.Core.Map.Hero hero in player._heroes)
                {
                    Heroes.Core.Hero hero2 = new Heroes.Core.Hero();
                    hero2._id = hero._id;
                    hero2._player = player2;
                    player2._heroes.Add(hero2);

                    // cell in map
                    if (hero._cell != null)
                    {
                        GameCell cell = new GameCell(hero._cell._row, hero._cell._col);
                        heroCells.Add(hero2._id, cell);
                    }

                    foreach (Heroes.Core.Army army in hero._armyKSlots.Values)
                    {
                        Heroes.Core.Army army2 = new Heroes.Core.Army();
                        army2._id = army._id;
                        army2._slotNo = army._slotNo;
                        army2._qty = army._qty;

                        hero2._armyKSlots.Add(army2._slotNo, army2);
                    }
                }
            }

            // copy Towns
            int index = 0;
            foreach (Heroes.Core.Map.Player player in mapPlayers)
            {
                Heroes.Core.Player player2 = (Heroes.Core.Player)players[index];

                foreach (Heroes.Core.Map.Town town in player._castles)
                {
                    Heroes.Core.Town town2 = new Heroes.Core.Town();
                    town2._id = town._id;
                    town2._player = player2;
                    player2._castles.Add(town2);

                    foreach (Heroes.Core.Army army in town._armyAvKIds.Values)
                    {
                        Heroes.Core.Army army2 = new Heroes.Core.Army();
                        army2._id = army._id;
                        army2._qty = army._qty;

                        town2._armyAvKIds.Add(army2._id, army2);
                    }

                    foreach (Heroes.Core.Army army in town._armyInCastleKSlots.Values)
                    {
                        Heroes.Core.Army army2 = new Heroes.Core.Army();
                        army2._id = army._id;
                        army2._slotNo = army._slotNo;
                        army2._qty = army._qty;

                        town2._armyInCastleKSlots.Add(army2._id, army2);
                    }

                    if (town._heroVisit != null)
                    {
                        int indexPlayer = mapPlayers.IndexOf(town._heroVisit._player);
                        Heroes.Core.Map.Player playerVisit = (Heroes.Core.Map.Player)mapPlayers[indexPlayer];
                        int indexHero = playerVisit._heroes.IndexOf(town._heroVisit);

                        Heroes.Core.Player playerVisit2 = (Heroes.Core.Player)players[indexPlayer];
                        Heroes.Core.Hero heroVisit2 = (Heroes.Core.Hero)playerVisit2._heroes[indexHero];
                        town2._heroVisit = heroVisit2;
                    }
                }

                index += 1;
            }

            // copy mines
            foreach (Heroes.Core.Map.Mine mine in mapMines)
            {
                Heroes.Core.Mine mine2 = new Heroes.Core.Mine(mine._id);

                if (mine._player != null)
                {
                    // get player
                    Heroes.Core.Player player2 = GameSetting.FindPlayer(mine._player._id, players);
                    mine2._player = player2;
                    player2._mineKTypes[(int)Heroes.Core.MineTypeEnum.Gold].Add(mine2);
                }
                else
                {
                    mine2._player = null;
                }
            }
        }
コード例 #13
0
ファイル: BattleCommander.cs プロジェクト: sakseichek/homm
        public BattleCommander(Heroes.Core.Player attackPlayer, Heroes.Core.Hero attackHero, 
            Heroes.Core.Player defendPlayer, Heroes.Core.Hero defendHero, Heroes.Core.Monster monster, bool quickCombat)
        {
            _battleTerrain = new BattleTerrain();

            _attackPlayer = attackPlayer;
            _defendPlayer = defendPlayer;

            {
                _attackHeroOriginal = attackHero;

                _attackHero = new Heroes.Core.Battle.Heros.Hero();
                _attackHero.CopyFrom(attackHero);
                _attackHero._armySide = Heroes.Core.Battle.Characters.ArmySideEnum.Attacker;
                _attackHero._spells = attackHero._spells;

                foreach (Heroes.Core.Army army in attackHero._armyKSlots.Values)
                {
                    Heroes.Core.Battle.Armies.Army army2 = new Heroes.Core.Battle.Armies.Army();
                    army2.CopyFrom(army);
                    army2._armySide = Heroes.Core.Battle.Characters.ArmySideEnum.Attacker;

                    army2._qtyLeft = army2._qty;
                    army2._healthRemain = army2._health;
                    army2._shotRemain = army2._noOfShot;
                    army2._retaliateRemain = army2._noOfRetaliate;

                    army2._cell = GetCell(army2._armySide, army2._slotNo, army2._isBig);
                    army2._cell._character = army2;

                    _attackHero._armyKSlots.Add(army2._slotNo, army2);
                }

                _attackArmies = _attackHero._armyKSlots;
            }

            _defendHeroOriginal = null;
            _defendHero = null;
            if (defendHero != null)
            {
                _defendHeroOriginal = defendHero;

                _defendHero = new Heroes.Core.Battle.Heros.Hero();
                _defendHero.CopyFrom(defendHero);
                _defendHero._armySide = Heroes.Core.Battle.Characters.ArmySideEnum.Defender;
                _defendHero._spells = attackHero._spells;

                foreach (Heroes.Core.Army army in defendHero._armyKSlots.Values)
                {
                    Heroes.Core.Battle.Armies.Army army2 = new Heroes.Core.Battle.Armies.Army();
                    army2.CopyFrom(army);
                    army2._armySide = Heroes.Core.Battle.Characters.ArmySideEnum.Defender;

                    army2._qtyLeft = army2._qty;
                    army2._healthRemain = army2._health;
                    army2._shotRemain = army2._noOfShot;
                    army2._retaliateRemain = army2._noOfRetaliate;

                    army2._cell = GetCell(army2._armySide, army2._slotNo, army2._isBig);
                    army2._cell._character = army2;

                    _defendHero._armyKSlots.Add(army2._slotNo, army2);
                }

                _defendArmies = _defendHero._armyKSlots;
            }

            _monsterOriginal = null;
            _monster = null;
            if (monster != null)
            {
                _monsterOriginal = monster;

                _monster = new Heroes.Core.Battle.Quick.Monster();
                _monster.CopyFrom(monster);
                _monster._armySide = Heroes.Core.Battle.Characters.ArmySideEnum.Defender;

                foreach (Heroes.Core.Army army in monster._armyKSlots.Values)
                {
                    Heroes.Core.Battle.Armies.Army army2 = new Heroes.Core.Battle.Armies.Army();
                    army2.CopyFrom(army);
                    army2._armySide = Heroes.Core.Battle.Characters.ArmySideEnum.Defender;

                    army2._qtyLeft = army2._qty;
                    army2._healthRemain = army2._health;
                    army2._shotRemain = army2._noOfShot;
                    army2._retaliateRemain = army2._noOfRetaliate;

                    army2._cell = GetCell(army2._armySide, army2._slotNo, army2._isBig);
                    army2._cell._character = army2;

                    _monster._armyKSlots.Add(army2._slotNo, army2);
                }

                _defendArmies = _monster._armyKSlots;
            }

            _heroes = new Hashtable();
            _heroes.Add(_attackHero._id, _attackHero);
            if (_defendHero != null) _heroes.Add(_defendHero._id, _defendHero);

            _armies = new ArrayList();
            foreach (Heroes.Core.Army army in _attackArmies.Values)
            {
                _armies.Add(army);
            }
            foreach (Heroes.Core.Army army in _defendArmies.Values)
            {
                _armies.Add(army);
            }

            BattleEngine.SortBySpeed(_armies);

            _quickCombat = quickCombat;

            _turn = new Turn(_armies, _attackHero, _attackArmies, _defendHero, _monster, _defendArmies);
        }
コード例 #14
0
ファイル: frmDuelNetwork.cs プロジェクト: sakseichek/homm
        public DialogResult ShowDialog(Heroes.Core.Player player, int startingHeroId, ArrayList playerIds)
        {
            _currentPlayer = player;
            InitPlayer(_currentPlayer, startingHeroId);
            SetCurrentHero();

            this.lblPlayerId.Text = _currentPlayer._id.ToString();

            cboOtherPlayerId.Items.Clear();
            foreach (int playerId in playerIds)
            {
                if (playerId == _currentPlayer._id) continue;

                cboOtherPlayerId.Items.Add(playerId);
            }
            if (cboOtherPlayerId.Items.Count > 0) cboOtherPlayerId.SelectedIndex = 0;

            // raise event
            OnGameStarted();

            return this.ShowDialog();
        }
コード例 #15
0
ファイル: frmDuelNetwork.cs プロジェクト: sakseichek/homm
        public void SetPlayer(Heroes.Core.Player player, Hashtable playerKIds)
        {
            lock (frmGame2._lockMe)
            {
                this._currentPlayer = player;
                this._playerKIds = playerKIds;

                SetCurrentHero();

                this._currentPlayer.ResetBuilt();
                this._currentPlayer.ResetMovementPoints();

                if (!_isFirstRun)
                {
                    this._currentPlayer.AddResources();
                }

                this._currentHero._spellPointLeft = this._currentHero._maxSpellPoint;

                // calculate days
                if (!_isFirstRun)
                {
                    _day += 1;
                    while (_day > 7)
                    {
                        _week += 1;
                        _day -= 7;

                        this._currentPlayer.AddGrowth();

                        while (_week > 4)
                        {
                            _month += 1;
                            _week -= 4;
                        }
                    }
                }

                this.tsslblStatus.Text = string.Format("Month {0}, Week {1}, Day {2}", _month, _week, _day);
            }
        }