本文整理汇总了C#中IGameState.GetOwnResources方法的典型用法代码示例。如果您正苦于以下问题:C# IGameState.GetOwnResources方法的具体用法?C# IGameState.GetOwnResources怎么用?C# IGameState.GetOwnResources使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IGameState
的用法示例。
在下文中一共展示了IGameState.GetOwnResources方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: HandleTrade
public ITrade HandleTrade(IGameState state, ITrade offer, int proposingPlayerId)
{
// accept if convert extras to needed and opponent < 7 points
List<Resource> extras = new List<Resource>();
foreach (Resource r in Enum.GetValues(typeof(Resource)))
{
int extra = state.GetOwnResources().Count(res => res == r) - 1;
for (int i = 0; i < extra; i++) extras.Add(r);
}
// good offer?
var valid = offer.Give.Where(o => o.All(r => o.Count(cur => cur == r) <= extras.Count(e => e == r)));
if (valid.Count() == 0) return offer.Decline();
// take the one with least cards to give, and then by most duplicates
List<Resource> bestGive = valid.OrderBy(o => o.Count)
.ThenByDescending(o => state.GetOwnResources().Sum(r => state.GetOwnResources().Count(res => res == r)))
.First();
// find best "take" (cards we get) kind of the opposite of above
List<Resource> bestTake = offer.Take.OrderBy(o => o.Count)
.ThenBy(o => state.GetOwnResources().Sum(r => state.GetOwnResources().Count(res => res == r)))
.First();
return offer.Respond(bestGive, bestTake);
}
示例2: DiscardCards
public Resource[] DiscardCards(IGameState state, int toDiscard)
{
if (!silent)
Console.WriteLine(id + ": Choosing cards to discard");
List<Resource> chosenDiscard = new List<Resource>(toDiscard);
List<Resource> hand = state.GetOwnResources().ToList();
while (chosenDiscard.Count < toDiscard)
{
// pick one of the type we have most of
Resource pick = hand.OrderByDescending(r => hand.Count(c => c == r)).First();
chosenDiscard.Add(pick);
hand.Remove(pick);
}
return chosenDiscard.ToArray();
}
示例3: DiscardCards
public Resource[] DiscardCards(IGameState state, int toDiscard)
{
Console.WriteLine("You must discard " + toDiscard + " cards from you hand:");
var hand = state.GetOwnResources().ToList();
var cards = new Resource[toDiscard];
while (toDiscard-- > 0)
{
Console.WriteLine("Select a resource to discard:");
foreach (Resource resource in Enum.GetValues(typeof (Resource)))
{
if (hand.Count(r => r == resource) == 0) continue;
Console.WriteLine(((int)resource) + ") " + resource + " x " + hand.Count(r => r == resource));
}
//Keep trying if answering wrong
do
{
cards[toDiscard] = (Resource)int.Parse(Console.ReadLine());
} while (!hand.Remove(cards[toDiscard]));
}
return cards;
}
示例4: PerformTurn
public void PerformTurn(IGameState state, IGameActions actions)
{
Console.WriteLine("It is now your turn (#" + assignedId + ")");
while (true)
{
try
{
Console.Write("Resources: [");
foreach (Resource resource in Enum.GetValues(typeof (Resource)))
{
var count = state.GetOwnResources().Count(r => r == resource);
if (count == 0) continue;
Console.Write(resource + " x " + count + ", ");
}
Console.WriteLine("]");
Console.Write("Dev. cards: [");
foreach (DevelopmentCard devcard in Enum.GetValues(typeof(DevelopmentCard)))
{
var count = state.GetOwnDevelopmentCards().Count(r => r == devcard);
if (count == 0) continue;
Console.Write(devcard + " x " + count + ", ");
}
Console.WriteLine("]");
bool canBuildRoad = hasRes(state, Resource.Lumber) && hasRes(state, Resource.Brick);
//TODO: has any more pieces
bool canBuildSettlement = hasRes(state, Resource.Brick) && hasRes(state, Resource.Lumber) &&
hasRes(state, Resource.Grain) && hasRes(state, Resource.Wool);
//TODO: has any more pieces
bool canBuildCity = hasRes(state, Resource.Ore, 3) && hasRes(state, Resource.Grain, 2);
//TODO: has any more pieces
bool canBuyDevCard = hasRes(state, Resource.Grain) && hasRes(state, Resource.Ore) &&
hasRes(state, Resource.Wool); //TODO: any more dev cards
bool canTradeBank = true, canTradePlayers = true; //TODO: Implement these
Console.WriteLine("Choose an action:");
Console.WriteLine("0) End turn");
if (canBuildRoad) Console.WriteLine("1) Build road");
if (canBuildSettlement) Console.WriteLine("2) Build settlement");
if (canBuildCity) Console.WriteLine("3) Build city");
if (canBuyDevCard) Console.WriteLine("4) Buy development card");
if (!hasPlayedDevCard &&
state.GetOwnDevelopmentCards().Count(d => d != DevelopmentCard.VictoryPoint) > 0)
Console.WriteLine("5) Play development card");
if (canTradeBank) Console.WriteLine("6) Trade resources with the bank");
if (canTradePlayers) Console.WriteLine("7) Trade resources with the other players");
int answer = int.Parse(Console.ReadLine() ?? "0");
switch (answer)
{
case 1: //road
var roadPos = getRoadPosition();
state = actions.BuildRoad(roadPos);
break;
case 2: //settlement
var settlementPos = getSettlementPosition();
state = actions.BuildSettlement(settlementPos);
break;
case 3: //city
var cityPos = getCityPosition();
state = actions.BuildCity(cityPos);
break;
case 4: //buy dev
state = actions.DrawDevelopmentCard();
break;
case 5: //play dev
state = PlayDevelopmentCard(state, actions) ?? state;
break;
case 6: //trade bank
Console.WriteLine("Choose which resource to give");
var tbGive = selectResourceTradeBank(state.Board);
Console.WriteLine("Choose which resource to receive");
var tbTake = selectResource();
state = actions.TradeBank(tbGive, tbTake);
break;
case 7: //trade players
Console.WriteLine("Which resource type do you want to give away:");
var tpGiveType = selectResource();
Console.WriteLine("How many " + tpGiveType + " do you want to give:");
var tpGiveAmount = int.Parse(Console.ReadLine() ?? "2");
Console.WriteLine("Which resource type do you want to get in return for " + tpGiveAmount + " " + tpGiveType + "? :");
var tpTakeType = selectResource();
Console.WriteLine("How many " + tpTakeType + " do you want to get:");
var tpTakeAmount = int.Parse(Console.ReadLine() ?? "1");
var give = new List<List<Resource>>(){new List<Resource>()};
for (int i = 0; i < tpGiveAmount; i++)
give[0].Add(tpGiveType);
var take = new List<List<Resource>>(){new List<Resource>()};
for (int i = 0; i < tpTakeAmount; i++)
take[0].Add(tpTakeType);
var feedback = actions.ProposeTrade(give, take);
Console.WriteLine("The other players responded:");
foreach (var f in feedback)
{
Console.Write(f.Key + ") ");
Console.Write(f.Value.Status + " ");
//.........这里部分代码省略.........
示例5: hasRes
private bool hasRes(IGameState state, Resource res, int amount = 1)
{
return state.GetOwnResources().Count(r => r == res) >= amount;
}
示例6: PerformTurn
public void PerformTurn(IGameState state, IGameActions actions)
{
if (!silent)
Console.WriteLine(id + ": Performing main turn");
for (bool changed = true; changed; )
{
changed = false;
var resources = state.GetOwnResources();
//Build city
if (state.GetCitiesLeft(id) > 0 && resources.Count(r => r == Resource.Grain) >= 2 && resources.Count(r => r == Resource.Ore) >= 3)
{
var pos = state.Board.GetPossibleCities(id);
if (pos.Length > 0)
{
changed = true;
state = actions.BuildCity(FindBestIntersection(pos,state.Board));
}
}
//Build settlement
if (!changed && state.GetSettlementsLeft(id) > 0 && resources.Contains(Resource.Grain) && resources.Contains(Resource.Wool) && resources.Contains(Resource.Lumber) && resources.Contains(Resource.Brick))
{
var pos = state.Board.GetPossibleSettlements(id);
if (pos.Length > 0)
{
changed = true;
state = actions.BuildSettlement(FindBestIntersection(pos,state.Board));
}
}
//Build road
if (!changed && state.GetRoadsLeft(id) > 0 && resources.Contains(Resource.Lumber) && resources.Contains(Resource.Brick))
{
var pos = state.Board.GetPossibleRoads(id);
if (pos.Length > 0)
{
changed = true;
state = actions.BuildRoad(FindBestRoad(pos, state.Board));
}
}
//Trade players
if (!changed && Enum.GetValues(typeof(Resource)).Cast<Resource>().Any(r => resources.Count(res => res == r) > 2))
{
// trade 1 of most for 1 missing
List<List<Resource>> give = resources.OrderByDescending(r => resources.Count(res => res == r))
.GroupBy(r => resources.Count(res => res == r)).First().Distinct()
.Select(r => { var list = new List<Resource>(); list.Add(r); return list; }).ToList();
List<List<Resource>> take = Enum.GetValues(typeof(Resource)).Cast<Resource>()
.OrderBy(r => resources.Count(res => res == r))
.GroupBy(r => resources.Count(res => res == r)).First()
.Select(r => { var list = new List<Resource>(); list.Add(r); return list; }).ToList();
if (give.Count > 0 && take.Count > 0)
{
Dictionary<int,ITrade> answers = actions.ProposeTrade(give, take);
if (answers.Count > 0)
{
// trade with lowest score
int otherPlayer = answers.OrderBy(kv => state.GetPlayerScore(kv.Key)).First().Key;
state = actions.Trade(otherPlayer);
changed = true;
}
}
}
//Trade bank
foreach (Resource give in Enum.GetValues(typeof(Resource)))
{
if (changed) break;
if (resources.Count(r => r == give) > 4)
{
foreach (Resource take in Enum.GetValues(typeof(Resource)))
{
if (changed) break;
if (resources.Count(r => r == take) == 0 && state.ResourceBank[(int)take] > 0)
{
state = actions.TradeBank(give, take);
changed = true;
}
}
}
}
}
}