private void AuctionMoveProcessor(Move move) { using (var ctx = new MonopolyModelContainer()) { Player player = ctx.Players.SingleOrDefault(p => p.Id == move.PlayerId); Field field = ctx.Fields.SingleOrDefault(f => f.Name == move.OfferField); if (player != null && field != null) { var auction = new Auction() { Game = player.Game, Field = field, Price = move.OfferPrice, }; ctx.Auctions.Add(auction); ctx.SaveChanges(); } } }
public void CheckMove(List<Move> moves, int playerId) { using (var ctx = new MonopolyModelContainer()) { Player player = ctx.Players.SingleOrDefault(p => p.Id == playerId); Player other = ctx.Players.SingleOrDefault(p => p.Game.Id == player.Game.Id && p.Realities.Count(r => r.Field.Id == player.Position.Id) == 1); if (other == null) { if (player.Position.Price <= player.Money) { moves.Add(new Move() { Type = Move.MoveType.BUY, Description = "Buy the property", Param = player.Position.Name, PlayerId = player.Id }); } // not handled moves.Add(new Move() { Type = Move.MoveType.BIDONAUCTION, Description = "Auction the property", Param = "", PlayerId = player.Id, OfferField = player.Position.Name, OfferPrice = (player.Position.Price / 2) }); var auction = new Auction() { Field = player.Position, Game = player.Game, Price = player.Position.Price / 2 }; ctx.Auctions.Add(auction); ctx.SaveChanges(); } else if (other != null && !player.HasPaid && player.Id != other.Id) { Reality reality = other.Realities.SingleOrDefault(r => r.Field.Id == player.Position.Id); if (reality.IsMortgaged) { // shouldn't pay if it is mortgaged. player.HasPaid = true; return; } long fee = 0; if (player.Position.Type == "Railway") { int ownedRailways = other.Realities.Count(r => r.Field.Type == "Railway" && !r.IsMortgaged); fee = player.Position.Price * ownedRailways / 4; } else if (player.Position.Type == "Utility") { Random rnd = new Random(); int score = rnd.Next(1, 7); score += rnd.Next(1, 7); fee = score * 10; } else if (player.Position.Type == "Tax") { player.Money -= player.Position.Price; moves.Add(new Move() { Type = Move.MoveType.MSG, Description = "You paid tax ", Param = player.Position.Price.ToString() }); } else if (player.Position.Type == "ToJail") { Field jail = ctx.Fields.SingleOrDefault(f => f.Type == "Jail"); player.Position = jail; player.JailValue = 1; ctx.SaveChanges(); moves.Add(new Move() { Type = Move.MoveType.MSG, Description = "You went to jail." }); } else if (player.Position.Type != "Free") { int sameColor = other.Realities.Count(r => r.Field.Type == player.Position.Type); int maxThisColor = ctx.Fields.Count(f => f.Type == player.Position.Type); if (reality.Houses + reality.Hotels > 0 || maxThisColor > sameColor) { fee = player.Position.InitialFee + player.Position.InitialFee * reality.Houses ^ 2; } else { fee = player.Position.InitialFee * 2; } } // Pay fee player.Money -= fee; other.Money += fee; player.HasPaid = true; ctx.SaveChanges(); if (fee <= player.Money) { moves.Add(new Move() { Type = Move.MoveType.MSG, Description = "You paid the rent for " + player.Position.Name + " which cost you ", Param = fee.ToString() }); } else { moves.Add(new Move() { Type = Move.MoveType.MSG, Description = "Staying at " + player.Position.Name + " is too expensive for you. You need to mortgage or sell some of your properties. It costs ", Param = fee.ToString() }); } } } }