Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Dadu 4
- # Joe, 17/12/2014
- #
- # key 1-6 : Memilih dadu yg mau diroll (bisa lebih dari 1)
- # key 0 : Roll....
- # rule: uang pertama 100, jika dapat garbage dikurangi 50, jika habis atau malah minus, kamu kalah :D
- import appuifw as A
- import graphics as G
- A.e32.ao_yield()
- import random
- rand=random.randrange
- class Dadu:
- def __init__(self):
- self.w,self.h=G.sysinfo.display_pixels()
- self.img=G.Image.new((self.w,self.h))
- self.main_loop=0
- self.rolling=0
- self.nilai=range(6)
- self.stat='Press 0 to Start/Stop Roll'
- self.tmp,self.money=[],100
- self.dadu=[
- [[0,0,0], # 1
- [0,1,0],
- [0,0,0]],
- [[1,0,0], # 2
- [0,0,0],
- [0,0,1]],
- [[1,0,0], # 3
- [0,1,0],
- [0,0,1]],
- [[1,0,1], # 4
- [0,0,0],
- [1,0,1]],
- [[1,0,1], # 5
- [0,1,0],
- [1,0,1]],
- [[1,1,1], # 6
- [0,0,0],
- [1,1,1]]
- ]
- A.app.screen='full'
- self.c=A.Canvas(redraw_callback=self._redraw,event_callback=self._event)
- A.app.body=self.c
- A.app.exit_key_handler=self.exit
- def exit(self):
- self.main_loop,self.rolling=0,0
- def _redraw(self,rect):
- if self.img:
- self.c.blit(self.img)
- def _event(self,sc):
- k=sc['scancode']
- if sc['type'] is not A.EEventKey:return
- keys=[0x31,0x32,0x33,0x34,0x35,0x36]
- if not self.rolling:
- for i in range(len(keys)):
- if k==keys[i]:
- if not i in self.tmp:
- self.tmp.append(i)
- else:
- self.tmp.remove(i)
- if k==0x30: # roll
- if not self.rolling:
- if self.money<=0:self.money=100
- self.rolling=1
- else:
- A.e32.ao_sleep(0)
- if len(self.tmp)>0:
- for i in self.tmp:
- self.nilai[i]=rand(6)
- else:
- self.nilai=[rand(6) for _ in self.nilai]
- self.stat='%d (%s)' %(self.get_stat()[1],self.get_stat()[0])
- if self.get_stat()[1]>0:self.money+=self.get_stat()[1]
- else:self.money-=50
- A.e32.ao_sleep(0)
- self.tmp=[]
- self.rolling=0
- def get_stat(self):
- sk=[0]*7
- for value in self.nilai:
- sk[value]=sk[value]+1
- if 5 in sk:
- return 'Five of a Kind',30
- elif 4 in sk:
- return 'Four of a Kind',15
- elif (3 in sk) and (2 in sk):
- return 'Full House',12
- elif 3 in sk:
- return 'Three of a Kind', 8
- elif not (2 in sk) and (sk[1]==0 or sk[6]==0):
- return 'Straight',20
- elif sk.count(2)==2:
- return 'Two Pairs',5
- else:
- return 'Garbage',0
- def _tsize(self,text,fnt):
- if not isinstance(text,unicode):
- text=unicode(text)
- m=self.img.measure_text(text,font=fnt)[0]
- w,h=(m[2]-m[0],m[3]-m[1])
- return (w,h)
- def draw(self,x,y,w,p,dd,n):
- rx=((3*w)+(3*p))/2
- ry=((3*w)+(3*p))/2
- sx,sy=11,15
- 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)]
- 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])
- for yy in range(3):
- for xx in range(3):
- px=x-rx+(xx*w)+(xx*p)
- py=y-ry+(yy*w)+(yy*p)
- if dd[yy][xx]:
- self.img.ellipse((px,py,px+w,py+w),fill=0xff0000)
- if n in self.tmp:
- self.img.polygon([(x-2+cpx,y+cpy) for cpx,cpy in cp],0,0xffffff)
- def roll(self):
- x,y,w,p=self.w/2,self.h/2,10,1
- rx=((3*w)+(3*p))/2
- ry=((3*w)+(3*p))/2
- 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)
- for i in range(len(self.dadu)-1):
- for yy in range(3):
- for xx in range(3):
- px=x-rx+(xx*w)+(xx*p)
- py=y-ry+(yy*w)+(yy*p)
- if self.dadu[i][yy][xx]:
- self.img.ellipse((px,py,px+w,py+w),fill=0xff0000)
- self._redraw(0)
- A.e32.ao_sleep(0.02)
- def play(self):
- x,y,w,p=self.w/2,self.h/2,10,1
- rad=min(x,y)*.86
- rx=((3*w)+(3*p))/2
- ry=((3*w)+(3*p))/2
- self.main_loop,self.rolling=1,0
- while self.main_loop:
- self.img.clear(0x5963)
- self.img.rectangle((x-rad,y-rad,x+rad,y+rad),0x8a94,0x7984,width=2)
- txt=(u'%s' %self.stat,u'Rolling All')[self.rolling]
- if 0<len(self.tmp)<6:
- self.tmp.sort()
- txt=(u'%s' %self.stat,u'Roll Selected: %s' %(','.join([str(i+1) for i in self.tmp])))[self.rolling]
- self.img.text((x-self._tsize(txt,'legend')[0]/2,self.h-10),txt,0xffffff,'legend')
- txt=(u'You Lost !!',u'Money: $ %d' %self.money)[self.money>0]
- self.img.text((x-self._tsize(txt,'legend')[0]/2,14),txt,0xffffff,'legend')
- if not self.rolling:
- for n in range(3):
- dx=x-(rx*2)-3 + (n*(rx*2))+(n*3)
- self.draw(dx,y-ry,w,p,self.dadu[self.nilai[n]],n)
- for n in range(3):
- dx=x-(rx*2)-3+ (n*(rx*2))+(n*3)
- dy=y+ry+3
- self.draw(dx,dy,w,p,self.dadu[self.nilai[3+n]],3+n)
- self._redraw(0)
- else:
- self.roll()
- A.e32.ao_sleep(0.01)
- Dadu=Dadu()
- Dadu.play()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement