gpt4 book ai didi

c# - 不断变化的(虚构的)金钱

转载 作者:行者123 更新时间:2023-11-30 18:54:12 26 4
gpt4 key购买 nike

在使用古老的铜、银、金和白金货币系统的游戏中,每种面额的 100 个单位等于下一个最高面额的 1 个单位,这是可接受的“排序”或“在输入时向上改变'值?


public struct Coinage
{
private int _copper;
private int _silver;
private int _gold;
private int _platinum;

public int Copper
{
get { return _copper; }
set
{
int val = value;
while (val > 99) { val -= 100; Silver ++; }
_copper += val;
}
}
public int Silver
{
get { return _silver; }
set
{
int val = value;
while (val > 99) { val -= 100; Gold ++; }
_silver += val;
}
}
public int Gold
{
get { return _gold; }
set
{
int val = value;
while (val > 99) { val -= 100; Platinum ++; }
_gold += val;
}
}
public int Platinum { get { return _platinum; } set { _platinum = value; } }
}

那么无论我输入多少面额(低于白金),它都会正确地为我兑换货币?像这样链接属性的设置方法是个坏主意吗?有没有一种更有效的方法可以在单一方法中做到这一点?

谢谢。

最佳答案

好的 - 所以我评论说我会将其存储为一个值并根据需要显示。下面是一个快速而肮脏的实现来传达这个想法。我没有费心检查底片或优化 - 只是想传达这个想法。

public class Coinage
{
public long Copper { get; set; }

public override string ToString()
{
long change = Copper;

var denominations = new[] {"Gold", "Silver"};

int numberOfDenominations = denominations.Count();

var result = new StringBuilder();

foreach (var denomination in denominations)
{
int coppersToCurrentDenomination = ((int) Math.Pow(100, numberOfDenominations));

long currentAmount = change / coppersToCurrentDenomination;
result.AppendFormat("{0}:{1}", denomination, currentAmount);
change -= (currentAmount * coppersToCurrentDenomination);

numberOfDenominations--;
}

result.AppendFormat("Copper:{0}", change);

return result.ToString();
}
}

关于c# - 不断变化的(虚构的)金钱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3285917/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com