Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- #PyDados v1.2 by freakRHO [email protected]
- import random
- def tirar(caras):
- resul = random.randint(1,caras)
- return resul
- def hacerTirada(cantidad,caras,explotar=False,keep=0):
- d = 0
- tiradas = []
- while d < cantidad:
- resul = tirar(caras)
- tiradas.append(resul)
- if explotar == True:
- if resul == caras:
- cantidad = cantidad+1
- keep = keep+1
- d = d + 1
- return [tiradas,keep]
- def ayuda():
- print('\nSintaxis para tirar dados: <tirada>:<opciones>')
- print('\nTiradas:')
- print('\nTiradas convencionales (d)')
- print('Esta tirada simplemente tira dados, muestra los resultados y la suma.')
- print(' ·Para tirar X dados de Y caras: XdY (Ej: 5d6)')
- print('Opciones posibles: e,r')
- print('\nTiradas con keep (k)')
- print('Esta tirada tira dados y se queda con los mayores.')
- print(' ·Para tirar X dados de 10 caras y sumar los Z mayores (Séptimo Mar): XkZ (Ej: 5k3)')
- print(' ·Para tirar X dados de Y caras y sumar los Z mayores: XkZdY (Ej: 6k3d8)')
- print('Cualquier opción que se le agrege será ignorada')
- print('\nTiradas estilo Starwars (D)')
- print('Esta tirada es una tirada simple con un dado Wild, si el Wild es 6 se tira denuevo y se suma al total (reiterativo), si es 1 se tira denuevo, si es 1 otra vez se considera un botch, sino se lleva el dado menor')
- print(' ·Para tirar X dados de Y caras con un dado Wild: XDY (Ej: 5D6)')
- print('\nOpciones:')
- print(' ·e - Los dados explotan')
- print(' ·r - Los unos se van y se llevan a los menores (WoD)')
- print('\nEjemplos:')
- print(' ·Starwars: XD6')
- print(' ·World of Darkness: Xd10:re')
- print(' ·Séptimo mar: XkZ')
- print(' ·Mutants & Masterminds: 1d20')
- print('Referencias: X=<Cantidad de dados>, Y=<Cantidad de caras>, Z=<Cantidad de dados a guardar>')
- def tiradan(dados,op):
- try:
- plus = 0
- tirada = dados.split('d',2)
- cantidad = int(tirada[0])
- caras = int(tirada[1])
- exp = False
- if 'e' in op:
- exp = True
- [tiradas,keep] = hacerTirada(cantidad,caras,exp,cantidad)
- if 'r' in op:
- if tiradas[0] == 1:
- keep = keep - 2
- for j in range(1,len(tiradas),1):
- if tiradas[j] == 1 and tiradas[j-1] != caras:
- keep = keep - 2
- spec = ''
- except ValueError:
- print('\n\t>>La sintaxis fue incorrecta.')
- return [tiradas,keep,spec]
- def smomar(dados,op):
- try:
- tirada = dados.split('k',2)
- cantidad = int(tirada[0])
- divkeep = tirada[1]
- if 'd' in divkeep:
- divdkeep = divkeep.split('d',2)
- keep = int(divdkeep[0])
- caras = int(divdkeep[1])
- else:
- caras = 10
- keep = int(divkeep)
- [tiradas,keep] = hacerTirada(cantidad,caras,True,keep)
- spec = ''
- except ValueError:
- print('\n\t>>La sintaxis fue incorrecta.')
- return [tiradas,keep,spec]
- def starwars(dados,op):
- try:
- tirada = dados.split('D',2)
- cantidad = int(tirada[0])
- caras = int(tirada[1])
- [tiradas,keep1] = hacerTirada(cantidad-1,caras,False,cantidad-1)
- [wild,keep2] = hacerTirada(1,caras,True,1)
- if wild == [1]:
- if tirar(caras) == 1:
- spec = '>>BOTCH<<'
- subs = 0
- else:
- spec = ''
- subs = 2
- keep = cantidad-subs
- else:
- keep = keep1+keep2
- spec = ''
- for l in wild:
- tiradas.append(l)
- except ValueError:
- print('\n\t>>La sintaxis fue incorrecta.')
- return [tiradas,keep,spec]
- def mostraresul(tiradas,keep,spec):
- print('\n\t>>Tiradas:')
- for dado in tiradas:
- print('\t\t' + str(dado), end='')
- print('\n\t>>Keep:')
- tiradas.sort()
- ini = len(tiradas)-keep
- fini = len(tiradas)
- for l in tiradas[ini:fini]:
- print('\t\t' + str(l), end='')
- resultado = sum(tiradas[int(ini):int(fini)])
- print('\n\t>>Suma:')
- print('\t\t' + str(resultado) + '\n')
- print('\n\t' + spec)
- def main():
- while True:
- print('\nIngrese la tirada de dados o la opción deseada (Exit para salir, Help para revisar las sintaxis de tirada de dados)')
- dados = input()
- if dados.lower().startswith('e') or dados.lower().startswith('c'):
- raise SystemExit
- elif dados.lower().startswith('h') or dados.lower().startswith('a'):
- ayuda()
- elif dados == "1k1d1" or 'D1' in dados:
- print('\nBuen intento.')
- else:
- if ':' in dados:
- dsplit = dados.split(':',2)
- dados = dsplit[0]
- op = dsplit[1]
- else:
- op = ''
- if 'k' in dados:
- [tiradas,keep,spec] = smomar(dados,op)
- elif 'd' in dados:
- [tiradas,keep,spec] = tiradan(dados,op)
- elif 'D' in dados:
- [tiradas,keep,spec] = starwars(dados,op)
- #Mostrar resultados
- mostraresul(tiradas,keep,spec)
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement