Пример #1
0
        /// <summary>
        /// 计算与怪物战斗的伤害
        /// </summary>
        /// <param name="monster"></param>
        /// <returns></returns>
        public static int CalculateDamage(MonsterImage monster)
        {
            if (hero.properties.atk <= monster.Def)
            {
                return(-1);
            }
            int damage    = 0;
            int monsterHp = monster.Hp;

            switch (monster.Ability)
            {
            case SpecialAbility.普通:
                monsterHp = monsterHp - (hero.properties.atk - monster.Def);
                while (monsterHp > 0)
                {
                    damage   += (monster.Atk - hero.properties.def);
                    monsterHp = monsterHp - (hero.properties.atk - monster.Def);
                }
                break;

            case SpecialAbility.魔攻:
                monsterHp = monsterHp - (hero.properties.atk - monster.Def);
                while (monsterHp > 0)
                {
                    damage   += monster.Atk;
                    monsterHp = monsterHp - (hero.properties.atk - monster.Def);
                }
                break;

            case SpecialAbility.坚固:
                monsterHp = monsterHp - 1;
                while (monsterHp > 0)
                {
                    damage   += (monster.Atk - hero.properties.def);
                    monsterHp = monsterHp - 1;
                }
                break;

            case SpecialAbility.先攻:
                while (monsterHp > 0)
                {
                    damage   += (monster.Atk - hero.properties.def);
                    monsterHp = monsterHp - (hero.properties.atk - monster.Def);
                }
                break;
            }
            damage = damage - hero.properties.res;
            if (damage < 0)
            {
                return(0);
            }
            return(damage);
        }
Пример #2
0
        /// <summary>
        /// 战斗扣除血量,加经验,金币
        /// </summary>
        /// <param name="monster"></param>
        public static bool Battle(MonsterImage monster)
        {
            int damage = CalculateDamage(monster);

            if (damage >= hero.properties.hp || damage == -1)
            {
                return(false);
            }
            hero.properties.hp   -= damage;
            hero.properties.exp  += monster.Exp;
            hero.properties.gold += monster.Gold;
            RefreshStatus();
            return(true);
        }
Пример #3
0
        /// <summary>
        /// 根据参数重新初始化地图
        /// </summary>
        /// <param name="map"></param>
        /// public enum Atype { 宝石, 钥匙, 怪物, 特殊物品, 地板, 英雄, 门, NPC };
        public static void UpdateFloor(List <List <KeyValuePair <int, int> > > map)
        {
            int k = 0;

            foreach (var list in map)
            {
                for (int i = 0; i < 11; i++)
                {
                    for (int j = 0; j < 11; j++)
                    {
                        var kv = list[i * 11 + j];
                        switch (kv.Key)
                        {
                        case 0:
                            floor_list[k][i, j] = new GemstoneImage((GemstoneType)kv.Value);
                            break;

                        case 1:
                            floor_list[k][i, j] = new KeyImage((KeyType)kv.Value);
                            break;

                        case 2:
                            floor_list[k][i, j] = new MonsterImage((MonsterType)kv.Value);
                            break;

                        case 3:
                            floor_list[k][i, j] = new SpecialItemImage((SpecialItemType)kv.Value);
                            break;

                        case 4:
                            floor_list[k][i, j] = new FloorImage((FloorType)kv.Value);
                            break;

                        case 6:
                            floor_list[k][i, j] = new DoorImage((DoorType)kv.Value);
                            break;
                        }
                    }
                }
                k++;
            }
            CalculationUtility.RefreshStatus();
        }
Пример #4
0
        /// <summary>
        /// 向Panel添加显示怪物资料的Canvas
        /// </summary>
        private void AddChildCanvas(MonsterImage monster)
        {
            Canvas parennt = new Canvas();

            #region 添加怪物图片
            Image image = new Image
            {
                Source = new BitmapImage(new Uri(MonsterImage.GetImagePaths((MonsterType)monster.GetFineType())[0], UriKind.Relative)),
                Height = 50,
                Width  = 50,
                Margin = new Thickness(10)
            };
            parennt.Children.Add(image);
            #endregion

            #region 添加怪物名称
            TextBox name = CreateTextBox(monster.GetFineType().ToString(), new SolidColorBrush(Color.FromRgb(255, 255, 255)), 80, 10);
            parennt.Children.Add(name);
            #endregion

            #region 添加怪物特殊能力
            TextBox ability = CreateTextBox(monster.Ability.ToString(), new SolidColorBrush(Color.FromRgb(255, 255, 255)), 80, 35);
            parennt.Children.Add(ability);
            #endregion

            #region 添加怪物血量
            TextBox hp = CreateTextBox("血量:" + monster.Hp, new SolidColorBrush(Color.FromRgb(209, 133, 42)), 200, 10);
            parennt.Children.Add(hp);
            #endregion

            #region 添加怪物攻击
            TextBox atk = CreateTextBox("攻击:" + monster.Atk, new SolidColorBrush(Color.FromRgb(209, 133, 42)), 310, 10);
            parennt.Children.Add(atk);
            #endregion

            #region 添加怪物防御
            TextBox def = CreateTextBox("防御:" + monster.Def, new SolidColorBrush(Color.FromRgb(209, 133, 42)), 420, 10);
            parennt.Children.Add(def);
            #endregion

            #region 添加获得的金币
            TextBox gold = CreateTextBox("金币:" + monster.Gold, new SolidColorBrush(Color.FromRgb(185, 185, 40)), 200, 35);
            parennt.Children.Add(gold);
            #endregion

            #region 添加获得的经验
            TextBox exp = CreateTextBox("经验:" + monster.Exp, new SolidColorBrush(Color.FromRgb(185, 185, 40)), 310, 35);
            parennt.Children.Add(exp);
            #endregion

            #region 添加打怪的损失
            string damage = CalculationUtility.CalculateDamage(monster) + "";
            if ("-1".Equals(damage))
            {
                damage = "???";
            }
            TextBox damageText = CreateTextBox("伤害:" + damage, new SolidColorBrush(Color.FromRgb(180, 45, 45)), 420, 35);
            parennt.Children.Add(damageText);
            #endregion

            #region 添加分割线
            Canvas canvas = new Canvas
            {
                Height     = 3,
                Width      = 550,
                Background = new SolidColorBrush(Color.FromRgb(200, 200, 200))
            };
            parennt.Children.Add(canvas);
            #endregion
            ContentItem.Children.Add(parennt);
        }
Пример #5
0
        /// <summary>
        /// 初始化所有楼层地图内容
        /// </summary>5p
        private static void InitializeFloor()
        {
            #region 第0层地图

            floor_list[0][0, 0]  = new SpecialItemImage(SpecialItemType.怪物手册);
            floor_list[0][0, 3]  = new FloorImage(FloorType.白墙);
            floor_list[0][0, 5]  = new FloorImage(FloorType.楼梯上);
            floor_list[0][0, 7]  = new FloorImage(FloorType.白墙);
            floor_list[0][0, 10] = new SpecialItemImage(SpecialItemType.楼层飞跃器);

            floor_list[0][1, 3] = new FloorImage(FloorType.白墙);
            floor_list[0][1, 7] = new FloorImage(FloorType.白墙);

            floor_list[0][2, 3] = new FloorImage(FloorType.白墙);
            floor_list[0][2, 7] = new FloorImage(FloorType.白墙);

            floor_list[0][3, 0]  = new FloorImage(FloorType.白墙);
            floor_list[0][3, 1]  = new FloorImage(FloorType.白墙);
            floor_list[0][3, 2]  = new DoorImage(DoorType.黄门);
            floor_list[0][3, 3]  = new FloorImage(FloorType.白墙);
            floor_list[0][3, 7]  = new FloorImage(FloorType.白墙);
            floor_list[0][3, 8]  = new FloorImage(FloorType.白墙);
            floor_list[0][3, 9]  = new DoorImage(DoorType.铁门);
            floor_list[0][3, 10] = new FloorImage(FloorType.白墙);

            for (int i = 0; i < 11; i++)
            {
                if (i != 5)
                {
                    floor_list[0][5, i] = new FloorImage(FloorType.熔浆);
                }
            }
            floor_list[0][5, 5]  = new KeyImage(KeyType.黄钥匙);
            floor_list[0][10, 3] = new FloorImage(FloorType.白墙);

            floor_list[0][9, 3] = new FloorImage(FloorType.白墙);
            floor_list[0][9, 7] = new FloorImage(FloorType.白墙);

            floor_list[0][8, 3] = new FloorImage(FloorType.白墙);
            floor_list[0][8, 7] = new FloorImage(FloorType.白墙);

            floor_list[0][7, 0]  = new FloorImage(FloorType.白墙);
            floor_list[0][7, 1]  = new FloorImage(FloorType.白墙);
            floor_list[0][7, 2]  = new FloorImage(FloorType.白墙);
            floor_list[0][7, 3]  = new FloorImage(FloorType.白墙);
            floor_list[0][7, 7]  = new FloorImage(FloorType.白墙);
            floor_list[0][7, 8]  = new FloorImage(FloorType.白墙);
            floor_list[0][7, 9]  = new FloorImage(FloorType.白墙);
            floor_list[0][7, 10] = new FloorImage(FloorType.白墙);

            #endregion

            #region 第1层地图

            floor_list[1][0, 0] = new NPCImage(NPCType.老人, DialogUtility.dialog_1_0_0);
            floor_list[1][0, 3] = new MonsterImage(MonsterType.绿史莱姆);
            floor_list[1][0, 5] = new FloorImage(FloorType.楼梯下);
            floor_list[1][0, 6] = new FloorImage(FloorType.白墙);
            floor_list[1][0, 8] = new DoorImage(DoorType.黄门);
            floor_list[1][0, 9] = new MonsterImage(MonsterType.绿史莱姆);

            floor_list[1][1, 0]  = new FloorImage(FloorType.白墙);
            floor_list[1][1, 1]  = new FloorImage(FloorType.白墙);
            floor_list[1][1, 3]  = new FloorImage(FloorType.白墙);
            floor_list[1][1, 4]  = new FloorImage(FloorType.白墙);
            floor_list[1][1, 5]  = new FloorImage(FloorType.白墙);
            floor_list[1][1, 6]  = new FloorImage(FloorType.白墙);
            floor_list[1][1, 8]  = new FloorImage(FloorType.白墙);
            floor_list[1][1, 10] = new GemstoneImage(GemstoneType.红宝石);

            floor_list[1][2, 1]  = new FloorImage(FloorType.白墙);
            floor_list[1][2, 3]  = new MonsterImage(MonsterType.小蝙蝠);
            floor_list[1][2, 4]  = new MonsterImage(MonsterType.红史莱姆);
            floor_list[1][2, 8]  = new FloorImage(FloorType.白墙);
            floor_list[1][2, 9]  = new FloorImage(FloorType.白墙);
            floor_list[1][2, 10] = new FloorImage(FloorType.白墙);

            floor_list[1][3, 1] = new FloorImage(FloorType.白墙);
            floor_list[1][3, 3] = new FloorImage(FloorType.白墙);
            floor_list[1][3, 4] = new FloorImage(FloorType.白墙);
            floor_list[1][3, 5] = new FloorImage(FloorType.白墙);
            floor_list[1][3, 6] = new FloorImage(FloorType.白墙);
            floor_list[1][3, 8] = new FloorImage(FloorType.白墙);

            floor_list[1][4, 0]  = new MonsterImage(MonsterType.绿史莱姆);
            floor_list[1][4, 1]  = new DoorImage(DoorType.黄门);
            floor_list[1][4, 3]  = new FloorImage(FloorType.白墙);
            floor_list[1][4, 4]  = new FloorImage(FloorType.白墙);
            floor_list[1][4, 5]  = new FloorImage(FloorType.白墙);
            floor_list[1][4, 6]  = new FloorImage(FloorType.白墙);
            floor_list[1][4, 8]  = new FloorImage(FloorType.白墙);
            floor_list[1][4, 10] = new FloorImage(FloorType.楼梯上);

            floor_list[1][5, 0] = new MonsterImage(MonsterType.红史莱姆);
            floor_list[1][5, 1] = new FloorImage(FloorType.白墙);
            floor_list[1][5, 3] = new MonsterImage(MonsterType.红史莱姆);
            floor_list[1][5, 5] = new KeyImage(KeyType.黄钥匙);
            floor_list[1][5, 6] = new FloorImage(FloorType.白墙);
            floor_list[1][5, 8] = new DoorImage(DoorType.黄门);

            floor_list[1][6, 0] = new MonsterImage(MonsterType.绿史莱姆);
            floor_list[1][6, 1] = new FloorImage(FloorType.白墙);
            floor_list[1][6, 3] = new FloorImage(FloorType.白墙);
            floor_list[1][6, 5] = new MonsterImage(MonsterType.绿史莱姆);
            floor_list[1][6, 6] = new DoorImage(DoorType.黄门);
            floor_list[1][6, 8] = new FloorImage(FloorType.白墙);

            floor_list[1][7, 0] = new GemstoneImage(GemstoneType.蓝宝石);
            floor_list[1][7, 1] = new FloorImage(FloorType.白墙);
            floor_list[1][7, 2] = new FloorImage(FloorType.白墙);
            floor_list[1][7, 3] = new FloorImage(FloorType.白墙);
            floor_list[1][7, 4] = new FloorImage(FloorType.白墙);
            floor_list[1][7, 5] = new FloorImage(FloorType.白墙);
            floor_list[1][7, 6] = new FloorImage(FloorType.白墙);
            floor_list[1][7, 8] = new FloorImage(FloorType.白墙);

            floor_list[1][8, 2] = new FloorImage(FloorType.白墙);
            floor_list[1][8, 3] = new MonsterImage(MonsterType.绿史莱姆);
            floor_list[1][8, 4] = new MonsterImage(MonsterType.红史莱姆);
            floor_list[1][8, 5] = new GemstoneImage(GemstoneType.红宝石);
            floor_list[1][8, 6] = new FloorImage(FloorType.白墙);
            floor_list[1][8, 8] = new FloorImage(FloorType.白墙);

            floor_list[1][9, 2]  = new DoorImage(DoorType.蓝门);
            floor_list[1][9, 3]  = new MonsterImage(MonsterType.小蝙蝠);
            floor_list[1][9, 4]  = new MonsterImage(MonsterType.兽人);
            floor_list[1][9, 5]  = new GemstoneImage(GemstoneType.红血瓶);
            floor_list[1][9, 6]  = new FloorImage(FloorType.白墙);
            floor_list[1][9, 8]  = new FloorImage(FloorType.白墙);
            floor_list[1][9, 9]  = new MonsterImage(MonsterType.红史莱姆);
            floor_list[1][9, 10] = new MonsterImage(MonsterType.红史莱姆);

            floor_list[1][10, 1]  = new KeyImage(KeyType.黄钥匙);
            floor_list[1][10, 2]  = new FloorImage(FloorType.白墙);
            floor_list[1][10, 3]  = new MonsterImage(MonsterType.绿史莱姆);
            floor_list[1][10, 4]  = new MonsterImage(MonsterType.红史莱姆);
            floor_list[1][10, 5]  = new GemstoneImage(GemstoneType.蓝宝石);
            floor_list[1][10, 6]  = new FloorImage(FloorType.白墙);
            floor_list[1][10, 8]  = new FloorImage(FloorType.白墙);
            floor_list[1][10, 9]  = new GemstoneImage(GemstoneType.蓝血瓶);
            floor_list[1][10, 10] = new NPCImage(NPCType.老人, DialogUtility.dialog_1_10_10);
            #endregion

            //默认添加地板
            foreach (IBaseImage[,] image in floor_list)
            {
                for (int i = 0; i < 11; i++)
                {
                    for (int j = 0; j < 11; j++)
                    {
                        if (image[i, j] == null)
                        {
                            image[i, j] = new FloorImage(FloorType.地板);
                        }
                    }
                }
            }
        }
Пример #6
0
        /// <summary>
        /// 判别碰到的类型
        /// </summary>
        /// <param name="a"></param>
        /// <param name="e"></param>
        /// <returns></returns>
        private bool IsTouch(IBaseImage image)
        {
            // 细分类
            Enum e = image.GetFineType();

            switch (image.GetCoarseType())
            {
            case Atype.地板:
                switch (e)
                {
                case FloorType.地板:
                    image.PlayMusic(image.GetPlayer(), "../../res/se/走路.MP3");
                    return(true);

                case FloorType.楼梯上:
                    image.PlayMusic(image.GetPlayer(), "../../res/se/上下楼.MP3");
                    current_floor = floorFactory.CoreMap(floorFactory.GetFloorNum() + 1);
                    return(true);

                case FloorType.楼梯下:
                    image.PlayMusic(image.GetPlayer(), "../../res/se/上下楼.MP3");
                    current_floor = floorFactory.CoreMap(floorFactory.GetFloorNum() - 1);
                    return(true);
                }
                return(false);

            case Atype.门:
                if (image.isImageExist())
                {
                    switch (e)
                    {
                    case DoorType.黄门:
                        if (properties.yellowKey > 0)
                        {
                            MapUtility.ChangeToImage(floorFactory.GetFloorNum(), properties.x, properties.y, new FloorImage(FloorType.地板));
                            image.HideImage();
                            properties.yellowKey--;
                        }
                        else
                        {
                            image.PlayMusic(image.GetPlayer(), "../../res/se/开门失败.MP3");
                        }
                        break;

                    case DoorType.蓝门:
                        if (properties.blueKey > 0)
                        {
                            MapUtility.ChangeToImage(floorFactory.GetFloorNum(), properties.x, properties.y, new FloorImage(FloorType.地板));
                            image.HideImage();
                            properties.blueKey--;
                        }
                        else
                        {
                            image.PlayMusic(image.GetPlayer(), "../../res/se/开门失败.MP3");
                        }
                        break;

                    case DoorType.红门:
                        if (properties.redKey > 0)
                        {
                            MapUtility.ChangeToImage(floorFactory.GetFloorNum(), properties.x, properties.y, new FloorImage(FloorType.地板));
                            image.HideImage();
                            properties.redKey--;
                        }
                        else
                        {
                            image.PlayMusic(image.GetPlayer(), "../../res/se/开门失败.MP3");
                        }
                        break;

                    case DoorType.铁门:
                        MapUtility.ChangeToImage(floorFactory.GetFloorNum(), properties.x, properties.y, new FloorImage(FloorType.地板));
                        image.HideImage();
                        break;
                    }
                }
                return(false);

            case Atype.宝石:
                switch (e)
                {
                case GemstoneType.红宝石:
                    properties.atk += 3;
                    break;

                case GemstoneType.蓝宝石:
                    properties.def += 3;
                    break;

                case GemstoneType.绿宝石:
                    properties.res += 3;
                    break;

                case GemstoneType.红血瓶:
                    properties.hp += 100;
                    break;

                case GemstoneType.蓝血瓶:
                    properties.hp += 300;
                    break;

                case GemstoneType.黄血瓶:
                    properties.hp += 500;
                    break;

                case GemstoneType.绿血瓶:
                    properties.hp += 1000;
                    break;

                case GemstoneType.铁剑:
                    properties.atk += 10;
                    weapon          = CommonString.WEAPON_SWORD;
                    break;

                case GemstoneType.铁盾:
                    properties.def += 10;
                    break;

                case GemstoneType.银剑:
                    properties.atk += 30;
                    break;

                case GemstoneType.银盾:
                    properties.def += 30;
                    break;

                case GemstoneType.骑士剑:
                    properties.atk += 70;
                    break;

                case GemstoneType.骑士盾:
                    properties.def += 70;
                    break;

                case GemstoneType.圣剑:
                    properties.atk += 100;
                    break;

                case GemstoneType.圣盾:
                    properties.def += 100;
                    break;
                }
                image.PlayMusic(image.GetPlayer(), "../../res/se/吃物品.MP3");
                MapUtility.ChangeToImage(floorFactory.GetFloorNum(), properties.x, properties.y, new FloorImage(FloorType.地板));
                image.HideImage();
                //更新显伤脚本
                MapUtility.UpdateDamage();
                return(true);

            case Atype.特殊物品:
                MapUtility.ChangeToImage(floorFactory.GetFloorNum(), properties.x, properties.y, new FloorImage(FloorType.地板));
                image.PlayMusic(image.GetPlayer(), "../../res/se/吃物品.MP3");
                return(true);

            case Atype.钥匙:
                switch ((KeyType)e)
                {
                case KeyType.黄钥匙:
                    properties.yellowKey++;
                    image.HideImage();
                    break;

                case KeyType.蓝钥匙:
                    properties.blueKey++;
                    image.HideImage();
                    break;

                case KeyType.红钥匙:
                    properties.redKey++;
                    image.HideImage();
                    break;
                }
                MapUtility.ChangeToImage(floorFactory.GetFloorNum(), properties.x, properties.y, new FloorImage(FloorType.地板));
                image.PlayMusic(image.GetPlayer(), "../../res/se/吃物品.MP3");
                return(true);

            case Atype.怪物:
                MonsterImage monster = new MonsterImage((MonsterType)e);
                if (CalculationUtility.Battle(monster))
                {
                    image.PlayMusic(image.GetPlayer(), "../../res/se/" + weapon + ".MP3");

                    //删除怪物图片和显伤脚本
                    image.HideImage();
                    ((MonsterImage)image).HideDamage();

                    //删除怪物,更改为地板
                    MapUtility.ChangeToImage(floorFactory.GetFloorNum(), properties.x, properties.y, new FloorImage(FloorType.地板));

                    //从怪物列表中删除怪物和位置
                    MapUtility.MonsterList.Remove(image);
                    foreach (KeyValuePair <int, int> pair in MapUtility.MonsterPosition)
                    {
                        if (pair.Key == properties.x && pair.Value == properties.y)
                        {
                            MapUtility.MonsterPosition.Remove(pair);
                            break;
                        }
                    }
                }
                return(false);

            case Atype.NPC:
                IsTalking = true;
                NPC       = (NPCImage)image;
                NPC.ShowDialog();
                break;
            }
            return(false);
        }