JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
Check.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 Valentin Eloy
2// SPDX-License-Identifier: GPL-3.0-or-later
3
4#pragma once
5
10
11#include <span>
12#include <string>
13#include <string_view>
14#include <vector>
15
17
18namespace core {
19
21inline constexpr int D20_FACES = 20;
22
36
44[[nodiscard]] constexpr RollStance rollStance(int advantageSources,
45 int disadvantageSources) noexcept {
46 const bool avantage = advantageSources > 0;
47 const bool desavantage = disadvantageSources > 0;
48 if (avantage == desavantage) {
49 return RollStance::Normal; // aucun des deux, ou les deux : ils s'annulent.
50 }
52}
53
55struct Modifier {
56 std::string source;
57 int value = 0;
58};
59
70 std::vector<int> dice;
72 int keptDie = 0;
74 std::vector<Modifier> modifiers;
76 int total = 0;
78 int target = 0;
81
89 [[nodiscard]] constexpr bool isNaturalTwenty() const noexcept {
90 return keptDie == D20_FACES;
91 }
92
94 [[nodiscard]] constexpr bool isNaturalOne() const noexcept {
95 return keptDie == 1;
96 }
97
99 [[nodiscard]] constexpr bool succeeded() const noexcept {
100 return total >= target;
101 }
102
104 [[nodiscard]] std::string describe() const;
105};
106
119[[nodiscard]] CheckResult rollCheck(int target, std::span<const Modifier> modifiers,
120 RollStance stance, DeterministicRandom& random);
121
123[[nodiscard]] std::string_view rollStanceName(RollStance stance) noexcept;
124
125} // namespace core
Générateur pseudo-aléatoire déterministe, à graine explicite (jamais l'horloge, EX-NFR-002).
Espace de noms du moteur et de la logique de jeu.
Definition Bootstrap.h:9
CheckResult rollCheck(int target, std::span< const Modifier > modifiers, RollStance stance, DeterministicRandom &random)
Lance un d20 contre un seuil.
Definition Check.cpp:10
constexpr int D20_FACES
Nombre de faces du dé de résolution. Le d20 est la mécanique centrale du jeu.
Definition Check.h:21
std::string_view rollStanceName(RollStance stance) noexcept
Nom textuel d'une posture, pour les journaux et la restitution.
Definition Check.cpp:44
constexpr RollStance rollStance(int advantageSources, int disadvantageSources) noexcept
Détermine la posture depuis le nombre de sources de chaque type (EX-DND-002).
Definition Check.h:44
RollStance
Comment le d20 est lancé.
Definition Check.h:31
@ Advantage
Definition Check.h:33
@ Normal
Definition Check.h:32
@ Disadvantage
Definition Check.h:34
Le résultat complet d'un jet, et de quoi le reconstituer (EX-DND-003).
Definition Check.h:68
constexpr bool succeeded() const noexcept
Vrai si le total atteint ou dépasse le seuil.
Definition Check.h:99
RollStance stance
La posture effectivement appliquée, après annulation.
Definition Check.h:80
std::vector< int > dice
Les dés lancés : un, ou deux en cas d'avantage ou de désavantage.
Definition Check.h:70
int target
Le seuil visé (degré de difficulté, ou classe d'armure).
Definition Check.h:78
std::string describe() const
Restitution lisible du jet, modificateurs et origines compris (EX-DND-003).
Definition Check.cpp:57
std::vector< Modifier > modifiers
Les modificateurs appliqués, avec leur origine.
Definition Check.h:74
int keptDie
Le dé retenu — le meilleur, le pire, ou le seul.
Definition Check.h:72
constexpr bool isNaturalOne() const noexcept
Vrai si le dé retenu vaut 1, indépendamment du total.
Definition Check.h:94
constexpr bool isNaturalTwenty() const noexcept
Vrai si le dé retenu vaut 20, indépendamment du total.
Definition Check.h:89
int total
keptDie plus la somme des modificateurs.
Definition Check.h:76
Un modificateur, avec son origine — sans quoi le jet n'est pas restituable.
Definition Check.h:55
std::string source
Definition Check.h:56
int value
Definition Check.h:57