using System.Reflection; using MultiversalDiplomacy.Model; namespace MultiversalDiplomacy.Map; /// /// The standard Diplomacy map. /// public class StandardMap : Map { public override IEnumerable Provinces { get; } public static StandardMap Instance { get; } = new StandardMap(); private StandardMap() { this.Provinces = new List() { Province.Empty("North Africa", "NAF") .AddLandLocation() .AddCoastLocation(), Province.Supply("Tunis", "TUN") .AddLandLocation() .AddCoastLocation(), Province.Empty("Bohemia", "BOH") .AddLandLocation(), Province.Supply("Budapest", "BUD") .AddLandLocation(), Province.Empty("Galacia", "GAL") .AddLandLocation(), Province.Supply("Trieste", "TRI") .AddLandLocation() .AddCoastLocation(), Province.Empty("Tyrolia", "TYR") .AddLandLocation(), Province.Time("Vienna", "VIE") .AddLandLocation(), Province.Empty("Albania", "ALB") .AddLandLocation() .AddCoastLocation(), Province.Supply("Bulgaria", "BUL") .AddLandLocation() .AddCoastLocation("east coast", "ec") .AddCoastLocation("south coast", "sc"), Province.Supply("Greece", "GRE") .AddLandLocation() .AddCoastLocation(), Province.Supply("Rumania", "RUM", "RMA") .AddLandLocation() .AddCoastLocation(), Province.Supply("Serbia", "SER") .AddLandLocation(), Province.Empty("Clyde", "CLY") .AddLandLocation() .AddCoastLocation(), Province.Supply("Edinburgh", "EDI") .AddLandLocation() .AddCoastLocation(), Province.Supply("Liverpool", "LVP", "LPL") .AddLandLocation() .AddCoastLocation(), Province.Time("London", "LON") .AddLandLocation() .AddCoastLocation(), Province.Empty("Wales", "WAL") .AddLandLocation() .AddCoastLocation(), Province.Empty("Yorkshire", "YOR") .AddLandLocation() .AddCoastLocation(), Province.Supply("Brest", "BRE") .AddLandLocation() .AddCoastLocation(), Province.Empty("Burgundy", "BUR") .AddLandLocation(), Province.Empty("Gascony", "GAS") .AddLandLocation() .AddCoastLocation(), Province.Supply("Marseilles", "MAR") .AddLandLocation() .AddCoastLocation(), Province.Time("Paris", "PAR") .AddLandLocation(), Province.Empty("Picardy", "PIC") .AddLandLocation() .AddCoastLocation(), Province.Time("Berlin", "BER") .AddLandLocation() .AddCoastLocation(), Province.Supply("Kiel", "KIE") .AddLandLocation() .AddCoastLocation(), Province.Supply("Munich", "MUN") .AddLandLocation(), Province.Empty("Prussia", "PRU") .AddLandLocation() .AddCoastLocation(), Province.Empty("Ruhr", "RUH", "RHR") .AddLandLocation(), Province.Empty("Silesia", "SIL") .AddLandLocation(), Province.Supply("Spain", "SPA") .AddLandLocation() .AddCoastLocation("north coast", "nc") .AddCoastLocation("south coast", "sc"), Province.Supply("Portugal", "POR") .AddLandLocation() .AddCoastLocation(), Province.Empty("Apulia", "APU") .AddLandLocation() .AddCoastLocation(), Province.Supply("Naples", "NAP") .AddLandLocation() .AddCoastLocation(), Province.Empty("Piedmont", "PIE") .AddLandLocation() .AddCoastLocation(), Province.Time("Rome", "ROM", "RME") .AddLandLocation() .AddCoastLocation(), Province.Empty("Tuscany", "TUS") .AddLandLocation() .AddCoastLocation(), Province.Supply("Venice", "VEN") .AddLandLocation() .AddCoastLocation(), Province.Supply("Belgium", "BEL") .AddLandLocation() .AddCoastLocation(), Province.Supply("Holland", "HOL") .AddLandLocation() .AddCoastLocation(), Province.Empty("Finland", "FIN") .AddLandLocation() .AddCoastLocation(), Province.Empty("Livonia", "LVN", "LVA") .AddLandLocation() .AddCoastLocation(), Province.Time("Moscow", "MOS") .AddLandLocation() .AddCoastLocation(), Province.Supply("Sevastopol", "SEV") .AddLandLocation() .AddCoastLocation(), Province.Supply("Saint Petersburg", "STP") .AddLandLocation() .AddCoastLocation("north coast", "nc") .AddCoastLocation("west coast", "wc"), Province.Empty("Ukraine", "UKR") .AddLandLocation(), Province.Supply("Warsaw", "WAR") .AddLandLocation(), Province.Supply("Denmark", "DEN") .AddLandLocation() .AddCoastLocation(), Province.Supply("Norway", "NWY") .AddLandLocation() .AddCoastLocation(), Province.Supply("Sweden", "SWE") .AddLandLocation() .AddCoastLocation(), Province.Supply("Ankara", "ANK") .AddLandLocation() .AddCoastLocation(), Province.Empty("Armenia", "ARM") .AddLandLocation() .AddCoastLocation(), Province.Time("Constantinople", "CON") .AddLandLocation() .AddCoastLocation(), Province.Supply("Smyrna", "SMY") .AddLandLocation() .AddCoastLocation(), Province.Empty("Syria", "SYR") .AddLandLocation() .AddCoastLocation(), Province.Empty("Barents Sea", "BAR") .AddOceanLocation(), Province.Empty("English Channel", "ENC", "ECH") .AddOceanLocation(), Province.Empty("Heligoland Bight", "HEL", "HGB") .AddOceanLocation(), Province.Empty("Irish Sea", "IRS", "IRI") .AddOceanLocation(), Province.Empty("Mid-Atlantic Ocean", "MAO", "MID") .AddOceanLocation(), Province.Empty("North Atlantic Ocean", "NAO", "NAT") .AddOceanLocation(), Province.Empty("North Sea", "NTH", "NTS") .AddOceanLocation(), Province.Empty("Norwegian Sea", "NWS", "NWG") .AddOceanLocation(), Province.Empty("Skagerrak", "SKA", "SKG") .AddOceanLocation(), Province.Empty("Baltic Sea", "BAL") .AddOceanLocation(), Province.Empty("Guld of Bothnia", "GOB", "BOT") .AddOceanLocation(), Province.Empty("Adriatic Sea", "ADS", "ADR") .AddOceanLocation(), Province.Empty("Aegean Sea", "AEG") .AddOceanLocation(), Province.Empty("Black Sea", "BLA") .AddOceanLocation(), Province.Empty("Eastern Mediterranean Sea", "EMS", "EAS") .AddOceanLocation(), Province.Empty("Gulf of Lyons", "GOL", "LYO") .AddOceanLocation(), Province.Empty("Ionian Sea", "IOS", "ION", "INS") .AddOceanLocation(), Province.Empty("Tyrrhenian Sea", "TYS", "TYN") .AddOceanLocation(), Province.Empty("Western Mediterranean Sea", "WMS", "WES") .AddOceanLocation(), }; Land("NAF").AddBorder(Land("TUN")); Water("NAF").AddBorder(Water("MAO")); Water("NAF").AddBorder(Water("WES")); Water("NAF").AddBorder(Water("TUN")); Land("TUN").AddBorder(Land("NAF")); Water("TUN").AddBorder(Water("NAF")); Water("TUN").AddBorder(Water("WES")); Water("TUN").AddBorder(Water("TYS")); Water("TUN").AddBorder(Water("ION")); Land("BOH").AddBorder(Land("MUN")); Land("BOH").AddBorder(Land("SIL")); Land("BOH").AddBorder(Land("GAL")); Land("BOH").AddBorder(Land("VIE")); Land("BOH").AddBorder(Land("TYR")); Land("BUD").AddBorder(Land("VIE")); Land("BUD").AddBorder(Land("GAL")); Land("BUD").AddBorder(Land("RUM")); Land("BUD").AddBorder(Land("SER")); Land("BUD").AddBorder(Land("TRI")); Land("GAL").AddBorder(Land("BOH")); Land("GAL").AddBorder(Land("SIL")); Land("GAL").AddBorder(Land("WAR")); Land("GAL").AddBorder(Land("UKR")); Land("GAL").AddBorder(Land("RUM")); Land("GAL").AddBorder(Land("BUD")); Land("GAL").AddBorder(Land("VIE")); Land("TRI").AddBorder(Land("VEN")); Land("TRI").AddBorder(Land("TYR")); Land("TRI").AddBorder(Land("VIE")); Land("TRI").AddBorder(Land("BUD")); Land("TRI").AddBorder(Land("SER")); Land("TRI").AddBorder(Land("ALB")); Water("TRI").AddBorder(Water("ALB")); Water("TRI").AddBorder(Water("ADR")); Water("TRI").AddBorder(Water("VEN")); Land("TYR").AddBorder(Land("MUN")); Land("TYR").AddBorder(Land("BOH")); Land("TYR").AddBorder(Land("VIE")); Land("TYR").AddBorder(Land("TRI")); Land("TYR").AddBorder(Land("VEN")); Land("TYR").AddBorder(Land("PIE")); Land("VIE").AddBorder(Land("TYR")); Land("VIE").AddBorder(Land("BOH")); Land("VIE").AddBorder(Land("GAL")); Land("VIE").AddBorder(Land("BUD")); Land("VIE").AddBorder(Land("TRI")); Land("ALB").AddBorder(Land("TRI")); Land("ALB").AddBorder(Land("SER")); Land("ALB").AddBorder(Land("GRE")); Water("ALB").AddBorder(Water("TRI")); Water("ALB").AddBorder(Water("ADR")); Water("ALB").AddBorder(Water("ION")); Water("ALB").AddBorder(Water("GRE")); Land("BUL").AddBorder(Land("GRE")); Land("BUL").AddBorder(Land("SER")); Land("BUL").AddBorder(Land("RUM")); Land("BUL").AddBorder(Land("CON")); Coast("BUL", "ec").AddBorder(Water("BLA")); Coast("BUL", "ec").AddBorder(Water("CON")); Coast("BUL", "sc").AddBorder(Water("CON")); Coast("BUL", "sc").AddBorder(Water("AEG")); Coast("BUL", "sc").AddBorder(Water("GRE")); Land("GRE").AddBorder(Land("ALB")); Land("GRE").AddBorder(Land("SER")); Land("GRE").AddBorder(Land("BUL")); Water("GRE").AddBorder(Water("ALB")); Water("GRE").AddBorder(Water("ION")); Water("GRE").AddBorder(Water("AEG")); Water("GRE").AddBorder(Coast("BUL", "sc")); // TODO Water("IOS").AddBorder(Water("TUN")); Water("IOS").AddBorder(Water("TYS")); Water("IOS").AddBorder(Water("NAP")); Water("IOS").AddBorder(Water("APU")); Water("IOS").AddBorder(Water("ADR")); Water("IOS").AddBorder(Water("ALB")); Water("IOS").AddBorder(Water("GRE")); Water("IOS").AddBorder(Water("AEG")); // TODO } }