Skip to content

Instantly share code, notes, and snippets.

@balaam
Last active November 12, 2022 12:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save balaam/d54efe4e49f8f981ff4eb632bac0bf88 to your computer and use it in GitHub Desktop.
Save balaam/d54efe4e49f8f981ff4eb632bac0bf88 to your computer and use it in GitHub Desktop.
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