Advertisement
freakrho

GUI Dice Roller PyDice

Oct 27th, 2011
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.79 KB | None | 0 0
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. #PyDice by freakRHO freakrho@gmail.com
  4. v = 'v1.4.2'
  5.  
  6. from tkinter import *
  7. from tkinter import ttk
  8. import random
  9. import os
  10. dir = os.path.dirname(__file__)
  11.  
  12.  
  13. console = False
  14.  
  15. def tirar(caras):
  16.     resul = random.randint(1,caras)
  17.     return resul
  18.  
  19. def hacerTirada(cantidad,caras):
  20.     tiradas = []
  21.     for d in range(0,cantidad,1):
  22.         tiradas.append(tirar(caras))
  23.     return tiradas
  24.  
  25. def tiradan(dados,op):
  26.     try:
  27.         plus = 0
  28.         tirada = dados.split('d',2)
  29.         cantidad = int(tirada[0])
  30.         caras = int(tirada[1])
  31.  
  32.         tiradas = hacerTirada(cantidad,caras)
  33.         keep = cantidad
  34.         keepd = []
  35.         if 'e' in op:
  36.             exp = tiradas.count(caras)
  37.             i = 0
  38.             while i < exp:
  39.                 [tir] = hacerTirada(1,caras)
  40.                 if tir == caras:
  41.                     exp = exp + 1
  42.                 keepd.append(tir)
  43.                 print(i)
  44.                 i = i + 1
  45.         if 'r' in op:
  46.             subs = tiradas.count(1)
  47.             keep = cantidad-subs*2
  48.         spec = ''
  49.     except ValueError:
  50.         print('\n\t>>La sintaxis fue incorrecta.')
  51.     return [tiradas,keepd,keep,spec,'std']
  52.  
  53. def smomar(dados,op):
  54.     try:
  55.         tirada = dados.split('k',2)
  56.         cantidad = int(tirada[0])
  57.         divkeep = tirada[1]
  58.         if 'd' in divkeep:
  59.             divdkeep = divkeep.split('d',2)
  60.             keep = int(divdkeep[0])
  61.             caras = int(divdkeep[1])
  62.         else:
  63.             caras = 10
  64.             keep = int(divkeep)
  65.         tiradas = hacerTirada(cantidad,caras)
  66.         spec = ''
  67.        
  68.         keepd = []
  69.         exp = tiradas.count(10)
  70.         if exp > keep:
  71.             exp = keep
  72.         i = 0
  73.         while i < exp:
  74.             [tir] = hacerTirada(1,caras)
  75.             if tir == caras:
  76.                 exp = exp + 1
  77.             keepd.append(tir)
  78.             i = i + 1
  79.  
  80.     except ValueError:
  81.         print('\n\t>>La sintaxis fue incorrecta.')
  82.     return [tiradas,keepd,keep,spec,'7s']
  83.  
  84. def starwars(dados,op):
  85.     try:
  86.         tirada = dados.split('D',2)
  87.         cantidad = int(tirada[0])
  88.         caras = int(tirada[1])
  89.         tiradas = hacerTirada(cantidad-1,caras)
  90.         wild = hacerTirada(1,caras)
  91.         if wild == [1]:
  92.             wild2 = tirar(caras)
  93.             if wild2 == 1:
  94.                 spec = '>>BOTCH<<'
  95.             else:
  96.                 spec = ''
  97.             keep = cantidad-2
  98.             wild.append(wild2)
  99.         else:
  100.             keep = cantidad
  101.             while wild[len(wild)-1] == caras:
  102.                 wild.append(tirar(caras))
  103.                 keep = keep+1
  104.             spec = ''
  105.     except ValueError:
  106.         print('\n\t>>La sintaxis fue incorrecta.')
  107.     return [tiradas,wild,keep,spec,'sw']
  108.  
  109. def mostraresul(tiradas,keepd,keep,spec,mod):
  110.     print(tiradas)
  111.     print(keepd)
  112.     print(keep)
  113.     print(spec)
  114.     print(mod)
  115.     if tiradas == '':
  116.         tit1 = ''
  117.         strtira = ''
  118.         tit2 = ''
  119.         strkeep = ''
  120.         tit3 = ''
  121.         titres = ''
  122.     else:
  123.         tit1 = '>Tiradas:'
  124.         strtira = ''
  125.         strkeep = ''
  126.         ini = len(tiradas)-keep
  127.         fini = len(tiradas)
  128.         for dado in tiradas:
  129.             strtira = strtira + '\t' + str(dado)
  130.         tiradas.sort()
  131.         if mod == 'sw':
  132.             tit2 = '\n>Wild:'
  133.             for f in keepd:
  134.                 tiradas.append(f)
  135.                 strkeep = strkeep + '\t' + str(f)
  136.             if keepd[0] == 1:
  137.                 if keepd[1] == 1:
  138.                     ini = 0
  139.                     fini = 0
  140.                 else:
  141.                     ini = len(tiradas)-len(keepd)-keep
  142.                     fini = len(tiradas)-len(keepd)
  143.             else:
  144.                 ini = len(tiradas)-keep
  145.                 fini = len(tiradas)
  146.             resultado = sum(tiradas[int(ini):int(fini)])
  147.  
  148.            
  149.             print(tiradas)
  150.         else:
  151.             tit2 = '\n>Keep:'
  152.             for l in tiradas[ini:fini]:
  153.                 strkeep = strkeep + '\t' + str(l)
  154.             for k in keepd:
  155.                 strkeep = strkeep + '\t' + str(k)
  156.             resultado = sum(tiradas[int(ini):int(fini)]+keepd)
  157.         tit3 = '\n>Suma:'
  158.         titres = '\t' + str(resultado)
  159.     titspec = '\n\t' + spec
  160.     contenido = tit1 + strtira + tit2 + strkeep + tit3 + titres +  titspec
  161.     return contenido
  162.  
  163. def princ(dados):
  164.     if dados.lower().startswith('e') or dados.lower().startswith('c'):
  165.         raise SystemExit
  166.     elif dados.lower().startswith('h') or dados.lower().startswith('a'):
  167.         ayudatxt = os.path.join(dir, 'help.txt')
  168.         return ['','',open(ayudatxt).read()]
  169.     elif "k1d1" in dados or 'D1' in dados:
  170.         return ['','','\nBuen intento.']
  171.     else:
  172.         if ':' in dados:
  173.             dsplit = dados.split(':',2)
  174.             dados = dsplit[0]
  175.             op = dsplit[1]
  176.            
  177.         else:
  178.             op = ''
  179.         if 'k' in dados:
  180.             return smomar(dados,op)
  181.         elif 'd' in dados:
  182.             return tiradan(dados,op)
  183.         elif 'D' in dados:
  184.             return starwars(dados,op)
  185.        
  186. def calculate(*args):
  187.     [tiradas,keepd,keep,spec,mod] = princ(entrada.get())
  188.     salida.set(mostraresul(tiradas,keepd,keep,spec,mod))
  189.    
  190. def main():
  191.     while True:
  192.         print('\nPyDice ' + v)
  193.         print('\nIngrese la tirada de dados o la opción deseada (Exit para salir, Help para revisar las sintaxis de tirada de dados)')
  194.         dados = input()
  195.         [tiradas,keepd,keep,spec,mod] = princ(dados)
  196.         print(mostraresul(tiradas,keepd,keep,spec,mod))
  197.        
  198. def ayuda():
  199.     ayudatxt = os.path.join(dir, 'help.txt')
  200.     salida.set(open(ayudatxt).read())
  201.  
  202. if console == True:
  203.     if __name__ == '__main__':
  204.         main()
  205. else:
  206.     root = Tk()
  207.     root.title("PyDice " + v)
  208.  
  209.     mainframe = ttk.Frame(root, padding="3 3 3 3")
  210.     mainframe.grid(column=0, row=0, sticky='nsew')
  211.     mainframe.columnconfigure(0, weight=1)
  212.     mainframe.rowconfigure(0, weight=1)
  213.  
  214.     entrada = StringVar()
  215.     salida = StringVar()
  216.    
  217.     #Salida
  218.     salframe = ttk.Frame(mainframe, borderwidth=2, relief='sunken')
  219.     salframe.grid(column=0, row=1, columnspan=5, sticky='nsew')
  220.     ttk.Label(salframe, textvariable=salida).grid(sticky='we')
  221.    
  222.     #Entrada
  223.     tirada_entry = ttk.Entry(mainframe, textvariable=entrada)
  224.     tirada_entry.grid(column=2, row=0, sticky='WE')
  225.    
  226.     photo = os.path.join(dir, 'pydice_32.gif')
  227.     logo = PhotoImage(file=photo)
  228.     imagen = ttk.Label(mainframe, image=logo)
  229.     imagen.grid(column=0,row=0, sticky='w')
  230.    
  231.     #Botones
  232.     ttk.Button(mainframe, text="Tirar dados", command=calculate).grid(column=3, row=0)
  233.     ttk.Button(mainframe, text="Ayuda", command=ayuda).grid(column=4, row=0, sticky='e')
  234.    
  235.     ttk.Label(mainframe, text="Tirada:").grid(column=1,row=0, sticky='w')
  236.  
  237.     for child in mainframe.winfo_children(): child.grid_configure(padx=2, pady=2)
  238.  
  239.     tirada_entry.focus()
  240.     root.bind('<Return>', calculate)
  241.  
  242.     root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement