Advertisement
here2share

# circlestouch.py

Nov 29th, 2014
411
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # circlestouch.py
  2.  
  3. from appuifw import *
  4. import e32,audio,appuifw,os,sys,key_codes,time,math,random,graphics,sensor
  5.  
  6. running=1
  7. def quit():
  8.     global running
  9.     rgb_pt=9
  10.     running=0
  11. app.exit_key_handler=quit
  12.  
  13. def handle_redraw(rect):
  14.     pass
  15.  
  16. img=None
  17. app.screen='large'
  18. app.orientation='portrait'
  19. app.directional_pad=False
  20. app.body=canvas=Canvas(redraw_callback=handle_redraw)
  21. img=graphics.Image.new(canvas.size)
  22. res_x, res_y=canvas.size
  23.  
  24. class z_Object(object):
  25.     x=0
  26.     y=0
  27.     speed=0,0
  28.     rad=0
  29.  
  30. r_=z_Object()
  31. g_=z_Object()
  32. b_=z_Object()
  33.  
  34. objA=z_Object()
  35. objB=z_Object()
  36.  
  37. distance=0
  38.  
  39. r_.x,r_.y=(100,100)
  40. g_.x,g_.y=(200,200)
  41. b_.x,b_.y=(300,300)
  42. r_.speed=(-3,5)
  43. g_.speed=(30,16)
  44. b_.speed=(-7,-9)
  45. r_.cz=(255,0,0)
  46. g_.cz=(0,255,0)
  47. b_.cz=(0,0,255)
  48. r_.rad=30
  49. g_.rad=30
  50. b_.rad=30
  51. r_.mass=1
  52. g_.mass=1
  53. b_.mass=1
  54.  
  55. rgb_pt=0
  56. objects=[(r_),(g_),(b_)]
  57.  
  58. dx,dy=0,0
  59. Xs=Ys=0.0000
  60. skip=0
  61. number_of_objs=3
  62. stat_msg=""
  63.  
  64. def dist():
  65.     dx=abs(objB.x-objA.x)
  66.     dy=abs(objB.y-objA.y)
  67.     distance=int(math.sqrt(dx*dx+dy*dy))
  68.     return distance
  69.  
  70. def isColliding():
  71.     if dist() < (objA.rad+objB.rad):
  72.         return True
  73.     return False
  74.  
  75. def z_xy(pos):
  76.     if pos[1]>564:
  77.         z_notouch(pos)
  78.     elif rgb_pt==1:
  79.         objects.remove(r_)
  80.         r_.x,r_.y=pos[0],pos[1]
  81.         objects.append(r_)
  82.     elif rgb_pt==2:
  83.         objects.remove(g_)
  84.         g_.x,g_.y=pos[0],pos[1]
  85.         objects.append(g_)
  86.     elif rgb_pt==3:
  87.         objects.remove(b_)
  88.         b_.x,b_.y=pos[0],pos[1]
  89.         objects.append(b_)
  90.  
  91. def z_dot(pos):
  92.     global rgb_pt,hSpeed
  93.     if img.getpixel(pos)[0]==r_.cz:
  94.         hSpeed=r_.speed
  95.         r_.speed=0,0
  96.         rgb_pt=1
  97.     elif img.getpixel(pos)[0]==g_.cz:
  98.         hSpeed=g_.speed
  99.         g_.speed=0,0
  100.         rgb_pt=2
  101.     elif img.getpixel(pos)[0]==b_.cz:
  102.         hSpeed=b_.speed
  103.         b_.speed=0,0
  104.         rgb_pt=3
  105.  
  106. def z_notouch(pos):
  107.     global r_,g_,b_,rgb_pt
  108.     if rgb_pt==1:
  109.         r_.speed=hSpeed
  110.     elif rgb_pt==2:
  111.         g_.speed=hSpeed
  112.     elif rgb_pt==3:
  113.         b_.speed=hSpeed
  114.     rgb_pt=0
  115.  
  116. def atColor(objAB):
  117.     global stat_msg
  118.     if objAB.cz==r_.cz:
  119.         stat_msg+="R "
  120.     elif objAB.cz==g_.cz:
  121.         stat_msg+="G "
  122.     elif objAB.cz==b_.cz:
  123.         stat_msg+="B "
  124.  
  125. def atCircle(distance):
  126.     global stat_msg
  127.     incr=0.05
  128.     radA=objA.rad
  129.     radB=objB.rad
  130.     rad=radA+radB
  131.     Xo=objA.speed[0]
  132.     Yo=objA.speed[1]
  133.     objA.x=objA.x-Xo
  134.     objA.y=objA.y-Yo
  135.     distance=dist()
  136.     while distance > rad+1:
  137.         objA.x=objA.x+(Xo*incr)
  138.         objA.y=objA.y+(Yo*incr)
  139.         dx=abs(objB.x-objA.x)
  140.         dy=abs(objB.y-objA.y)
  141.         distance=dist()
  142.     objA.x=int(objA.x)
  143.     objA.y=int(objA.y)
  144.     skip=1
  145.     draw()
  146.  
  147. def draw():
  148.     img.clear(0x000000)
  149.     for objA in objects:
  150.         img.ellipse(((objA.x-objA.rad,objA.y-objA.rad),(objA.x+objA.rad,objA.y+objA.rad)),objA.cz,objA.cz)
  151.     img.text( (20,30),'X:'+unicode(r_.x)+' Y:'+unicode(r_.y),(240,0,0))
  152.     img.text((130,30),'X:'+unicode(g_.x)+' Y:'+unicode(g_.y),(0,240,0))
  153.     img.text((240,30),'X:'+unicode(b_.x)+' Y:'+unicode(b_.y),(0,0,240))
  154.     img.text((20,50),'* '+unicode(stat_msg),(255,255,255))
  155.     canvas.blit(img)
  156.     z_draw(img)
  157.  
  158. def z_draw(rect):
  159.     pass
  160.  
  161. canvas.bind(key_codes.EButton1Up,z_notouch)
  162. canvas.bind(key_codes.EButton1Down,z_dot)
  163. canvas.bind(key_codes.EDrag,z_xy)
  164.  
  165. while running:
  166.     if skip==0:
  167.         stat_msg=" ---"
  168.         draw()
  169.     skip=0
  170.     for objA in objects: # attempt to move all 3 before blitting
  171.         objA.x+=objA.speed[0]
  172.         objA.y+=objA.speed[1]
  173.  
  174.         if objA.x<30:
  175.             objA.x=30
  176.             objA.speed=objA.speed[0]*-1,objA.speed[1]
  177.         elif objA.x>330:
  178.             objA.x=330
  179.             objA.speed=objA.speed[0]*-1,objA.speed[1]
  180.         if objA.y<80:
  181.             objA.y=80
  182.             objA.speed=objA.speed[0],objA.speed[1]*-1
  183.         elif objA.y>540:
  184.             objA.y=540
  185.             objA.speed=objA.speed[0],objA.speed[1]*-1
  186.         for objB in objects:
  187.             if objA <> objB:
  188.                 if isColliding():
  189.                     stat_msg=""
  190.                     atColor(objA)
  191.                     atColor(objB)
  192.                     atCircle(distance)
  193.     e32.reset_inactivity()
  194.     e32.ao_yield()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement