Advertisement
phjoe

Dadu 4

Dec 16th, 2014
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # Dadu 4
  2. # Joe, 17/12/2014
  3. #
  4. # key 1-6 : Memilih dadu yg mau diroll (bisa lebih dari 1)
  5. # key 0 : Roll....
  6. # rule: uang pertama 100, jika dapat garbage dikurangi 50, jika habis atau malah minus, kamu kalah :D
  7.  
  8. import appuifw as A
  9. import graphics as G
  10.  
  11. A.e32.ao_yield()
  12. import random
  13. rand=random.randrange
  14.  
  15. class Dadu:
  16.  def __init__(self):
  17.   self.w,self.h=G.sysinfo.display_pixels()
  18.   self.img=G.Image.new((self.w,self.h))
  19.   self.main_loop=0
  20.   self.rolling=0
  21.   self.nilai=range(6)
  22.   self.stat='Press 0 to Start/Stop Roll'
  23.   self.tmp,self.money=[],100
  24.  
  25.   self.dadu=[
  26.   [[0,0,0], # 1
  27.   [0,1,0],
  28.   [0,0,0]],
  29.  
  30.   [[1,0,0], # 2
  31.   [0,0,0],
  32.   [0,0,1]],
  33.  
  34.   [[1,0,0], # 3
  35.   [0,1,0],
  36.   [0,0,1]],
  37.  
  38.   [[1,0,1], # 4
  39.   [0,0,0],
  40.   [1,0,1]],
  41.  
  42.   [[1,0,1], # 5
  43.   [0,1,0],
  44.   [1,0,1]],
  45.  
  46.   [[1,1,1], # 6
  47.   [0,0,0],
  48.   [1,1,1]]
  49.    ]
  50.   A.app.screen='full'
  51.   self.c=A.Canvas(redraw_callback=self._redraw,event_callback=self._event)
  52.   A.app.body=self.c
  53.   A.app.exit_key_handler=self.exit
  54.  
  55.  def exit(self):
  56.   self.main_loop,self.rolling=0,0
  57.  
  58.  def _redraw(self,rect):
  59.   if self.img:
  60.    self.c.blit(self.img)
  61.  
  62.  def _event(self,sc):
  63.   k=sc['scancode']
  64.   if sc['type'] is not A.EEventKey:return
  65.   keys=[0x31,0x32,0x33,0x34,0x35,0x36]
  66.   if not self.rolling:
  67.    for i in range(len(keys)):
  68.     if k==keys[i]:
  69.      if not i in self.tmp:
  70.       self.tmp.append(i)
  71.      else:
  72.       self.tmp.remove(i)
  73.   if k==0x30: # roll
  74.    if not self.rolling:
  75.     if self.money<=0:self.money=100
  76.     self.rolling=1
  77.    else:
  78.     A.e32.ao_sleep(0)
  79.     if len(self.tmp)>0:
  80.      for i in self.tmp:
  81.       self.nilai[i]=rand(6)
  82.     else:
  83.      self.nilai=[rand(6) for _ in self.nilai]
  84.     self.stat='%d (%s)' %(self.get_stat()[1],self.get_stat()[0])
  85.     if self.get_stat()[1]>0:self.money+=self.get_stat()[1]
  86.     else:self.money-=50
  87.     A.e32.ao_sleep(0)
  88.     self.tmp=[]
  89.     self.rolling=0
  90.  
  91.  def get_stat(self):
  92.   sk=[0]*7
  93.   for value in self.nilai:
  94.    sk[value]=sk[value]+1
  95.   if 5 in sk:
  96.    return 'Five of a Kind',30
  97.   elif 4 in sk:
  98.    return 'Four of a Kind',15
  99.   elif (3 in sk) and (2 in sk):
  100.    return 'Full House',12
  101.   elif 3 in sk:
  102.    return 'Three of a Kind', 8
  103.   elif not (2 in sk) and (sk[1]==0 or sk[6]==0):
  104.    return 'Straight',20
  105.   elif sk.count(2)==2:
  106.    return 'Two Pairs',5
  107.   else:
  108.    return 'Garbage',0
  109.  
  110.  def _tsize(self,text,fnt):
  111.   if not isinstance(text,unicode):
  112.    text=unicode(text)
  113.   m=self.img.measure_text(text,font=fnt)[0]
  114.   w,h=(m[2]-m[0],m[3]-m[1])
  115.   return (w,h)
  116.  
  117.  def draw(self,x,y,w,p,dd,n):
  118.   rx=((3*w)+(3*p))/2
  119.   ry=((3*w)+(3*p))/2
  120.   sx,sy=11,15
  121.   cp=[(3,0),(4,1),(4,6),(4,3),(5,3),(6,4),(6,6),(6,4),(7,4),(8,5),(8,6),(8,5),(9,5),(10,6),(10,11),(9,12),(9,13),(8,14),(4,14),(3,13),(3,12),(2,12),(2,11),(1,10),(1,9),(0,8),(0,7),(0,6),(1,6),(2,7),(2,1)]
  122.   self.img.polygon((x-rx,y-ry+2,x-rx+2,y-ry,x+rx-2,y-ry,x+rx,y-ry+2,x+rx,y+ry-2,x+rx-2,y+ry,x-rx+2,y+ry,x-rx,y+ry-2),0xdadada,(0xffffff,0xfff331)[n in self.tmp])
  123.   for yy in range(3):
  124.    for xx in range(3):
  125.     px=x-rx+(xx*w)+(xx*p)
  126.     py=y-ry+(yy*w)+(yy*p)
  127.     if dd[yy][xx]:
  128.      self.img.ellipse((px,py,px+w,py+w),fill=0xff0000)
  129.   if n in self.tmp:
  130.    self.img.polygon([(x-2+cpx,y+cpy) for cpx,cpy in cp],0,0xffffff)
  131.  
  132.  def roll(self):
  133.   x,y,w,p=self.w/2,self.h/2,10,1
  134.   rx=((3*w)+(3*p))/2
  135.   ry=((3*w)+(3*p))/2
  136.   self.img.polygon((x-rx,y-ry+2,x-rx+2,y-ry,x+rx-2,y-ry,x+rx,y-ry+2,x+rx,y+ry-2,x+rx-2,y+ry,x-rx+2,y+ry,x-rx,y+ry-2),0xdadada,0xffffff)
  137.   for i in range(len(self.dadu)-1):
  138.    for yy in range(3):
  139.     for xx in range(3):
  140.      px=x-rx+(xx*w)+(xx*p)
  141.      py=y-ry+(yy*w)+(yy*p)
  142.      if self.dadu[i][yy][xx]:
  143.       self.img.ellipse((px,py,px+w,py+w),fill=0xff0000)
  144.    self._redraw(0)
  145.    A.e32.ao_sleep(0.02)
  146.  
  147.  def play(self):
  148.   x,y,w,p=self.w/2,self.h/2,10,1
  149.   rad=min(x,y)*.86
  150.   rx=((3*w)+(3*p))/2
  151.   ry=((3*w)+(3*p))/2
  152.   self.main_loop,self.rolling=1,0
  153.   while self.main_loop:
  154.    self.img.clear(0x5963)
  155.    self.img.rectangle((x-rad,y-rad,x+rad,y+rad),0x8a94,0x7984,width=2)
  156.    txt=(u'%s' %self.stat,u'Rolling All')[self.rolling]
  157.    if 0<len(self.tmp)<6:
  158.     self.tmp.sort()
  159.     txt=(u'%s' %self.stat,u'Roll Selected: %s' %(','.join([str(i+1) for i in self.tmp])))[self.rolling]
  160.    self.img.text((x-self._tsize(txt,'legend')[0]/2,self.h-10),txt,0xffffff,'legend')
  161.    
  162.    txt=(u'You Lost !!',u'Money: $ %d' %self.money)[self.money>0]
  163.    self.img.text((x-self._tsize(txt,'legend')[0]/2,14),txt,0xffffff,'legend')
  164.    if not self.rolling:
  165.     for n in range(3):
  166.      dx=x-(rx*2)-3 + (n*(rx*2))+(n*3)
  167.      self.draw(dx,y-ry,w,p,self.dadu[self.nilai[n]],n)
  168.     for n in range(3):
  169.      dx=x-(rx*2)-3+ (n*(rx*2))+(n*3)
  170.      dy=y+ry+3
  171.      self.draw(dx,dy,w,p,self.dadu[self.nilai[3+n]],3+n)
  172.     self._redraw(0)
  173.    else:
  174.     self.roll()
  175.    A.e32.ao_sleep(0.01)
  176.  
  177. Dadu=Dadu()
  178. Dadu.play()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement