Skip to content

Instantly share code, notes, and snippets.

@evertheylen
Created March 14, 2015 23:48
Show Gist options
  • Save evertheylen/c80f9ff5065326fa3b77 to your computer and use it in GitHub Desktop.
Save evertheylen/c80f9ff5065326fa3b77 to your computer and use it in GitHub Desktop.
Opdrachten generator
# ----[ Settings ]------------
x = 500
coca_eur = 100
xtc_eur = 650
wiet_eur = 300
startgeld = 200
_leden = ["Daan", "Jeppe", "Siemen", "Fried", "Jade",
"Zoran", "Yara", "Eva", "Marie-Paulien", "Roisin",
"Josephine", "Elena", "Lotte", "Nette", "Yu", "Ine"
]
_leiders = {"Pepe": "dealer",
"Juan": "dealer",
"Salvatore": "junkie",
"Giovanni": "junkie",
"Bernardo": "flik"
}
# ----------------------------
header = """
<html>
<header>
<style>
body {{
font-family: arial;
}}
div {{
margin: 20px;
}}
li {{
padding-top: 10px;
}}
div {{
border: 2px solid black;
padding: 10px;
}}
@media print
{{
div {{
page-break-inside: avoid;
}}
}}
</style>
</header>
<body>
waarde cocaine = {0} EUR<br/>
waarde xtc = {1} EUR<br/>
waarde wiet = {2} EUR<br/>
""".format(coca_eur, xtc_eur, wiet_eur)
footer = """
</body>
</html>
"""
import random
from copy import copy
def pick(d):
return d[random.choice(list(d.keys()))]
def completeAllTasks(leden):
for l in leden:
l.tasks[-1].complete()
class Drugs:
def __init__(self, coca, xtc, wiet):
self.coca = coca
self.xtc = xtc
self.wiet = wiet
def __add__(self, other):
return Drugs(self.coca + other.coca, self.xtc + other.xtc, self.wiet + other.wiet)
def __iadd__(self, other):
self.coca += other.coca
self.xtc += other.xtc
self.wiet += other.wiet
return self
def __str__(self):
return "{s.coca} cocaine, {s.xtc} xtc en {s.wiet} wiet (waarde: {0})".format(DrugsToEUR(self), s=self)
class Task:
def complete():
pass
# TODO beloning Transfer?
class Transfer(Task):
def __init__(self, uitvoerder, van, naar, drugs):
self.uitvoerder = uitvoerder
self.van = van
self.naar = naar
self.drugs = drugs
def complete(self):
self.naar.geld += x
def __str__(self):
return "Vervoer van drugs.<br/>Wat: {s.drugs} (of vergelijkbaar)<br/>Van: {s.van.naam}<br/>Naar: {s.naar.naam}<br/>Beloning: {0}".format(x, s=self)
def generateTransfer(amount, l):
#print(leiders)
van = pick(leiders)
copyleiders = copy(leiders)
copyleiders.pop(van.naam)
naar = pick(copyleiders)
t = Transfer(l, van, naar, EURtoDrugs(amount))
l.tasks.append(t)
return t
class Kill(Task):
def __init__(self, uitvoerder, wie):
self.uitvoerder = uitvoerder
self.wie = wie # flik of lid
def __str__(self):
global x
return "Vermoord iemand.<br/>Wie: {s.wie.naam}<br/>Laat checken door leider.<br/>Beloning: {0}".format(3*x, s=self)
def complete(self):
global x
self.uitvoerder.geld += 3*x
self.wie.geld /= 2 # definition of kill
class Police(Task):
def __init__(self, uitvoerder, wie, hoeveel):
#print(uitvoerder)
self.uitvoerder = uitvoerder
self.wie = wie # flik
self.hoeveel = hoeveel
def complete(self):
drugs = EURtoDrugs(x*2 + self.hoeveel)
self.uitvoerder.drugs += drugs
def __str__(self):
global x
return "Laat je oppakken door de politie met {s.hoeveel} EUR op zak.<br/>Wie: {s.wie.naam}<br/>Beloning: {0}".format(EURtoDrugs(x*2 + self.hoeveel), s=self)
def DrugsToEUR(d):
return d.coca*coca_eur + d.xtc*xtc_eur + d.wiet*wiet_eur
def EURtoDrugs(money):
wiet = money//wiet_eur
money -= wiet*wiet_eur
xtc = money//xtc_eur
money -= xtc*xtc_eur
coca = money//coca_eur
money -= coca*coca_eur
return Drugs(coca, xtc, wiet)
class Persoon:
def __init__(self, naam, geld=startgeld, coca=0, xtc=0, wiet=0):
self.naam = naam
self.geld = geld
self.tasks = []
self.drugs = Drugs(coca, xtc, wiet)
def __repr__(self):
return "{}: {}EUR [{}]<br/>".format(self.naam, self.geld, self.drugs)
class Leider(Persoon):
def __init__(self, rol, **kwargs):
self.rol = rol
Persoon.__init__(self, **kwargs)
leden = []
for naam in _leden:
leden.append(Persoon(naam))
leiders = {}
for naam in _leiders:
leiders[naam] = Leider(_leiders[naam], naam=naam, geld=float('inf'))
print(leden.__repr__(), '<br/>', leiders.__repr__())
# actual generation
# first task (transfers)
for l in leden:
generateTransfer(random.randrange(10,20)*50, l)
completeAllTasks(leden)
x+=100
# second task (mostly transfers, some Police)
for l in leden:
r = random.random()
task = Task()
if r<0.7:
# transfer
generateTransfer(random.randrange(10,20)*50, l)
else:
# police
amount = random.randrange(15,25)*50
task = Police(l, pick(leiders), amount)
l.tasks.append(task)
completeAllTasks(leden)
x+=100
# third task (transfers, polices, kills)
for l in leden:
r = random.random()
task = Task()
if r<0.5:
# transfer
generateTransfer(random.randrange(15,25)*50, l)
elif 0.5<r<0.8:
# police
amount = random.randrange(15,25)*50
cleiders = [leider for leider in leiders.values() if leider.rol == "flik"]
task = Police(l, random.choice(cleiders), amount)
l.tasks.append(task)
else:
# kill
ledenc = copy(leden)
ledenc.remove(l)
wie = random.choice(ledenc) # ook flik?
task = Kill(l, wie)
l.tasks.append(task)
completeAllTasks(leden)
f = open("resultaat.html", "w")
f.write(header)
for l in leden:
f.write("<div>")
f.write(str(l))
f.write("<ul>")
for t in l.tasks:
f.write("<li>" + str(t) + "</li>")
f.write("</ul>")
f.write("</div>")
f.write(footer)
f.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment