Last active
November 12, 2022 12:52
-
-
Save balaam/d54efe4e49f8f981ff4eb632bac0bf88 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Collections.Generic; | |
public class Program | |
{ | |
enum eStat | |
{ | |
HPNow, | |
HPMax, | |
MPNow, | |
MPMax, | |
Strength, | |
Speed, | |
Intelligence | |
} | |
Dictionary<eStat, int> base_stats = new Dictionary<eStat, int> | |
{ | |
{ eStat.HPNow, 300 }, | |
{ eStat.HPMax, 300 }, | |
{ eStat.MPNow, 300 }, | |
{ eStat.MPMax, 300 }, | |
{ eStat.Strength, 10 }, | |
{ eStat.Speed, 10 }, | |
{ eStat.Intelligence, 10 }, | |
}; | |
class Modifier | |
{ | |
public Dictionary<eStat, int> Add { get; set; } | |
public Dictionary<eStat, float> Mult { get; set; } | |
public Modifier() | |
{ | |
Add = new Dictionary<eStat, int>(); | |
Mult = new Dictionary<eStat, float>(); | |
} | |
public int GetAdd(eStat id) | |
{ | |
int modValue = 0; | |
Add.TryGetValue (id, out modValue); | |
return modValue; | |
} | |
public float GetMult(eStat id) | |
{ | |
float mod = 0; | |
Mult.TryGetValue (id, out mod); | |
return mod; | |
} | |
} | |
class Stats | |
{ | |
Dictionary<eStat, int> _base; | |
List<Modifier> _modifiers; | |
public Stats(Dictionary<eStat, int> stats) | |
{ | |
_base = new Dictionary<eStat, int>(stats); | |
_modifiers = new List<Modifier>(); | |
} | |
public int GetBase(eStat id) | |
{ | |
int statValue = 0; | |
_base.TryGetValue (id, out statValue); | |
return statValue; | |
} | |
public void AddModifier(Modifier modifier) | |
{ | |
_modifiers.Add(modifier); | |
} | |
public void RemoveModifier(Modifier modifier) | |
{ | |
_modifiers.Remove(modifier); | |
} | |
public int Get(eStat stat) | |
{ | |
int total = GetBase(stat); | |
float multiplier = 0; | |
foreach(Modifier modifier in _modifiers) | |
{ | |
total += modifier.GetAdd(stat); | |
multiplier += modifier.GetMult(stat); | |
} | |
return (int) (total + (total * multiplier)); | |
} | |
} | |
void PrintStat(eStat id, Stats stats) | |
{ | |
int statBase = stats.GetBase(id); | |
int statModified = stats.Get(id); | |
string str = string.Format("{0}>{1}:{2}", id.ToString(), statBase, statModified); | |
Console.WriteLine(str); | |
} | |
public void Main() | |
{ | |
Console.WriteLine("Hello World"); | |
var stats = new Stats( | |
new Dictionary<eStat, int> | |
{ | |
{ eStat.HPNow, 300 }, | |
{ eStat.HPMax, 300 }, | |
{ eStat.MPNow, 300 }, | |
{ eStat.MPMax, 300 }, | |
{ eStat.Strength, 10 }, | |
{ eStat.Speed, 10 }, | |
{ eStat.Intelligence, 10 }, | |
}); | |
Console.WriteLine(stats.GetBase(eStat.Intelligence)); // 10 | |
Console.WriteLine(stats.GetBase(eStat.HPNow)); // 300 | |
var magic_sword = new Modifier | |
{ | |
Add = new Dictionary<eStat, int>{ { eStat.Strength, 10 } } | |
}; | |
//var magic_hat = new Modifier { Add = new Dictionary<eStat, int>{ { eStat.Strength, 10 } } }; | |
var bravery = new Modifier | |
{ | |
Mult = new Dictionary<eStat, float> | |
{ | |
{ eStat.Strength, 0.1f }, | |
{ eStat.Speed, 0.1f }, | |
{ eStat.Intelligence, 0.1f } | |
} | |
}; | |
var magic_hat = new Modifier | |
{ | |
Add = new Dictionary<eStat, int> | |
{ | |
{ eStat.Strength, 5 } | |
} | |
}; | |
stats.AddModifier(magic_hat); | |
PrintStat(eStat.Strength, stats); // str>10:10 | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment