Created
March 14, 2015 23:48
-
-
Save evertheylen/c80f9ff5065326fa3b77 to your computer and use it in GitHub Desktop.
Opdrachten generator
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# ----[ 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