private static bool IsGoodTrade(Trade ptr, IEnumerable<Trade> trs) { foreach (var tr in trs) { if (tr.to.Id == ptr.from.Id) { if (EqualTrCells(tr.get_cells, ptr.give_cells) && ptr.giveMoney >= tr.giveMoney && ptr.getMoney <= tr.getMoney) return true; } } return false; }
public bool Equals(Trade tr) { bool res = false; bool pls = from == tr.from && to == tr.to; bool lands1 = give_cells.Intersect(tr.give_cells).Count() == give_cells.Count(); bool lands2 = get_cells.Intersect(tr.get_cells).Count() == get_cells.Count(); bool money = getMoney == tr.getMoney && giveMoney == tr.giveMoney; if (pls && lands1 && lands2 && money) res = true; return res; }
public static void InitTrade(Game g, string state, int pid) { state = state.Replace("undefined", ""); var pst = state.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); Player from = g.GetPlayer(pid); var ss_from = pst.SingleOrDefault(x => x.StartsWith("p" + from.Id)); var ss_to = pst.Where(x => !x.StartsWith("p" + from.Id)).OrderByDescending(x => x.Length).FirstOrDefault(); if (ss_to == null) { return; } Player to = null; var q = ss_from.Length > 1; if (q) { foreach (var pp in g.Players) { if (ss_to.StartsWith("p" + pp.Id)) to = pp; } var from_ids = ss_from.Replace("p" + from.Id, "").Trim('-').Split('-').Where(x => !x.StartsWith("m")).Select(x => Int32.Parse(x)).ToArray(); var from_money_str = ss_from.Trim('-').Split('-').FirstOrDefault(x => x.StartsWith("m")); var from_money = from_money_str != null ? from_money_str.Replace("m", "") : ""; var to_ids = ss_to.Replace("p" + to.Id, "").Trim('-').Split('-').Where(x => !x.StartsWith("m")).Select(x => Int32.Parse(x)).ToArray(); var to_money_str = ss_to.Trim('-').Split('-').FirstOrDefault(x => x.StartsWith("m")); var to_money = to_money_str != null ? to_money_str.Replace("m", "") : ""; var trState = new Trade { from = from, give_cells = from_ids, giveMoney = string.IsNullOrEmpty(from_money) ? 0 : Int32.Parse(from_money), to = to, get_cells = to_ids, getMoney = string.IsNullOrEmpty(to_money) ? 0 : Int32.Parse(to_money), }; g.CurrTrade = trState; } }