Ejemplo n.º 1
0
 public override bool OnTalk(Player player, out string text)
 {
     if (player.level <= 3)
     {
         text = name + ":" + "勇者,你还没有掌握面向对象的技术,等你3级以后再来找我吧。";
         return(false);
     }
     text = name + ":" + "我将把我平生所学全部传授给你。";
     for (int i = 0; i < 5; ++i)
     {
         player.AddExp(1);
     }
     return(true);
 }
Ejemplo n.º 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);
        }
Ejemplo n.º 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 (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);
        }
Ejemplo n.º 4
0
        public static void DoMove(int a, int b)
        {
            int e      = 0;
            int c      = 0;
            int result = 0;

            foreach (var pair in monsters)
            {
                int r = pair.Value.x - a;
                int w = pair.Value.y - b;

                if (Math.Abs(r) < 4 && Math.Abs(w) < 4)
                {
                    c = pair.Key;
                    if (Math.Abs(r) == 1 && Math.Abs(w) == 0 || Math.Abs(r) == 0 && Math.Abs(w) == 1)
                    {
                        e = 1;
                    }
                    else
                    {
                        e = DirectionMove(player, pair.Value);
                    }
                }
            }
            if (e == 3)
            {
            }

            if (e == 2)
            {
                int     m;
                Monster monster2 = new Monster(monsters[c].level);
                monster2.x = monsters[c].x;
                monster2.y = monsters[c].y;
                m          = MapPos(monster2.x, monster2.y);
                monsters.Remove(c);
                monsters.Add(m, monster2);
                int r = monster2.x - a;
                int w = monster2.y - b;
                if (Math.Abs(r) == 1 && Math.Abs(w) == 0 || Math.Abs(r) == 0 && Math.Abs(w) == 1)
                {
                    string info;
                    result     = monster2.Attack(player, out info);
                    below_text = info;
                    if (result == -1)
                    {
                        GameOver();
                    }
                    else if (result == 1)
                    {
                        bool ret = onMonsterDead(monster2);
                        if (ret)
                        {
                            below_text += "怪物死亡。";
                            player.AddExp(monster2.level);
                            monsters.Remove(m);
                        }
                    }
                }
            }
            if (e == 1)
            {
                string info;
                result     = player.Attack2(monsters[c], out info);
                below_text = info;
                if (result == -1)
                {
                    GameOver();
                }
                else if (result == 1)
                {
                    bool ret = onMonsterDead(monsters[c]);
                    if (ret)
                    {
                        below_text += "怪物死亡。";
                        player.AddExp(monsters[c].level);
                        monsters.Remove(c);
                    }
                }
            }
        }//是否移动