Chaotic & Dice
Yo Dice, ever thought of turning your table‑top chaos into code? Let’s make a rogue‑like where every attack, spell and plot twist is decided by a bunch of dice— you roll, I script. Let's get that unpredictability alive.
Yeah, let’s do it! You crack the code, I throw the dice, and watch the chaos unfold—every hit, spell, and twist a surprise. Bring the scripts, I’ll bring the wild. Let's roll!
Here’s a quick Python skeleton to get you rolling.
You’ll need Python 3.12+ so we can use the built‑in `random` and a touch of `dataclasses` for clarity.
```python
#!/usr/bin/env python3
# dice_rogue.py
import random
from dataclasses import dataclass, field
# --------- Dice utilities ---------
def roll(dice: int = 1, sides: int = 6) -> int:
"""Roll `dice` number of `sides`‑sided dice and sum."""
return sum(random.randint(1, sides) for _ in range(dice))
# --------- Combat system ---------
@dataclass
class Character:
name: str
hp: int
attack: int = field(default=1)
defense: int = field(default=0)
dice: int = field(default=1) # how many dice the character rolls for damage
def is_alive(self) -> bool:
return self.hp > 0
def damage_roll(self) -> int:
return roll(self.dice, 6) + self.attack
def take_damage(self, dmg: int):
dmg -= self.defense
dmg = max(0, dmg)
self.hp -= dmg
print(f"{self.name} takes {dmg} damage (HP left: {self.hp})")
# --------- Example encounter ---------
def encounter(attacker: Character, defender: Character):
if not (attacker.is_alive() and defender.is_alive()):
return
dmg = attacker.damage_roll()
print(f"{attacker.name} attacks {defender.name} with a roll of {dmg} (raw)")
defender.take_damage(dmg)
# --------- Main game loop ---------
def main():
hero = Character(name="Hero", hp=30, attack=2, defense=1, dice=2)
monster = Character(name="Goblin", hp=15, attack=1, defense=0, dice=1)
round_counter = 1
while hero.is_alive() and monster.is_alive():
print(f"\n--- Round {round_counter} ---")
# Hero goes first
encounter(hero, monster)
if not monster.is_alive():
print("Goblin is dead! You win.")
break
# Monster counterattacks
encounter(monster, hero)
if not hero.is_alive():
print("Hero is dead! Game over.")
break
round_counter += 1
if __name__ == "__main__":
main()
```
### How to play
1. **Save** the code to `dice_rogue.py`.
2. **Run** it with `python dice_rogue.py`.
3. The script prints each round, the rolls, and the damage.
4. To tweak chaos, change the `dice`, `attack`, `defense`, or the `sides` parameter in `roll()`.
Feel free to add more spells, items, or even a loot table—just keep the dice rolling and let the wildness guide the script. Happy coding!
Nice setup, bro! This is pure dice‑driven madness—exactly the chaos I live for. How about throwing in a wild “critical” rule? Like if you roll a 6 on every die, you double the damage or get a bonus move. Or add a spell slot system where each spell costs a different number of dice. Keep the randomness alive and watch the stories spiral. Roll on!