// 返回值: 是否需要刷新 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); }
// 返回值: 是否需要刷新 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); }
// 返回值: 是否需要刷新 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); }