Advertisement
phjoe

Dadu 2

Dec 16th, 2014
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # Dadu 2 (center)
  2. # Joe, 16/12/2014
  3.  
  4. import appuifw as A
  5. import graphics as G
  6.  
  7. A.e32.ao_yield()
  8. import random
  9. rand=random.randrange
  10.  
  11. class Dadu:
  12.  def __init__(self):
  13.   self.w,self.h=G.sysinfo.display_pixels()
  14.   self.img=G.Image.new((self.w,self.h))
  15.   self.main_loop,self.rolling=0,0
  16.   self.nilai,self.stat=[0]*6,'Press 5 to Start/Stop Roll'
  17.   self.dadu=[
  18.   [[0,0,0], # 1
  19.   [0,1,0],
  20.   [0,0,0]],
  21.  
  22.   [[1,0,0], # 2
  23.   [0,0,0],
  24.   [0,0,1]],
  25.  
  26.   [[1,0,0], # 3
  27.   [0,1,0],
  28.   [0,0,1]],
  29.  
  30.   [[1,0,1], # 4
  31.   [0,0,0],
  32.   [1,0,1]],
  33.  
  34.   [[1,0,1], # 5
  35.   [0,1,0],
  36.   [1,0,1]],
  37.  
  38.   [[1,1,1], # 6
  39.   [0,0,0],
  40.   [1,1,1]]
  41.    ]
  42.   A.app.screen='full'
  43.   self.c=A.Canvas(redraw_callback=self._redraw,event_callback=self._event)
  44.   A.app.body=self.c
  45.   A.app.exit_key_handler=self.exit
  46.  
  47.  def exit(self):
  48.   self.main_loop,self.rolling=0,0
  49.  
  50.  def _redraw(self,rect):
  51.   if self.img:
  52.    self.c.blit(self.img)
  53.  
  54.  def _event(self,sc):
  55.   k=sc['scancode']
  56.   if sc['type'] is not A.EEventKey:return
  57.   if k==0x35: # 5 roll
  58.    if not self.rolling:
  59.     self.rolling=1
  60.    else:
  61.     A.e32.ao_sleep(0)
  62.     self.nilai[0]=rand(6)
  63.     self.nilai[1]=rand(6)
  64.     self.nilai[2]=rand(6)
  65.     self.nilai[3]=rand(6)
  66.     self.nilai[4]=rand(6)
  67.     self.nilai[5]=rand(6)
  68.     self.stat='%d (%s)' %(self.get_stat()[1],self.get_stat()[0])
  69.     A.e32.ao_sleep(0)
  70.     self.rolling=0
  71.  
  72.  def get_stat(self):
  73.   sk=[0]*7
  74.   for value in self.nilai:
  75.    sk[value]=sk[value]+1
  76.   if 5 in sk:
  77.    return 'Five of a Kind',30
  78.   elif 4 in sk:
  79.    return 'Four of a Kind',15
  80.   elif (3 in sk) and (2 in sk):
  81.    return 'Full House',12
  82.   elif 3 in sk:
  83.    return 'Three of a Kind', 8
  84.   elif not (2 in sk) and (sk[1]==0 or sk[6]==0):
  85.    return 'Straight',20
  86.   elif sk.count(2)==2:
  87.    return 'Two Pairs',5
  88.   else:
  89.    return 'Garbage',0
  90.  
  91.  def _tsize(self,text,fnt):
  92.   if not isinstance(text,unicode):
  93.    text=unicode(text)
  94.   m=self.img.measure_text(text,font=fnt)[0]
  95.   w,h=(m[2]-m[0],m[3]-m[1])
  96.   return (w,h)
  97.  
  98.  def draw(self,x,y,w,p,dd):
  99.   rx=((3*w)+(3*p))/2
  100.   ry=((3*w)+(3*p))/2
  101.   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),0xcfcfcf,0xffffff)
  102.   for yy in range(3):
  103.    for xx in range(3):
  104.     px=x-rx+(xx*w)+(xx*p)
  105.     py=y-ry+(yy*w)+(yy*p)
  106.     if dd[yy][xx]:
  107.      self.img.ellipse((px,py,px+w,py+w),fill=0xff0000)
  108.  
  109.  def roll(self):
  110.   x,y,w,p=self.w/2,self.h/2,10,1
  111.   rx=((3*w)+(3*p))/2
  112.   ry=((3*w)+(3*p))/2
  113.   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),0xcfcfcf,0xffffff)
  114.   for i in range(len(self.dadu)-1):
  115.    for yy in range(3):
  116.     for xx in range(3):
  117.      px=x-rx+(xx*w)+(xx*p)
  118.      py=y-ry+(yy*w)+(yy*p)
  119.      if self.dadu[i][yy][xx]:
  120.       self.img.ellipse((px,py,px+w,py+w),fill=0xff0000)
  121.    self._redraw(0)
  122.    A.e32.ao_sleep(0.02)
  123.  
  124.  def play(self):
  125.   x,y,w,p=self.w/2,self.h/2,10,1
  126.   rad=min(x,y)*.90
  127.   rx=((3*w)+(3*p))/2
  128.   ry=((3*w)+(3*p))/2
  129.   self.main_loop,self.rolling=1,0
  130.   while self.main_loop:
  131.    self.img.clear(0x2f2f2f)
  132.    self.img.rectangle((x-rad,y-rad,x+rad,y+rad),0x363636,0x696969,width=2)
  133.    txt=(u'%s' %self.stat,u'Rolling...')[self.rolling]
  134.    self.img.text((x-self._tsize(txt,'legend')[0]/2,self.h-10),txt,0xffffff,'legend')
  135.    if not self.rolling:
  136.     for n in range(3):
  137.      dx=x-(rx*2)-3 + (n*(rx*2))+(n*3)
  138.      self.draw(dx,y-ry,w,p,self.dadu[self.nilai[n]])
  139.     for n in range(3):
  140.      dx=x-(rx*2)-3+ (n*(rx*2))+(n*3)
  141.      dy=y+ry+3
  142.      self.draw(dx,dy,w,p,self.dadu[self.nilai[3+n]])
  143.     self._redraw(0)
  144.    else:
  145.     self.roll()
  146.    A.e32.ao_sleep(1E-02)
  147.  
  148. Dadu=Dadu()
  149. Dadu.play()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement