Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- #PyDice by freakRHO freakrho@gmail.com
- v = 'v1.4.2'
- from tkinter import *
- from tkinter import ttk
- import random
- import os
- dir = os.path.dirname(__file__)
- console = False
- def tirar(caras):
- resul = random.randint(1,caras)
- return resul
- def hacerTirada(cantidad,caras):
- tiradas = []
- for d in range(0,cantidad,1):
- tiradas.append(tirar(caras))
- return tiradas
- def tiradan(dados,op):
- try:
- plus = 0
- tirada = dados.split('d',2)
- cantidad = int(tirada[0])
- caras = int(tirada[1])
- tiradas = hacerTirada(cantidad,caras)
- keep = cantidad
- keepd = []
- if 'e' in op:
- exp = tiradas.count(caras)
- i = 0
- while i < exp:
- [tir] = hacerTirada(1,caras)
- if tir == caras:
- exp = exp + 1
- keepd.append(tir)
- print(i)
- i = i + 1
- if 'r' in op:
- subs = tiradas.count(1)
- keep = cantidad-subs*2
- spec = ''
- except ValueError:
- print('\n\t>>La sintaxis fue incorrecta.')
- return [tiradas,keepd,keep,spec,'std']
- 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 = hacerTirada(cantidad,caras)
- spec = ''
- keepd = []
- exp = tiradas.count(10)
- if exp > keep:
- exp = keep
- i = 0
- while i < exp:
- [tir] = hacerTirada(1,caras)
- if tir == caras:
- exp = exp + 1
- keepd.append(tir)
- i = i + 1
- except ValueError:
- print('\n\t>>La sintaxis fue incorrecta.')
- return [tiradas,keepd,keep,spec,'7s']
- def starwars(dados,op):
- try:
- tirada = dados.split('D',2)
- cantidad = int(tirada[0])
- caras = int(tirada[1])
- tiradas = hacerTirada(cantidad-1,caras)
- wild = hacerTirada(1,caras)
- if wild == [1]:
- wild2 = tirar(caras)
- if wild2 == 1:
- spec = '>>BOTCH<<'
- else:
- spec = ''
- keep = cantidad-2
- wild.append(wild2)
- else:
- keep = cantidad
- while wild[len(wild)-1] == caras:
- wild.append(tirar(caras))
- keep = keep+1
- spec = ''
- except ValueError:
- print('\n\t>>La sintaxis fue incorrecta.')
- return [tiradas,wild,keep,spec,'sw']
- def mostraresul(tiradas,keepd,keep,spec,mod):
- print(tiradas)
- print(keepd)
- print(keep)
- print(spec)
- print(mod)
- if tiradas == '':
- tit1 = ''
- strtira = ''
- tit2 = ''
- strkeep = ''
- tit3 = ''
- titres = ''
- else:
- tit1 = '>Tiradas:'
- strtira = ''
- strkeep = ''
- ini = len(tiradas)-keep
- fini = len(tiradas)
- for dado in tiradas:
- strtira = strtira + '\t' + str(dado)
- tiradas.sort()
- if mod == 'sw':
- tit2 = '\n>Wild:'
- for f in keepd:
- tiradas.append(f)
- strkeep = strkeep + '\t' + str(f)
- if keepd[0] == 1:
- if keepd[1] == 1:
- ini = 0
- fini = 0
- else:
- ini = len(tiradas)-len(keepd)-keep
- fini = len(tiradas)-len(keepd)
- else:
- ini = len(tiradas)-keep
- fini = len(tiradas)
- resultado = sum(tiradas[int(ini):int(fini)])
- print(tiradas)
- else:
- tit2 = '\n>Keep:'
- for l in tiradas[ini:fini]:
- strkeep = strkeep + '\t' + str(l)
- for k in keepd:
- strkeep = strkeep + '\t' + str(k)
- resultado = sum(tiradas[int(ini):int(fini)]+keepd)
- tit3 = '\n>Suma:'
- titres = '\t' + str(resultado)
- titspec = '\n\t' + spec
- contenido = tit1 + strtira + tit2 + strkeep + tit3 + titres + titspec
- return contenido
- def princ(dados):
- if dados.lower().startswith('e') or dados.lower().startswith('c'):
- raise SystemExit
- elif dados.lower().startswith('h') or dados.lower().startswith('a'):
- ayudatxt = os.path.join(dir, 'help.txt')
- return ['','',open(ayudatxt).read()]
- elif "k1d1" in dados or 'D1' in dados:
- return ['','','\nBuen intento.']
- else:
- if ':' in dados:
- dsplit = dados.split(':',2)
- dados = dsplit[0]
- op = dsplit[1]
- else:
- op = ''
- if 'k' in dados:
- return smomar(dados,op)
- elif 'd' in dados:
- return tiradan(dados,op)
- elif 'D' in dados:
- return starwars(dados,op)
- def calculate(*args):
- [tiradas,keepd,keep,spec,mod] = princ(entrada.get())
- salida.set(mostraresul(tiradas,keepd,keep,spec,mod))
- def main():
- while True:
- print('\nPyDice ' + v)
- 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()
- [tiradas,keepd,keep,spec,mod] = princ(dados)
- print(mostraresul(tiradas,keepd,keep,spec,mod))
- def ayuda():
- ayudatxt = os.path.join(dir, 'help.txt')
- salida.set(open(ayudatxt).read())
- if console == True:
- if __name__ == '__main__':
- main()
- else:
- root = Tk()
- root.title("PyDice " + v)
- mainframe = ttk.Frame(root, padding="3 3 3 3")
- mainframe.grid(column=0, row=0, sticky='nsew')
- mainframe.columnconfigure(0, weight=1)
- mainframe.rowconfigure(0, weight=1)
- entrada = StringVar()
- salida = StringVar()
- #Salida
- salframe = ttk.Frame(mainframe, borderwidth=2, relief='sunken')
- salframe.grid(column=0, row=1, columnspan=5, sticky='nsew')
- ttk.Label(salframe, textvariable=salida).grid(sticky='we')
- #Entrada
- tirada_entry = ttk.Entry(mainframe, textvariable=entrada)
- tirada_entry.grid(column=2, row=0, sticky='WE')
- photo = os.path.join(dir, 'pydice_32.gif')
- logo = PhotoImage(file=photo)
- imagen = ttk.Label(mainframe, image=logo)
- imagen.grid(column=0,row=0, sticky='w')
- #Botones
- ttk.Button(mainframe, text="Tirar dados", command=calculate).grid(column=3, row=0)
- ttk.Button(mainframe, text="Ayuda", command=ayuda).grid(column=4, row=0, sticky='e')
- ttk.Label(mainframe, text="Tirada:").grid(column=1,row=0, sticky='w')
- for child in mainframe.winfo_children(): child.grid_configure(padx=2, pady=2)
- tirada_entry.focus()
- root.bind('<Return>', calculate)
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement