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