/
CoinGenerator.cs
124 lines (98 loc) · 3.81 KB
/
CoinGenerator.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
using System;
namespace CoinGenerator
{
public class CoinGenerator
{
public static void Main(string[] args)
{
CoinGenerator gen = new CoinGenerator();
for(int i = 0; i < 20; i++)
Console.WriteLine(gen.GenerateCoins(100));
}
static public Random rand = null;
public double GPPercent { get; set;}
public double SPPercent { get; set;}
public double CPPercent { get; set;}
public double FuzzyPercent { get; set;}
public double GPWeight { get; set;}
public double SPWeight { get; set;}
public double CPWeight { get; set;}
public CoinGenerator()
{
if (rand == null) rand = new Random();
GPPercent = 0.7;
SPPercent = 0.25;
CPPercent = 0.05;
FuzzyPercent = 0.05;
}
public CoinResult GenerateCoins(int worth)
{
double gPercent = GPPercent,
sPercent = SPPercent,
cPercent = CPPercent;
//Console.WriteLine("gPercent: {0:0.00}", gPercent);
//Console.WriteLine("sPercent: {0:0.00}", sPercent);
//Console.WriteLine("cPercent: {0:0.00}", cPercent);
// Generate a number between -FuzzyPercent and FuzzyPercent
gPercent += rand.NextDouble() * 2 * FuzzyPercent - FuzzyPercent;
sPercent += rand.NextDouble() * 2 * FuzzyPercent - FuzzyPercent;
cPercent += rand.NextDouble() * 2 * FuzzyPercent - FuzzyPercent;
//Console.WriteLine("gPercent: {0:0.00}", gPercent);
//Console.WriteLine("sPercent: {0:0.00}", sPercent);
//Console.WriteLine("cPercent: {0:0.00}", cPercent);
double totalPercent = gPercent + sPercent + cPercent;
//Console.WriteLine("total Percent: {0:0.00}", totalPercent);
gPercent /= totalPercent;
sPercent /= totalPercent;
cPercent /= totalPercent;
//Console.WriteLine("gPercent: {0:0.00}", gPercent);
//Console.WriteLine("sPercent: {0:0.00}", sPercent);
//Console.WriteLine("cPercent: {0:0.00}", cPercent);
return new CoinResult((int)(worth * gPercent),
(int)(10 * worth * sPercent),
(int)(100 * worth * cPercent));
}
}
public class CoinResult
{
private double goldWeight = 0.02;
private double silverWeight = 0.02;
private double copperWeight = 0.02;
private int gold;
private int silver;
private int copper;
public int GoldPieces { get {return gold;}}
public int SilverPieces { get {return silver;}}
public int CopperPieces { get {return copper;}}
public double Worth { get {return getWorth();} }
public double Weight { get {return getWeight(); } }
public CoinResult(int gold, int silver, int copper)
{
this.gold = gold;
this.silver = silver;
this.copper = copper;
}
private double getWorth()
{
double worth = 0.0;
worth += 1.0 * gold;
worth += 0.10 * silver;
worth += 0.01 * copper;
return worth;
}
private double getWeight()
{
double weight = 0.0;
weight += (double)gold * goldWeight;
weight += (double)silver * silverWeight;
weight += (double)copper * copperWeight;
return weight;
}
public override string ToString()
{
return String.Format(
"A pile of coins worth {0} GP and weighing {1} lbs. ({2} GP, {3} SP, {4} CP)",
Worth, Weight, GoldPieces, SilverPieces, CopperPieces);
}
}
}