Example #1
0
        // 返回值: 是否需要刷新
        static bool MovePlayer()
        {
            ConsoleKeyInfo key = Console.ReadKey();

            int next_x = player.x;
            int next_y = player.y;

            if (key.Key == ConsoleKey.UpArrow)
            {
                next_y -= 1;
            }
            else if (key.Key == ConsoleKey.DownArrow)
            {
                next_y += 1;
            }
            else if (key.Key == ConsoleKey.LeftArrow)
            {
                next_x -= 1;
            }
            else if (key.Key == ConsoleKey.RightArrow)
            {
                next_x += 1;
            }
            else
            {
                return(true);
            }

            if (next_x < 0 || next_x >= map_width || next_y < 0 || next_y >= map_height)
            {
                return(true);
            }
            int next_pos = MapPos(next_x, next_y);

            if (moneys.ContainsKey(next_pos))
            {
                Money money = moneys[next_pos];
                below_text    = "捡到 " + money.money + " 颗金币。";
                player.money += money.money;
                moneys.Remove(next_pos);
            }
            else if (equipments.ContainsKey(next_pos))
            {
                Equipment equipment = equipments[next_pos];
                below_text     = "捡到" + equipment.name + "  攻击力增加" + equipment.atk;
                player.attack += equipment.atk;
                equipments.Remove(next_pos);
            }
            else if (props.ContainsKey(next_pos))
            {
                Prop prop = props[next_pos];
                below_text = "捡到" + prop.name + "  血量增加" + prop.hp;
                player.hp += prop.hp;
                props.Remove(next_pos);
            }
            else if (monsters.ContainsKey(next_pos))
            {
                Monster monster = monsters[next_pos];
                string  info;
                int     result = player.Attack(monster, out info);
                below_text = info;
                if (result == -1)
                {
                    GameOver();
                    return(true);
                }
                else if (result == 1)
                {
                    bool ret = onMonsterDead(monster);
                    if (ret)
                    {
                        below_text += "怪物死亡。";
                        player.AddExp(monster.level);
                        monsters.Remove(next_pos);
                    }
                }
            }
            else if (npcs.ContainsKey(next_pos))
            {
                NPC    npc = npcs[next_pos];
                string s;
                if (npc.OnTalk(player, out s))
                {
                    npcs.Remove(next_pos);
                    object o = npc.AfterDisappear();
                    if (o is Monster)
                    {
                        Monster m = o as Monster;
                        monsters[MapPos(m.x, m.y)] = m;
                    }
                }
                below_text = s;
                if (next_pos == 213)
                {
                    walls.Clear();
                    int j = 1;
                    ReadMap("../../map12.txt");
                    AddBlock(9, 7);
                    for (int i = 3; i < 13; i++)
                    {
                        AddMonster(14, i, j);
                        j++;
                    }
                    for (int i = 1; i < 14; i++)
                    {
                        AddWall(10, i);
                    }
                    for (int i = 1; i < 14; i++)
                    {
                        AddWall(18, i);
                    }
                    for (int i = 11; i < 18; i++)
                    {
                        AddWall(i, 13);
                    }
                    for (int i = 11; i < 18; i++)
                    {
                        AddWall(i, 1);
                    }
                }
            }
            else if (walls.ContainsKey(next_pos))
            {
                Wall wall = walls[next_pos];
                if (next_pos == 178)
                {
                    walls.Remove(next_pos);
                }
            }
            else if (gears.ContainsKey(next_pos))
            {
                if (next_pos == 212)
                {
                    gears.Remove(next_pos);
                    ReadMap("../../map2.txt");
                }
                else if (next_pos == 185)
                {
                    gears.Remove(next_pos);
                    ReadMap("../../map3.txt");
                }
                else if (next_pos == 96)
                {
                    gears.Remove(next_pos);
                    walls.Remove(157);
                    ReadMap("../../map4.txt");
                }
                else if (next_pos == 157)
                {
                    gears.Remove(next_pos);
                    ReadMap("../../map5.txt");
                }
                else if (next_pos == 164)
                {
                    gears.Remove(next_pos);
                    ReadMap("../../map6.txt");
                }
                else if (next_pos == 245)
                {
                    gears.Remove(next_pos);
                    ReadMap("../../map7.txt");
                }
                else if (next_pos == 427)
                {
                    gears.Remove(next_pos);
                    ReadMap("../../map8.txt");
                }
                else if (next_pos == 342)
                {
                    gears.Remove(next_pos);
                    ReadMap("../../map9.txt");
                }
                else if (next_pos == 350)
                {
                    gears.Remove(next_pos);
                    ReadMap("../../map10.txt");
                }
                else if (next_pos == 381)
                {
                    gears.Remove(next_pos);
                    ReadMap("../../map11.txt");
                }
                else if (next_pos == 299)
                {
                    gears.Remove(next_pos);
                    AddGear(29, 0);
                }
                else if (next_pos == 29)
                {
                    OnStageClear();
                }


                else if (next_pos == 182)
                {
                    if (!monsters.ContainsKey(104) && !monsters.ContainsKey(254) && !monsters.ContainsKey(314) &&
                        monsters.ContainsKey(134) &&
                        monsters.ContainsKey(164) &&
                        monsters.ContainsKey(194) &&
                        monsters.ContainsKey(224) &&
                        monsters.ContainsKey(284) &&
                        monsters.ContainsKey(344))
                    {
                        OnStageClear();
                    }
                    Dictionary <int, Block> temp = new Dictionary <int, Block>(blocks);
                    foreach (var bs in temp)
                    {
                        int   new_pos = MapPos(bs.Value.x, bs.Value.y - 1);
                        Block b       = new Block();
                        b.x = bs.Value.x;
                        b.y = bs.Value.y - 1;
                        if (b.x >= 0 && b.x <= 29 && b.y >= 0 && b.y <= 14)
                        {
                            blocks.Remove(bs.Key);
                            blocks[new_pos] = b;
                        }
                        if (b.x == 14 && b.y == 3)
                        {
                            monsters.Remove(104);
                        }
                        if (b.x == 14 && b.y == 4)
                        {
                            monsters.Remove(134);
                        }
                        if (b.x == 14 && b.y == 5)
                        {
                            monsters.Remove(164);
                        }
                        if (b.x == 14 && b.y == 6)
                        {
                            monsters.Remove(194);
                        }
                        if (b.x == 14 && b.y == 7)
                        {
                            monsters.Remove(224);
                        }
                        if (b.x == 14 && b.y == 8)
                        {
                            monsters.Remove(254);
                        }
                        if (b.x == 14 && b.y == 9)
                        {
                            monsters.Remove(284);
                        }
                        if (b.x == 14 && b.y == 10)
                        {
                            monsters.Remove(314);
                        }
                        if (b.x == 14 && b.y == 11)
                        {
                            monsters.Remove(344);
                        }
                    }
                }
                else if (next_pos == 242)
                {
                    if (!monsters.ContainsKey(104) && !monsters.ContainsKey(254) && !monsters.ContainsKey(314) &&
                        monsters.ContainsKey(134) &&
                        monsters.ContainsKey(164) &&
                        monsters.ContainsKey(194) &&
                        monsters.ContainsKey(224) &&
                        monsters.ContainsKey(284) &&
                        monsters.ContainsKey(344))
                    {
                        OnStageClear();
                    }
                    Dictionary <int, Block> temp = new Dictionary <int, Block>(blocks);
                    foreach (var bs in temp)
                    {
                        int   new_pos = MapPos(bs.Value.x, bs.Value.y + 1);
                        Block b       = new Block();
                        b.x = bs.Value.x;
                        b.y = bs.Value.y + 1;
                        if (b.x >= 0 && b.x <= 29 && b.y >= 0 && b.y <= 14)
                        {
                            blocks.Remove(bs.Key);
                            blocks[new_pos] = b;
                        }
                        if (b.x == 14 && b.y == 3)
                        {
                            monsters.Remove(104);
                        }
                        if (b.x == 14 && b.y == 4)
                        {
                            monsters.Remove(134);
                        }
                        if (b.x == 14 && b.y == 5)
                        {
                            monsters.Remove(164);
                        }
                        if (b.x == 14 && b.y == 6)
                        {
                            monsters.Remove(194);
                        }
                        if (b.x == 14 && b.y == 7)
                        {
                            monsters.Remove(224);
                        }
                        if (b.x == 14 && b.y == 8)
                        {
                            monsters.Remove(254);
                        }
                        if (b.x == 14 && b.y == 9)
                        {
                            monsters.Remove(284);
                        }
                        if (b.x == 14 && b.y == 10)
                        {
                            monsters.Remove(314);
                        }
                        if (b.x == 14 && b.y == 11)
                        {
                            monsters.Remove(344);
                        }
                    }
                }
                else if (next_pos == 211)
                {
                    if (!monsters.ContainsKey(104) && !monsters.ContainsKey(254) && !monsters.ContainsKey(314) &&
                        monsters.ContainsKey(134) &&
                        monsters.ContainsKey(164) &&
                        monsters.ContainsKey(194) &&
                        monsters.ContainsKey(224) &&
                        monsters.ContainsKey(284) &&
                        monsters.ContainsKey(344))
                    {
                        OnStageClear();
                    }
                    Dictionary <int, Block> temp = new Dictionary <int, Block>(blocks);
                    foreach (var bs in temp)
                    {
                        int   new_pos = MapPos(bs.Value.x - 1, bs.Value.y);
                        Block b       = new Block();
                        b.x = bs.Value.x - 1;
                        b.y = bs.Value.y;
                        if (b.x >= 0 && b.x <= 29 && b.y >= 0 && b.y <= 14)
                        {
                            blocks.Remove(bs.Key);
                            blocks[new_pos] = b;
                        }
                        if (b.x == 14 && b.y == 3)
                        {
                            monsters.Remove(104);
                        }
                        if (b.x == 14 && b.y == 4)
                        {
                            monsters.Remove(134);
                        }
                        if (b.x == 14 && b.y == 5)
                        {
                            monsters.Remove(164);
                        }
                        if (b.x == 14 && b.y == 6)
                        {
                            monsters.Remove(194);
                        }
                        if (b.x == 14 && b.y == 7)
                        {
                            monsters.Remove(224);
                        }
                        if (b.x == 14 && b.y == 8)
                        {
                            monsters.Remove(254);
                        }
                        if (b.x == 14 && b.y == 9)
                        {
                            monsters.Remove(284);
                        }
                        if (b.x == 14 && b.y == 10)
                        {
                            monsters.Remove(314);
                        }
                        if (b.x == 14 && b.y == 11)
                        {
                            monsters.Remove(344);
                        }
                    }
                }
                else if (next_pos == 213)
                {
                    if (!monsters.ContainsKey(104) && !monsters.ContainsKey(254) && !monsters.ContainsKey(314) &&
                        monsters.ContainsKey(134) &&
                        monsters.ContainsKey(164) &&
                        monsters.ContainsKey(194) &&
                        monsters.ContainsKey(224) &&
                        monsters.ContainsKey(284) &&
                        monsters.ContainsKey(344))
                    {
                        OnStageClear();
                    }
                    Dictionary <int, Block> temp = new Dictionary <int, Block>(blocks);
                    foreach (var bs in temp)
                    {
                        int   new_pos = MapPos(bs.Value.x + 1, bs.Value.y);
                        Block b       = new Block();
                        b.x = bs.Value.x + 1;
                        b.y = bs.Value.y;
                        if (b.x >= 0 && b.x <= 29 && b.y >= 0 && b.y <= 14)
                        {
                            blocks.Remove(bs.Key);
                            blocks[new_pos] = b;
                        }
                        if (b.x == 14 && b.y == 3)
                        {
                            monsters.Remove(104);
                        }
                        if (b.x == 14 && b.y == 4)
                        {
                            monsters.Remove(134);
                        }
                        if (b.x == 14 && b.y == 5)
                        {
                            monsters.Remove(164);
                        }
                        if (b.x == 14 && b.y == 6)
                        {
                            monsters.Remove(194);
                        }
                        if (b.x == 14 && b.y == 7)
                        {
                            monsters.Remove(224);
                        }
                        if (b.x == 14 && b.y == 8)
                        {
                            monsters.Remove(254);
                        }
                        if (b.x == 14 && b.y == 9)
                        {
                            monsters.Remove(284);
                        }
                        if (b.x == 14 && b.y == 10)
                        {
                            monsters.Remove(314);
                        }
                        if (b.x == 14 && b.y == 11)
                        {
                            monsters.Remove(344);
                        }
                    }
                }
            }
            else
            {
                MapXY(next_pos, out player.x, out player.y);
            }

            /*Dictionary<int, Monster> temp = new Dictionary<int, Monster>(monsters);
             * foreach (var ms in temp)
             * {
             *  int new_pos = MonsterMove(ms.Value);
             *  if (next_pos!=ms.Key)
             *  {
             *      monsters.Remove(ms.Key);
             *      monsters[new_pos] = ms.Value;
             *  }
             * }*/

            return(true);
        }
Example #2
0
        // 返回值: 是否需要刷新
        static bool MovePlayer()
        {
            ConsoleKeyInfo key = Console.ReadKey();

            int next_x = player.x;
            int next_y = player.y;

            if (key.Key == ConsoleKey.UpArrow)
            {
                next_y -= 1;
            }
            else if (key.Key == ConsoleKey.DownArrow)
            {
                next_y += 1;
            }
            else if (key.Key == ConsoleKey.LeftArrow)
            {
                next_x -= 1;
            }
            else if (key.Key == ConsoleKey.RightArrow)
            {
                next_x += 1;
            }
            else
            {
                return(true);
            }

            if (next_x < 0 || next_x >= map_width || next_y < 0 || next_y >= map_height)
            {
                return(true);
            }
            int next_pos = MapPos(next_x, next_y);

            if (moneys.ContainsKey(next_pos))
            {
                Money money = moneys[next_pos];
                below_text    = "捡到 " + money.money + " 颗金币。";
                player.money += money.money;
                moneys.Remove(next_pos);
            }
            else if (monsters.ContainsKey(next_pos))
            {
                Monster monster = monsters[next_pos];
                string  info;
                int     result = player.Attack(monster, out info);
                below_text = info;
                if (result == -1)
                {
                    GameOver();
                    return(true);
                }
                else if (result == 1)
                {
                    bool ret = onMonsterDead(monster);
                    if (ret)
                    {
                        below_text += "怪物死亡。";
                        player.AddExp(monster.level);
                        monsters.Remove(next_pos);
                    }
                }
            }
            else if (npcs.ContainsKey(next_pos))
            {
                NPC    npc = npcs[next_pos];
                string s;
                if (npc.OnTalk(player, out s))
                {
                    npcs.Remove(next_pos);
                    object o = npc.AfterDisappear();
                    if (o is Monster)
                    {
                        Monster m = o as Monster;
                        monsters[MapPos(m.x, m.y)] = m;
                    }
                }
                below_text = s;
            }
            else
            {
                MapXY(next_pos, out player.x, out player.y);
            }

            return(true);
        }
Example #3
0
        // 返回值: 是否需要刷新
        static bool MovePlayer()//移动玩家
        {
            ConsoleKeyInfo key = Console.ReadKey();

            int next_x = player.x;
            int next_y = player.y;

            if (key.Key == ConsoleKey.UpArrow)
            {
                next_y -= 1;
            }
            else if (key.Key == ConsoleKey.DownArrow)
            {
                next_y += 1;
            }
            else if (key.Key == ConsoleKey.LeftArrow)
            {
                next_x -= 1;
            }
            else if (key.Key == ConsoleKey.RightArrow)
            {
                next_x += 1;
            }
            else
            {
                return(true);
            }

            if (next_x < 0 || next_x >= map_width || next_y < 0 || next_y >= map_height)
            {
                return(true);
            }
            int next_pos = MapPos(next_x, next_y);

            if (moneys.ContainsKey(next_pos))//如果遇到金币
            {
                Money money = moneys[next_pos];
                below_text    = "捡到 " + money.money + " 颗金币。";
                player.money += money.money;
                moneys.Remove(next_pos);
            }
            else if (loutis_d.ContainsKey(next_pos))//如果遇到往下走的楼梯
            {
                Rogue.monsters.Clear();
                Rogue.walls.Clear();
                Rogue.yaoshis.Clear();
                Rogue.doors.Clear();
                Rogue.trap2s.Clear();
                Rogue.traps.Clear();
                Rogue.loutis_u.Clear();
                Map_save();
                DrawOther();
            }

            else if (yaoshis.ContainsKey(next_pos))
            {
                Yaoshi yaoshi = yaoshis[next_pos];
                below_text     = "捡到一把钥匙";
                player.yaoshi += 1;
                yaoshis.Remove(next_pos);
            }
            else if (doors.ContainsKey(next_pos))
            {
                if (player.yaoshi >= 1)
                {
                    Door door = doors[next_pos];
                    below_text     = "门打开了";
                    player.yaoshi -= 1;
                    doors.Remove(next_pos);
                }
                else
                {
                    below_text = "寻找一把钥匙,方可打开此门";
                }
            }
            else if (monsters.ContainsKey(next_pos))//如果遇到怪兽
            {
                Monster monster = monsters[next_pos];
                string  info;
                int     result = player.Attack(monster, out info);
                below_text = info;
                if (result == -1)
                {
                    GameOver();
                    return(true);
                }
                else if (result == 1)
                {
                    bool ret = onMonsterDead(monster);
                    if (ret)
                    {
                        below_text += "怪物死亡。";
                        player.AddExp(monster.level);
                        monsters.Remove(next_pos);
                    }
                }
            }
            else if (npcs.ContainsKey(next_pos))//如果遇到NPC
            {
                NPC    npc = npcs[next_pos];
                string s;
                if (npc.OnTalk(player, out s))
                {
                    npcs.Remove(next_pos);
                    object o = npc.AfterDisappear();
                    if (o is Monster)
                    {
                        Monster m = o as Monster;
                        monsters[MapPos(m.x, m.y)] = m;
                    }
                }
                below_text = s;
            }
            else if (walls.ContainsKey(next_pos))//如果遇到墙
            {
            }
            else if (trap2s.ContainsKey(next_pos))//如果遇到陷阱2
            {
                Trap trap = trap2s[next_pos];
                trap2s.Remove(next_pos);
                Rogue.AddMonster(11, 8, 4);
                Rogue.AddMonster(12, 8, 4);
                Rogue.AddMonster(13, 8, 4);
            }
            else if (traps.ContainsKey(next_pos))//如果遇到陷阱
            {
                Trap trap1 = traps[next_pos];
                traps.Remove(next_pos);

                player.x = 15;
                player.y = 0;
            }
            else if (equipments.ContainsKey(next_pos))//如果遇到装备
            {
                Equipment equipment = equipments[next_pos];
                equipments.Remove(next_pos);
                player.AddAtk(100);
                object o = equipment.AfterDisappear();
                if (o is Trap)
                {
                    Trap m = o as Trap;
                    traps[MapPos(m.x, m.y)] = m;
                }
            }
            else if (princess.ContainsKey(next_pos))//如果遇到公主
            {
                Base_Princess princess1 = princess[next_pos];
                string        s;
                if (princess1.OnTalk(player, out s))
                {
                    princess.Remove(next_pos);
                    object o = princess1.AfterDisappear();
                    if (o is NPC)
                    {
                        NPC m = o as NPC;
                        npcs[MapPos(m.x, m.y)] = m;
                    }
                }
                below_text = s;
            }

            else
            {
                MapXY(next_pos, out player.x, out player.y);
            }
            // 玩家行动结束


            // 所有怪物行动
            List <int> remove_keys = new List <int>();
            Dictionary <int, Monster> new_monsters = new Dictionary <int, Monster>();

            foreach (var pair in monsters)
            {
                int new_pos = MonsterMove(pair.Value);
                if (new_pos != pair.Key)
                {
                    // 更新Key
                    remove_keys.Add(pair.Key);
                    new_monsters[new_pos] = pair.Value;
                }
            }

            for (int i = 0; i < remove_keys.Count(); ++i)
            {
                monsters.Remove(remove_keys[i]);
            }
            foreach (var new_pair in new_monsters)
            {
                monsters[new_pair.Key] = new_pair.Value;
            }

            return(true);
        }