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

            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 - 2 || next_y < 0 || next_y >= map_height - 2)
            {
                return(true);
            }
            int next_pos = MapPos(next_x, next_y);

            if (keys.ContainsKey(next_pos))
            {
                Key key1 = keys[next_pos];
                player.bag.Add(key1);
                string s;
                if (key1.OnTalk(player, out s))
                {
                    npcs.Remove(next_pos);
                    object o = key1.AfterDisappear();
                    if (o is Monster)
                    {
                        Monster m = o as Monster;
                        monsters[MapPos(m.x, m.y)] = m;
                    }
                }
                below_text = s;
                keys.Remove(next_pos);
            }
            else if (doors.ContainsKey(next_pos))
            {
                Door   door = doors[next_pos];
                string s;
                if (door.OnTalk(player, out s))
                {
                    //npcs.Remove(next_pos);
                    object o = door.AfterDisappear();
                    if (o is Monster)
                    {
                        Monster m = o as Monster;
                        monsters[MapPos(m.x, m.y)] = m;
                    }
                }
                below_text = s;
                for (int n = 0; n < player.bag.Count; n++)
                {
                    if (player.bag[n].id == doors[next_pos].id)
                    {
                        player.bag.RemoveAt(n);
                        doors.Remove(next_pos);
                        break;
                    }
                }
                return(false);
            }
            if (electricSwitchs.ContainsKey(next_pos))
            {
                ElectricSwitch electricSwitch = electricSwitchs[next_pos];
                player.bags.Add(electricSwitch);
                string s;
                if (electricSwitch.OnTalk(player, out s))
                {
                    npcs.Remove(next_pos);
                    object o = electricSwitch.AfterDisappear();
                    if (o is Monster)
                    {
                        Monster m = o as Monster;
                        monsters[MapPos(m.x, m.y)] = m;
                    }
                }
                below_text = s;
                electricSwitchs.Remove(next_pos);
            }
            else if (electricitydoors.ContainsKey(next_pos))
            {
                ElectricityDoor electricitydoor = electricitydoors[next_pos];
                string          s;
                if (electricitydoor.OnTalk(player, out s))
                {
                    //npcs.Remove(next_pos);
                    object o = electricitydoor.AfterDisappear();
                    if (o is Monster)
                    {
                        Monster m = o as Monster;
                        monsters[MapPos(m.x, m.y)] = m;
                    }
                }
                below_text = s;
                for (int n = 0; n < player.bags.Count; n++)
                {
                    if (player.bags[n].id == electricitydoors[next_pos].id)
                    {
                        electricSwitchs.Remove(next_pos); electricitydoors.Remove(next_pos);
                    }
                }
                return(false);
            }
            if (walls.ContainsKey(next_pos))
            {
                return(false);
            }
            else if (monsters.ContainsKey(next_pos))
            {
                Monster monster = monsters[next_pos];
                string  s;
                if (monster.OnTalk(player, out s))
                {
                    //npcs.Remove(next_pos);
                    object o = monster.AfterDisappear();
                    if (o is Monster)
                    {
                        Monster m = o as Monster;
                        monsters[MapPos(m.x, m.y)] = m;
                    }
                }
                below_text = s;
                game_over  = true;
                return(false);
            }
            else if (longpoles.ContainsKey(next_pos))
            {
                LongPole longPole = longpoles[next_pos];
                player.bagss.Add(longPole);
                string s;
                if (longPole.OnTalk(player, out s))
                {
                    object o = longPole.AfterDisappear();
                    if (o is Monster)
                    {
                        Monster m = o as Monster;
                        monsters[MapPos(m.x, m.y)] = m;
                    }
                }
                longpoles.Remove(next_pos);
                below_text = s;
                return(false);
            }
            if (transfers.ContainsKey(next_pos))
            {
                Transfer transfer = transfers[next_pos];
                string   s;
                if (transfer.OnTalk(player, out s))
                {
                    object o = transfer.AfterDisappear();
                    if (o is Monster)
                    {
                        Monster m = o as Monster;
                        monsters[MapPos(m.x, m.y)] = m;
                    }
                }
                below_text = s;
                if (transfers[next_pos].name == "¤")
                {
                    player.x = 21;
                    player.y = 23;
                }
                else if (transfers[next_pos].name == "§")
                {
                    player.x = 12;
                    player.y = 17;
                }
                else if (transfers[next_pos].name == "◎")
                {
                    player.x = 3;
                    player.y = 0;
                }
                return(false);
            }
            else if (npcs.ContainsKey(next_pos))
            {
                Key newkey = new Key("1", 1);
                player.bag.Add(newkey);
                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;
                //{ npcs.Remove(next_pos); }
                return(true);
            }
            else
            {
                int a, b;
                MapXY(next_pos, out a, out b);
                player.x = a;
                player.y = b;
            }

            return(true);
        }