Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

main.rs 2.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. use rand::{ distributions:: {Distribution, Standard}, Rng };
  2. //use dict::{ Dict, DictIface };
  3. //use std::collections::HashMap;
  4. #[derive(Debug, Hash)]
  5. enum Cls {
  6. Artificer = 0,
  7. Barbarian,
  8. Bard,
  9. Cleric,
  10. Druid,
  11. Fighter,
  12. Monk,
  13. Paladin,
  14. Ranger,
  15. Rogue,
  16. Sorcerer,
  17. Warlock,
  18. Wizard
  19. }
  20. impl PartialEq for Cls {
  21. fn eq(&self, other: &Self) -> bool {
  22. self == other
  23. }
  24. }
  25. impl Default for Cls {
  26. fn default() -> Self { Cls::Fighter }
  27. }
  28. impl Distribution<Cls> for Standard {
  29. fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Cls {
  30. match rng.gen_range(0..=12) {
  31. 0 => Cls::Artificer,
  32. 1 => Cls::Barbarian,
  33. 2 => Cls::Bard,
  34. 3 => Cls::Cleric,
  35. 4 => Cls::Druid,
  36. 5 => Cls::Fighter,
  37. 6 => Cls::Monk,
  38. 7 => Cls::Paladin,
  39. 8 => Cls::Ranger,
  40. 9 => Cls::Rogue,
  41. 10 => Cls::Sorcerer,
  42. 11 => Cls::Warlock,
  43. 12 => Cls::Wizard,
  44. _ => Cls::Fighter
  45. }
  46. }
  47. }
  48. #[derive(Debug, Default)]
  49. struct Character {
  50. class: Cls,
  51. strength: u32,
  52. dexterity: u32,
  53. constitution: u32,
  54. intelligence: u32,
  55. wisdom: u32,
  56. charisma: u32,
  57. }
  58. impl Character {
  59. fn pick_class(&mut self) {
  60. self.class = rand::random();
  61. }
  62. fn gen_stats(&mut self) {
  63. let associated_stats = vec![
  64. [3,1,2,5,4,0],
  65. [],
  66. [],
  67. [],
  68. [],
  69. [],
  70. [],
  71. [],
  72. [],
  73. [],
  74. [],
  75. [],
  76. []
  77. ];
  78. // println!("{:?}", associated_stats);
  79. self.strength = roll_stat();
  80. self.dexterity = roll_stat();
  81. self.constitution = roll_stat();
  82. self.intelligence = roll_stat();
  83. self.wisdom = roll_stat();
  84. self.charisma = roll_stat();
  85. }
  86. }
  87. fn roll_stat() -> u32 {
  88. let mut rolls = Vec::new();
  89. while rolls.len()<4 {
  90. let roll = rand::thread_rng().gen_range(1..=6);
  91. if roll == 1 {
  92. continue;
  93. }
  94. rolls.push(roll);
  95. }
  96. rolls.sort_by(|a,b| b.cmp(a));
  97. rolls.pop();
  98. rolls.iter().sum()
  99. }
  100. fn main() {
  101. let mut chr: Character = Default::default();
  102. chr.pick_class();
  103. chr.gen_stats();
  104. println!("{:?}", chr);
  105. println!("{:?}", chr.class as u32);
  106. }