<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1747402171197835962</id><updated>2011-07-07T13:51:19.483-07:00</updated><category term='Python'/><category term='S60'/><category term='Game'/><category term='Symbian'/><title type='text'>Nirpsis Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nirpsis.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1747402171197835962/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nirpsis.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Nirpsis</name><uri>http://www.blogger.com/profile/02998426230941520169</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1747402171197835962.post-5222186242700776415</id><published>2009-08-21T05:32:00.000-07:00</published><updated>2009-08-21T06:19:53.278-07:00</updated><title type='text'>PyPhotoFrame</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Introduction&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;How many times do we capture photos with our phones? Wouldn't it be great to customize these photos on the phones itself? This article illustrates an application which is useful for adding photo frame pattern  on your selected photos. The code snippet is written with the simplest mobile application development tool, [[PyS60]]. The application has been tested on Nokia N73.&lt;br /&gt;&lt;br /&gt;The application uses the following modules:&lt;br /&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;*appuifw module&lt;br /&gt;*graphics module&lt;br /&gt;*e32 module&lt;br /&gt;*time module&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;The following functions are used to create this application PyPhotoFrame :&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;*draw_screen():draw the black screen on canvas&lt;br /&gt;&lt;br /&gt;*save_image: save the image with its selected frame&lt;br /&gt;&lt;br /&gt;*gold_frame():draw the gold frame on selected image&lt;br /&gt;&lt;br /&gt;*sliver_frame(): draw the sliver frame on selected image&lt;br /&gt;&lt;br /&gt;*wooden_frame(): draw the wooden frame on selected image&lt;br /&gt;&lt;br /&gt;*red_frame(): draw the red frame on selected image&lt;br /&gt;&lt;br /&gt;*blue_frame(): draw the blue frame on selected image&lt;br /&gt;&lt;br /&gt;*RingsnChain(): draw the Rings and  Chain frame on selected image&lt;br /&gt;&lt;br /&gt;*DottedLine(): draw the Dotted line frame on selected image&lt;br /&gt;&lt;br /&gt;*DottedLine(): draw the Big Dotted line frame on selected image&lt;br /&gt;&lt;br /&gt;*BigDottedFrame(): draw the fancy4 frame on selected image&lt;br /&gt;&lt;br /&gt;*ArrowFrame(): draw the arrow frame on selected image&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;All the functions and parameters are defined in source code in detail.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Code snippet&lt;/span&gt;&lt;br /&gt;The code for the  is below.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(153, 255, 153);font-size:85%;" &gt;# importing the necessary modules&lt;br /&gt;import e32&lt;br /&gt;import appuifw&lt;br /&gt;import graphics&lt;br /&gt;import math&lt;br /&gt;&lt;br /&gt;# defining color codes&lt;br /&gt;&lt;br /&gt;BLACK=(0,0,0)&lt;br /&gt;RED=(176,23,31)&lt;br /&gt;BLUE=(0,178,238)&lt;br /&gt;WHITE=(255,255,255)&lt;br /&gt;DEEP_BLUE=(0,0,255)&lt;br /&gt;VIOLET=(255,62,150)&lt;br /&gt;GOLD=(205,133,0)&lt;br /&gt;SLIVER=(139,137,137)&lt;br /&gt;ORANGE=(139,90,0)&lt;br /&gt;GRAY=(205,201,201)&lt;br /&gt;WOOD=     (139,87,66)&lt;br /&gt;MEGENTA=(139,0,139)&lt;br /&gt;CRIMSON=(220,20,60)&lt;br /&gt;BLUE2=(0,0,238)&lt;br /&gt;&lt;br /&gt;running=1&lt;br /&gt;&lt;br /&gt;#global variables&lt;br /&gt;global x,y&lt;br /&gt;x=240&lt;br /&gt;y=320&lt;br /&gt;x1=25&lt;br /&gt;Separator=10&lt;br /&gt;outer_line=14&lt;br /&gt;inner_line=5&lt;br /&gt;x_Separator=10&lt;br /&gt;y_Separator=20&lt;br /&gt;&lt;br /&gt;def quit():&lt;br /&gt;&lt;blockquote&gt;'''the exit function'''&lt;br /&gt;global running&lt;br /&gt;running=0&lt;br /&gt;app_lock.signal()&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;def menu_about():&lt;br /&gt;&lt;blockquote&gt;'''the about function'''&lt;br /&gt;appuifw.note(u"PhotoFrame version 1.00" + "\n Developed by Nirpsis")&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;def handle_redraw(rect):&lt;br /&gt;&lt;blockquote&gt; '''function that will be called when the canvas needs to be redrawn'''&lt;br /&gt;canvas.blit(img)&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;def draw_screen():&lt;br /&gt;&lt;blockquote&gt; '''define the draw&lt;br /&gt;function - loads new image'''&lt;br /&gt;#Global variable for application UI&lt;br /&gt;global canvas&lt;br /&gt;#Create an instance of Canvas and set it as the application's body&lt;br /&gt;canvas = appuifw.Canvas(redraw_callback = handle_redraw,event_callback = None)&lt;br /&gt;appuifw.app.body=canvas&lt;br /&gt;#Set the screen to full&lt;br /&gt;appuifw.app.screen = 'full'&lt;br /&gt;appuifw.app.exit_key_handler=quit&lt;br /&gt;#Global variable for application UI&lt;br /&gt;global img&lt;br /&gt;#We open the image&lt;br /&gt;img=graphics.Image.open("C:\\image.jpg")&lt;br /&gt;img=img.resize((240,320), keepaspect=0)&lt;br /&gt;handle_redraw(img)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;def save_image():&lt;br /&gt;&lt;blockquote&gt; '''save image'''&lt;br /&gt;img.save("C:\\saved.jpg", quality=100)&lt;br /&gt;appuifw.note(u"Image saved at C:\\saved.jpg")&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;def gold_frame():&lt;br /&gt;&lt;br /&gt;'''function to draw golden frame'''&lt;br /&gt;draw_screen()    &lt;br /&gt;img.rectangle((0,0,x,y),fill=None,outline=GOLD,width=20)              &lt;br /&gt;j=1&lt;br /&gt;while (j&lt;5):&lt;inner_line):&gt;&lt;/inner_line):&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(153, 255, 153);font-size:85%;" &gt;&lt;br /&gt;img.rectangle(((Separator+(j*2)),(Separator+(j*2)),((x-y_Separator)+(j*2)),((y-y_Separator)+(j*2))),fill=None,outline=ORANGE)              &lt;br /&gt;j=j+1&lt;br /&gt;handle_redraw(None)&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(153, 255, 153);font-size:85%;" &gt;&lt;br /&gt;&lt;br /&gt;def sliver_frame():&lt;br /&gt;&lt;br /&gt;'''function to draw silver frame'''&lt;br /&gt;draw_screen()            &lt;br /&gt;img.rectangle((0,0,x,y),fill=None,outline=GRAY,width=20)          &lt;br /&gt;j=1&lt;br /&gt;&lt;br /&gt;while (j&lt;5):&lt;inner_line):&gt;&lt;/inner_line):&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(153, 255, 153);font-size:85%;" &gt;  img.rectangle(((Separator+(j*2)),(Separator+(j*2)),((x-20)+(j*2)),((y-20)+(j*2))),fill=None,outline=SLIVER)              &lt;br /&gt;j=j+1&lt;br /&gt;handle_redraw(None)&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(153, 255, 153);font-size:85%;" &gt;&lt;br /&gt;&lt;br /&gt;def wooden_frame():&lt;br /&gt;&lt;br /&gt;'''function to draw wooden frame'''&lt;br /&gt;draw_screen()               &lt;br /&gt;img.rectangle((0,0,x,y),fill=None,outline=WOOD,width=20)               &lt;br /&gt;j=1&lt;br /&gt;while (j&lt;5):&lt;inner_line):&gt;&lt;/inner_line):&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(153, 255, 153);font-size:85%;" &gt;img.rectangle(((Separator+(j*2)),(Separator+(j*2)),((x-y_Separator)+(j*2)),((y-y_Separator)+(j*2))),fill=None,outline=WOOD)              &lt;br /&gt;j=j+1&lt;br /&gt;handle_redraw(None)&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(153, 255, 153);font-size:85%;" &gt;&lt;br /&gt;&lt;br /&gt;def red_frame():&lt;br /&gt;&lt;br /&gt;'''function to draw red frame'''&lt;br /&gt;draw_screen()         &lt;br /&gt;img.rectangle((0,0,x,y),fill=None,outline=RED,width=20)      &lt;br /&gt;j=1&lt;br /&gt;while (j&lt;5):&lt;inner_line):&gt;&lt;/inner_line):&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(153, 255, 153);font-size:85%;" &gt;img.rectangle(((Separator+(j*2)),(Separator+(j*2)),((x-y_Separator)+(j*2)),((y-y_Separator)+(j*2))),fill=None,outline=RED)              &lt;br /&gt;j=j+1&lt;br /&gt;handle_redraw(None)    &lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(153, 255, 153);font-size:85%;" &gt;&lt;br /&gt;&lt;br /&gt;def blue_frame():&lt;br /&gt;&lt;br /&gt;'''function to draw blue frame'''&lt;br /&gt;draw_screen()        &lt;br /&gt;img.rectangle((0,0,x,y),fill=None,outline=BLUE,width=20)                                &lt;br /&gt;j=1&lt;br /&gt;&lt;br /&gt;while (j&lt;5):&lt;inner_line):&gt;&lt;/inner_line):&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(153, 255, 153);font-size:85%;" &gt; img.rectangle(((Separator+(j*2)),(Separator+(j*2)),((x-y_Separator)+(j*2)),((y-y_Separator)+(j*2))),fill=None,outline=WHITE)              &lt;br /&gt;j=j+1&lt;br /&gt;handle_redraw(None)    &lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(153, 255, 153);font-size:85%;" &gt;&lt;br /&gt;&lt;br /&gt;def RingsnChain():&lt;br /&gt;&lt;br /&gt;'''function to draw rings and chain frame '''&lt;br /&gt;draw_screen()   &lt;br /&gt;img.rectangle((0,0,x,y),fill=None,outline=BLUE,width=5)              &lt;br /&gt;img.rectangle((20,20,220,300),fill=None,outline=BLUE,width=4)   &lt;br /&gt;a=1&lt;br /&gt;&lt;br /&gt;while (a&lt;23):&gt;img.point(((Separator*a),Separator),fill=None,outline=DEEP_BLUE,width=8)&lt;br /&gt;a=a+1&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(153, 255, 153);font-size:85%;" &gt;&lt;/span&gt;&lt;span style="color: rgb(153, 255, 153);font-size:85%;" &gt;&lt;blockquote&gt;b=1     &lt;br /&gt;while (b&lt;23):&lt;/blockquote&gt;           &lt;br /&gt;&lt;blockquote&gt;global x,y,Separator&lt;br /&gt;img.point(((Separator*b),(y-Separator)),fill=None,outline=DEEP_BLUE,width=8)                      &lt;br /&gt;b=b+1 &lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;                &lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;c=1&lt;br /&gt;while (c&lt;31):&gt; img.point((Separator,(Separator*c)),fill=None,outline=DEEP_BLUE,width=8)                   &lt;br /&gt;c=c+1                       &lt;/blockquote&gt;&lt;br /&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(153, 255, 153);font-size:85%;" &gt;d=1&lt;br /&gt;while (d&lt;31):&gt; global x,y,Separator&lt;br /&gt;img.point(((x-Separator),(Separator*d)),fill=None,outline=DEEP_BLUE,width=8)                      &lt;br /&gt;d=d+1           &lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;handle_redraw(None)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;def DottedLine():&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;'''function to draw dotted line frame '''&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;draw_screen()          &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;img.rectangle((0,0,x,y),fill=None,outline=MEGENTA,width=5)               &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;img.rectangle((20,20,220,300),fill=None,outline=MEGENTA,width=4)    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;a=2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;while(a&lt;22):&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote style="color: rgb(153, 255, 153);"&gt;&lt;span style="font-size:85%;"&gt;global x,y,x1,x_Separator,y_Separator    &lt;br /&gt;img.ellipse(((x_Separator*a),(x_Separator/2),((x_Separator*a)+5),x1),fill=None,outline=MEGENTA)          &lt;br /&gt;a=a+1                      &lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(153, 255, 153);font-size:85%;" &gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;b=2      &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;while (b&lt;22):&gt;&lt;/span&gt;&lt;blockquote style="color: rgb(153, 255, 153);"&gt;global x,y,x_Separator,y_Separator,x1&lt;br /&gt;img.ellipse(((x_Separator*b),(y-x1),((x_Separator*b)+(x_Separator/2)),(y-(x_Separator/2))),fill=None,outline=MEGENTA)                      &lt;br /&gt;b=b+1   &lt;/blockquote&gt;           &lt;span style="color: rgb(153, 255, 153);"&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;c=1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;while (c&lt;19):&gt;&lt;/span&gt;&lt;blockquote style="color: rgb(153, 255, 153);"&gt; global x,y,x_Separator,y_Separator,x1    &lt;br /&gt;img.ellipse(((x_Separator/2),(x_Separator+(c*15)),y_Separator,(x1+(c*15))),fill=None,outline=MEGENTA)       &lt;br /&gt;c=c+1     &lt;/blockquote&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;d=1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;while (d&lt;19):&gt;&lt;/span&gt;&lt;blockquote style="color: rgb(153, 255, 153);"&gt;global x,y,x_Separator,x1    &lt;br /&gt;img.ellipse(((x-y_Separator),(x_Separator+(d*15)),(x-(x_Separator/2)),(x1+(d*15))),fill=None,outline=MEGENTA)                &lt;br /&gt;d=d+1        &lt;br /&gt;handle_redraw(None)    &lt;/blockquote&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;def DottedLine():&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;'''function to draw dotted line frame '''&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;draw_screen()              &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;img.rectangle((0,0,x,y),fill=None,outline=CRIMSON,width=5)               &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;img.rectangle((20,20,220,300),fill=None,outline=CRIMSON,width=4)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;a=0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;while (a&lt;11):&gt;&lt;/span&gt;&lt;blockquote style="color: rgb(153, 255, 153);"&gt;global x,y,x1,x_Separator,y_Separator    &lt;br /&gt;img.ellipse(((x_Separator+(a*y_Separator)),x_Separator,(x1+(a*y_Separator)),(y_Separator-(x_Separator/2))),fill=CRIMSON,outline=GRAY)&lt;br /&gt;a=a+1           &lt;/blockquote&gt;       &lt;span style="color: rgb(153, 255, 153);"&gt;b=0        &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;while (b&lt;11):&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote style="color: rgb(153, 255, 153);"&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;        global x,y,x_Separator,y_Separator,x1               &lt;br /&gt;img.ellipse(((x_Separator+(b*y_Separator)),(y-(x1-x_Separator)),(x1+(b*y_Separator)),(y-x_Separator)),fill=CRIMSON,outline=GRAY)                                    &lt;br /&gt;b=b+1    &lt;/span&gt;                    &lt;span style="color: rgb(153, 255, 153);"&gt;&lt;br /&gt;c=0&lt;br /&gt;while (c&lt;15):&gt;&lt;blockquote&gt; global x,y,x_Separator,y_Separator,x1    &lt;br /&gt;img.ellipse((x_Separator,(x_Separator+(c*y_Separator)),(x1-x_Separator),(x1+(c*y_Separator))),fill=CRIMSON,outline=GRAY)       &lt;br /&gt;c=c+1 &lt;/blockquote&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;&lt;br /&gt;d=0&lt;br /&gt;while (d&lt;(x_Separator+5)):        &lt;/span&gt;&lt;blockquote&gt; global x,y,x_Separator,x1    &lt;br /&gt;img.ellipse(((x-15),(x_Separator+(d*y_Separator)),(x-x_Separator),(x1+(d*y_Separator))),fill=CRIMSON,outline=GRAY)                &lt;br /&gt;d=d+1        &lt;br /&gt;handle_redraw(None)&lt;/blockquote&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote style="color: rgb(153, 255, 153);"&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;&lt;br /&gt;&lt;br /&gt;def BigDottedFrame():&lt;br /&gt;&lt;br /&gt;'''function to draw big dotted frame '''&lt;br /&gt;draw_screen()&lt;br /&gt;x1=25             &lt;br /&gt;img.rectangle((0,0,x,y),fill=None,outline=VIOLET,width=4)              &lt;br /&gt;img.rectangle((20,20,220,300),fill=None,outline=VIOLET,width=2)&lt;br /&gt;a=0&lt;br /&gt;&lt;br /&gt;while (a&lt;22):&gt;&lt;blockquote&gt;global x,y,x1,x_Separator,y_Separator    &lt;br /&gt;img.ellipse(((x_Separator+(a*x_Separator)),(x_Separator/2),(x1+(a*x_Separator)),(x1-x_Separator)),fill=VIOLET,outline=GRAY)&lt;br /&gt;a=a+1           &lt;/blockquote&gt;       &lt;span style="color: rgb(153, 255, 153);"&gt;&lt;br /&gt;b=0     &lt;br /&gt;while (b&lt;22):&gt;&lt;blockquote&gt; img.ellipse(((x_Separator+(b*x_Separator)),(y-(x1-x_Separator)),(x1+(b*x_Separator)),(y-5)),fill=VIOLET,outline=GRAY)                      &lt;br /&gt;b=b+1          &lt;/blockquote&gt;              &lt;span style="color: rgb(153, 255, 153);"&gt;&lt;br /&gt;c=0&lt;br /&gt;while (c&lt;30):&gt;&lt;blockquote&gt;  global x,y,x_Separator,y_Separator,x1    &lt;br /&gt;img.ellipse(((x_Separator/2),(x_Separator+(c*x_Separator)),(x1-x_Separator),(x1+(c*x_Separator))),fill=VIOLET,outline=GRAY)       &lt;br /&gt;c=c+1   &lt;/blockquote&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;&lt;br /&gt;d=0&lt;br /&gt;while (d&lt;30):&gt;&lt;blockquote&gt; global x,y,x_Separator,x1    &lt;br /&gt;img.ellipse(((x-(x1-x_Separator)),(x_Separator+(d*x_Separator)),(x-5),(x1+(d*x_Separator))),fill=VIOLET,outline=GRAY)                &lt;br /&gt;d=d+1        &lt;br /&gt;handle_redraw(None)&lt;/blockquote&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;&lt;br /&gt;&lt;br /&gt;def ArrowFrame():&lt;br /&gt;&lt;br /&gt;'''function to draw arrow frame '''&lt;br /&gt;draw_screen()&lt;br /&gt;x1=25           &lt;br /&gt;img.rectangle((0,0,x,y),fill=None,outline=BLUE2,width=4)              &lt;br /&gt;img.rectangle((20,20,220,300),fill=None,outline=BLUE2,width=2)&lt;br /&gt;a=0&lt;br /&gt;&lt;br /&gt;while (a&lt;13):&gt;&lt;blockquote&gt;global x,y,x1,x_Separator,y_Separator    &lt;br /&gt;img.ellipse(((x_Separator+(a*(y_Separator-3))),(x_Separator/2),(x1+(a*(y_Separator-3))),y_Separator),fill=BLUE2,outline=WHITE)&lt;br /&gt;a=a+1     &lt;/blockquote&gt;             &lt;span style="color: rgb(153, 255, 153);"&gt;&lt;br /&gt;b=0     &lt;br /&gt;while (b&lt;13):&gt;&lt;blockquote&gt;  global x,y,x_Separator,y_Separator,x1&lt;br /&gt;img.ellipse(((x_Separator+(b*(y_Separator-3))),(y-(x1-x_Separator)),(x1+(b*(y_Separator-3))),y),fill=BLUE2,outline=WHITE)                      &lt;br /&gt;b=b+1       &lt;br /&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;&lt;br /&gt;&lt;blockquote&gt;c=0&lt;br /&gt;while (c&lt;18):&gt;&lt;blockquote&gt;global x,y,x_Separator,y_Separator,x1    &lt;br /&gt;img.ellipse(((x_Separator/2),(x_Separator+(c*(y_Separator-3))),y_Separator,(x1+(c*(y_Separator-3)))),fill=BLUE2,outline=WHITE)       &lt;br /&gt;c=c+1        &lt;/blockquote&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;&lt;br /&gt;d=0&lt;br /&gt;while (d&lt;18):&gt;&lt;blockquote&gt;global x,y,x_Separator,x1    &lt;br /&gt;img.ellipse(((x-y_Separator),(x_Separator+(d*(y_Separator-3))),(x-5),(x1+(d*(y_Separator-3)))),fill=BLUE2,outline=WHITE)                &lt;br /&gt;d=d+1        &lt;br /&gt;handle_redraw(None)&lt;/blockquote&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;&lt;br /&gt;&lt;br /&gt;# Create options menu&lt;br /&gt;appuifw.app.menu = [(u"Load Image", draw_screen),(u"Simple",((u"Golden",gold_frame),(u"Sliver",sliver_frame),(u"Wooden",wooden_frame),(u"Red",red_frame),(u"Blue",blue_frame))),(u"Fancy",((u"Rings n Chain",RingsnChain),(u"Dotted line",DottedLine),(u"Dotted Line",DottedLine),(u"Big Dotted",BigDottedFrame),(u"Arrow",ArrowFrame))),(u"Save Image",save_image),(u"About",menu_about),(u"Exit",quit)]&lt;br /&gt;&lt;br /&gt;draw_screen()&lt;br /&gt;&lt;br /&gt;app_lock = e32.Ao_lock()&lt;br /&gt;#Wait for the user to request the exit&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;&lt;br /&gt;&lt;br /&gt;app_lock.wait()  &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Screenshots&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_41x6TcLNwoc/So6YEhfOejI/AAAAAAAAAJU/rT8SfpXoTJA/s1600-h/Option.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 150px; height: 200px;" src="http://1.bp.blogspot.com/_41x6TcLNwoc/So6YEhfOejI/AAAAAAAAAJU/rT8SfpXoTJA/s200/Option.JPG" alt="" id="BLOGGER_PHOTO_ID_5372398608975821362" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_41x6TcLNwoc/So6YsZHyhuI/AAAAAAAAAJs/Lg9qFKCXUgA/s1600-h/SimpleOptions.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 150px; height: 200px;" src="http://4.bp.blogspot.com/_41x6TcLNwoc/So6YsZHyhuI/AAAAAAAAAJs/Lg9qFKCXUgA/s200/SimpleOptions.JPG" alt="" id="BLOGGER_PHOTO_ID_5372399293924804322" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_41x6TcLNwoc/So6Y36AeRnI/AAAAAAAAAJ0/B2fXfx8lXA8/s1600-h/Fancyoption.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 150px; height: 200px;" src="http://2.bp.blogspot.com/_41x6TcLNwoc/So6Y36AeRnI/AAAAAAAAAJ0/B2fXfx8lXA8/s200/Fancyoption.JPG" alt="" id="BLOGGER_PHOTO_ID_5372399491731048050" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_41x6TcLNwoc/So6ZfdNFamI/AAAAAAAAAKM/v_kQ5kvRGyg/s1600-h/Fancy1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 150px; height: 200px;" src="http://3.bp.blogspot.com/_41x6TcLNwoc/So6ZfdNFamI/AAAAAAAAAKM/v_kQ5kvRGyg/s200/Fancy1.jpg" alt="" id="BLOGGER_PHOTO_ID_5372400171194083938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_41x6TcLNwoc/So6ZE4hEs_I/AAAAAAAAAJ8/Ah2np7bD5R4/s1600-h/Ring+and+Chain.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 150px; height: 200px;" src="http://4.bp.blogspot.com/_41x6TcLNwoc/So6ZE4hEs_I/AAAAAAAAAJ8/Ah2np7bD5R4/s200/Ring+and+Chain.JPG" alt="" id="BLOGGER_PHOTO_ID_5372399714669212658" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_41x6TcLNwoc/So6ZTb4RRNI/AAAAAAAAAKE/7j4JjtNaGB4/s1600-h/DottedLine.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 150px; height: 200px;" src="http://3.bp.blogspot.com/_41x6TcLNwoc/So6ZTb4RRNI/AAAAAAAAAKE/7j4JjtNaGB4/s200/DottedLine.JPG" alt="" id="BLOGGER_PHOTO_ID_5372399964679914706" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1747402171197835962-5222186242700776415?l=nirpsis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nirpsis.blogspot.com/feeds/5222186242700776415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nirpsis.blogspot.com/2009/08/pyphotoframe.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1747402171197835962/posts/default/5222186242700776415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1747402171197835962/posts/default/5222186242700776415'/><link rel='alternate' type='text/html' href='http://nirpsis.blogspot.com/2009/08/pyphotoframe.html' title='PyPhotoFrame'/><author><name>Nirpsis</name><uri>http://www.blogger.com/profile/02998426230941520169</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_41x6TcLNwoc/So6YEhfOejI/AAAAAAAAAJU/rT8SfpXoTJA/s72-c/Option.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1747402171197835962.post-4330257140075040523</id><published>2009-08-20T23:36:00.000-07:00</published><updated>2009-08-21T00:11:45.375-07:00</updated><title type='text'>PyHealth</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Introduction&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Health is important to you and me, especially me :)&lt;br /&gt;&lt;br /&gt;This PyHealth application calculates  BMI (Body Mass Index) and BMR (Basal Metabolic Rate) in Python for S60. The BMI and BMR figures could tell indicate if you over-weight, under-weight or normal-weight and how many calories you burn everyday, respectively.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;BMI&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Body Mass Index (BMI) - The measure of body fat based on height and weight that applies to both adult male and female. Enter your weight and height using Metric measures and this application would calculate your BMI.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;BMR&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Basal Metabolic Rate (BMR) - The measurement of energy, in calories, required to keep the body functioning at rest. Metabolic rates increase with exertion, stress, fear, and illness. The BMR uses the variables of height, weight, age and gender to calculate itself. We all need a certain number of calories to function, so it's important not to reduce your calories below your BMR when you're trying to lose weight.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;The following standard PyS60 modules are used when developing this application,&lt;br /&gt;&lt;/span&gt;    &lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;* appuifw module&lt;br /&gt;* graphics module&lt;br /&gt;* e32 module&lt;br /&gt;* math module&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;The following functions are used in PyHealth,&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;* draw_screen: prepare the canvas&lt;br /&gt;&lt;br /&gt;* BMI: for calculating BMI&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;* BMR : for calculating BMR&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;All the functions and parameters are defined in source code in detail. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Code Snippet&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span class="mw-headline"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt; &lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;The source code for the PyHealth is given below&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(153, 255, 153);font-size:85%;" &gt;# importing the necessary modules&lt;br /&gt;import e32&lt;br /&gt;import appuifw&lt;br /&gt;import graphics&lt;br /&gt;import math&lt;br /&gt;&lt;br /&gt;# define color code&lt;br /&gt;&lt;br /&gt;BLACK=(0,0,0)&lt;br /&gt;RED=(255,0,0)&lt;br /&gt;GREEN=(0,255,0)&lt;br /&gt;BLUE=(0,0,255)&lt;br /&gt;WHITE=(255,255,255)&lt;br /&gt;running=1&lt;br /&gt;&lt;br /&gt;#global variables&lt;br /&gt;global x,y&lt;br /&gt;x=10&lt;br /&gt;y=50&lt;br /&gt;&lt;br /&gt;# Set application title&lt;br /&gt;appuifw.app.title=u"PyHealth"&lt;br /&gt;&lt;br /&gt;# Define the exit function&lt;br /&gt;def quit():   &lt;blockquote&gt; global running&lt;br /&gt;  running=0&lt;br /&gt;  app_lock.signal()&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;#define functions &lt;br /&gt;def menu_about():&lt;br /&gt;      &lt;blockquote&gt;appuifw.note(u"PyHealth version 1.00" + "\n Developed by Nirpsis")&lt;/blockquote&gt;&lt;br /&gt;   &lt;br /&gt;#Define a function that will be called when the canvas needs to be redrawn&lt;br /&gt;def handle_redraw(rect): &lt;br /&gt;&lt;blockquote&gt; canvas.blit(img)&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;#define the draw function&lt;br /&gt;def draw_screen():&lt;br /&gt;     &lt;blockquote&gt;global canvas&lt;br /&gt;  &lt;br /&gt;     #Create an instance of Canvas and set it as the application's body&lt;br /&gt;     canvas = appuifw.Canvas(redraw_callback=handle_redraw) &lt;br /&gt;     appuifw.app.body = canvas&lt;br /&gt;     appuifw.app.exit_key_handler = quit&lt;br /&gt;&lt;br /&gt;     global img&lt;br /&gt;     img = graphics.Image.new(canvas.size)&lt;br /&gt;  &lt;br /&gt;     #Clear the image&lt;br /&gt;     img.clear(BLACK)    &lt;br /&gt;  &lt;br /&gt;     handle_redraw(None)    &lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;#define start function    &lt;br /&gt;def BMI():&lt;br /&gt;  &lt;blockquote&gt;global x,y&lt;br /&gt;  img.clear(BLACK)&lt;br /&gt;  data1,data2 = appuifw.multi_query(u" Your Weight(Kg)",u" Your Height(Cm)")    &lt;br /&gt;  result = (float(data1)/((float(data2)*float(data2))/10000))    #Divide&lt;br /&gt;  a=result &lt;br /&gt;&lt;br /&gt;  if(a &lt; fill =" BLUE,font="(u'Nokia" fill =" BLUE,font="(u'Nokia"&gt;18) and( a&lt;24): fill =" BLUE,font="(u'Nokia" fill =" BLUE,font="(u'Nokia"&gt;24) and (a&lt;30): fill =" BLUE,font="(u'Nokia" fill =" BLUE,font="(u'Nokia"&gt;30):              &lt;br /&gt;      img.text((x,y), u"BMI: "+unicode(a), fill = BLUE,font=(u'Nokia Hindi S60',22,appuifw.STYLE_BOLD))&lt;br /&gt;      img.text((x,y+40),u"Comment: Obesity! NO junk food!", fill = BLUE,font=(u'Nokia Hindi S60',14,appuifw.STYLE_BOLD))&lt;br /&gt;      handle_redraw(None)&lt;blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;def BMR():&lt;br /&gt;  &lt;blockquote&gt;global x,y&lt;br /&gt;  img.clear(BLACK)&lt;br /&gt;  data1,data2 = appuifw.multi_query(u" Your Weight(Kg)",u" Your Height(Cm)")             &lt;br /&gt;  list=[u'Female',u'Male']&lt;br /&gt;  #Selectionlist allows the user to select the list items&lt;br /&gt;  list1=appuifw.selection_list(choices=list,search_field=1)&lt;br /&gt;  data3= appuifw.query(u"Your Age","number")            &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  if(list1==0):                                &lt;br /&gt;      result =(655 + ( 9.6 * float(data1) ) + ( 1.8 *float(data2) )-( 4.7 * float(data3) ))&lt;br /&gt;      a=result&lt;br /&gt;      if(a&gt;1300) and(a &lt; fill =" BLUE,font="(u'Nokia" fill =" BLUE,font="(u'Nokia"&gt;1500):&lt;br /&gt;          img.text((x,y), u"BMR: "+unicode(result), fill = BLUE,font=(u'Nokia Hindi S60',22,appuifw.STYLE_BOLD))&lt;br /&gt;          img.text((x,y+40), u"Comment: High BMR! Take proper Vitamins ", fill = BLUE,font=(u'Nokia Hindi S60',14,appuifw.STYLE_BOLD))                 &lt;br /&gt;                   &lt;br /&gt;  if(list1==1):&lt;br /&gt;                                  &lt;br /&gt;      result= (66 + ( 13.7 * float(data1) ) + ( 5 *float(data2) ) - ( 6.8 *float(data3) ))&lt;br /&gt;      img.text((x,y), u"BMR: "+unicode(result), fill = BLUE,font=(u'Nokia Hindi S60',22,appuifw.STYLE_BOLD))&lt;br /&gt;      a=result&lt;br /&gt;      if(a&gt;1600) and(a &lt; fill =" BLUE,font="(u'Nokia" fill =" BLUE,font="(u'Nokia"&gt;1800):&lt;br /&gt;          img.text((x,y), u"BMR: "+unicode(result), fill = BLUE,font=(u'Nokia Hindi S60',22,appuifw.STYLE_BOLD))&lt;br /&gt;          img.text((x,y+40), u" Comment: High BMR!Take proper Vitamins ", fill = BLUE,font=(u'Nokia Hindi S60',14,appuifw.STYLE_BOLD)) &lt;br /&gt;          #display result  &lt;br /&gt;              &lt;/blockquote&gt;&lt;br /&gt;draw_screen()&lt;br /&gt;appuifw.app.menu = [(u"BMI",BMI),(u"BMR",BMR),(u"About", menu_about), (u"Exit", quit)]&lt;br /&gt;&lt;br /&gt;app_lock = e32.Ao_lock()&lt;br /&gt;#Wait for the user to request the exit&lt;br /&gt;&lt;br /&gt;app_lock.wait()   &lt;/span&gt;&lt;span style="color: rgb(153, 255, 153);"&gt; &lt;/span&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Screenshots&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:85%;"&gt;Below are few of the Screenshots by PyHealth applicaion.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_41x6TcLNwoc/So5ECjIm16I/AAAAAAAAAIk/gHuLD3Ptyic/s1600-h/Pyhealth1.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 168px; height: 200px;" src="http://1.bp.blogspot.com/_41x6TcLNwoc/So5ECjIm16I/AAAAAAAAAIk/gHuLD3Ptyic/s200/Pyhealth1.JPG" alt="" id="BLOGGER_PHOTO_ID_5372306216081348514" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_41x6TcLNwoc/So5ENCAkuII/AAAAAAAAAIs/zvVLriV6wzE/s1600-h/pyhealth2.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 166px; height: 200px;" src="http://1.bp.blogspot.com/_41x6TcLNwoc/So5ENCAkuII/AAAAAAAAAIs/zvVLriV6wzE/s200/pyhealth2.JPG" alt="" id="BLOGGER_PHOTO_ID_5372306396167846018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_41x6TcLNwoc/So5FTD0UAMI/AAAAAAAAAJE/r4KMaolN9Nc/s1600-h/pyhealth3.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 167px; height: 200px;" src="http://1.bp.blogspot.com/_41x6TcLNwoc/So5FTD0UAMI/AAAAAAAAAJE/r4KMaolN9Nc/s200/pyhealth3.JPG" alt="" id="BLOGGER_PHOTO_ID_5372307599244132546" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_41x6TcLNwoc/So5FcZgzUmI/AAAAAAAAAJM/gUPjT1hWjC8/s1600-h/pyhealth4.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 169px; height: 200px;" src="http://1.bp.blogspot.com/_41x6TcLNwoc/So5FcZgzUmI/AAAAAAAAAJM/gUPjT1hWjC8/s200/pyhealth4.JPG" alt="" id="BLOGGER_PHOTO_ID_5372307759686701666" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1747402171197835962-4330257140075040523?l=nirpsis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nirpsis.blogspot.com/feeds/4330257140075040523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nirpsis.blogspot.com/2009/08/introduction-health-is-important-to-you.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1747402171197835962/posts/default/4330257140075040523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1747402171197835962/posts/default/4330257140075040523'/><link rel='alternate' type='text/html' href='http://nirpsis.blogspot.com/2009/08/introduction-health-is-important-to-you.html' title='PyHealth'/><author><name>Nirpsis</name><uri>http://www.blogger.com/profile/02998426230941520169</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_41x6TcLNwoc/So5ECjIm16I/AAAAAAAAAIk/gHuLD3Ptyic/s72-c/Pyhealth1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1747402171197835962.post-4381684684616568143</id><published>2009-07-27T07:49:00.000-07:00</published><updated>2009-07-27T08:27:27.826-07:00</updated><title type='text'>Canvas Calender</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Introduction&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;This article demonstrates Calender on canvas. The simplest mobile application development tool, PyS60, is used to develop this canvas based calender. The code snippet given in this article generates canvas based calender.&lt;br /&gt;&lt;br /&gt;The following modules are used when developing this application:&lt;br /&gt;&lt;br /&gt;*appuifw module&lt;br /&gt;*graphics module&lt;br /&gt;*e32 module&lt;br /&gt;&lt;br /&gt;The following functions are used to create canvas based calender:&lt;br /&gt;&lt;br /&gt;* draw_screen()':draw the black screen on canvas&lt;br /&gt;* draw_text()':write some text on square&lt;br /&gt;* print_number: print number on square&lt;br /&gt;&lt;br /&gt;The following parameters are used when developing this application. They are customizable.&lt;br /&gt;&lt;br /&gt;* number_of_square :  Initialize number of column&lt;br /&gt;* number_of_lines :  Initialize number of row&lt;br /&gt;* Horizontal_Separator : Separate the space between  column&lt;br /&gt;* Vertical_Separator : Separate the space between row&lt;br /&gt;&lt;br /&gt;All the functions and parameters are defined in source code in detail.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Code snippet&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;The code for the calender is below.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;&lt;blockquote style="color: rgb(153, 255, 153);"&gt;# import module&lt;br /&gt;import appuifw,graphics,e32&lt;br /&gt;&lt;br /&gt;# define color code&lt;br /&gt;BLACK= (0,0,0)&lt;br /&gt;RED=(255,0,0)&lt;br /&gt;BLUE= (0,0,255)&lt;br /&gt;GREEN=(0,255,0)&lt;br /&gt;ORANGE= (255,127,0)&lt;br /&gt;WHITE=(255,255,255)&lt;br /&gt;global width,height&lt;br /&gt;width=320&lt;br /&gt;height=320&lt;br /&gt;&lt;br /&gt;#Global variables&lt;br /&gt;sqrt_x=width/16&lt;br /&gt;sqrt_y=height/4&lt;br /&gt;sqrt_width=30&lt;br /&gt;sqrt_height=25&lt;br /&gt;number_of_square=7&lt;br /&gt;number_of_lines=6&lt;br /&gt;Horizontal_Separator=3&lt;br /&gt;Vertical_Separator=3&lt;br /&gt;&lt;br /&gt;TextColor=RED&lt;br /&gt;PrintNumber=WHITE&lt;br /&gt;canvas=None&lt;br /&gt;img=None&lt;br /&gt;&lt;br /&gt;def handle_redraw(rect):   &lt;br /&gt;   canvas.blit(img)&lt;br /&gt;  &lt;br /&gt;# exit function&lt;br /&gt;def quit():&lt;br /&gt;      app_lock.signal()&lt;br /&gt;&lt;br /&gt;#---------------------------&lt;br /&gt;#draw draw screen&lt;br /&gt;#---------------------------&lt;br /&gt;&lt;br /&gt;def draw_screen():&lt;br /&gt;&lt;br /&gt;   #Global variable for application UI&lt;br /&gt;   global canvas&lt;br /&gt;  &lt;br /&gt;   #Create an instance of Canvas and set it as the application's body&lt;br /&gt;   canvas = appuifw.Canvas(redraw_callback = handle_redraw,event_callback = None)&lt;br /&gt;   appuifw.app.body=canvas&lt;br /&gt;  &lt;br /&gt;   #Set the screen to full&lt;br /&gt;   appuifw.app.screen = 'full'   &lt;br /&gt;   appuifw.app.exit_key_handler=quit&lt;br /&gt;  &lt;br /&gt;   #Global variable for application UI&lt;br /&gt;   global img&lt;br /&gt;   img = graphics.Image.new((canvas.size))&lt;br /&gt;  &lt;br /&gt;   #Clear the image&lt;br /&gt;   img.clear(BLACK)&lt;br /&gt;   global x1,y1,x2,y2, sqrt_x, sqrt_y, sqrt_width, sqrt_height,number_of_square, Horizontal_Separator,Vertical_Separator,number_of_lines  &lt;br /&gt;   j=0  &lt;br /&gt;   while j&lt;number_of_lines:&lt;br /&gt;        i=0&lt;br /&gt;        k=0&lt;br /&gt;       &lt;br /&gt;        #define rectangle coordinate&lt;br /&gt;        x1=sqrt_x&lt;br /&gt;        y1=sqrt_y+(j*(sqrt_height+Vertical_Separator))&lt;br /&gt;        x2=x1+sqrt_width&lt;br /&gt;        y2=y1+sqrt_height&lt;br /&gt;        while (i&lt;number_of_square):&lt;br /&gt;            #draw rectangle&lt;br /&gt;            img.rectangle((x1+ (i*sqrt_width),y1,x2+ (i*sqrt_width)-Horizontal_Separator,y2),outline=BLUE)                       &lt;br /&gt;            i=i+1       &lt;br /&gt;        handle_redraw(None)&lt;br /&gt;        j=j+1&lt;br /&gt;   Total_x, Total_y = canvas.size&lt;br /&gt;   img.text((35,50), u"CALENDER", fill = BLUE,font=(u'Nokia Hindi S60',40,appuifw.STYLE_BOLD))&lt;br /&gt;   handle_redraw(None)&lt;br /&gt;&lt;br /&gt;#define draw_text function  &lt;br /&gt;def draw_text():   &lt;br /&gt;          global sqrt_x,sqrt_y,t1,t2,sqrt_height,y3,x3, number_of_square&lt;br /&gt;          t1=5&lt;br /&gt;          t2=20&lt;br /&gt;          y3=sqrt_y+t2   &lt;br /&gt;          i=1&lt;br /&gt;          a=[u'S',u'M',u'T',u'W',u'T',u'F',u'S']&lt;br /&gt;          while i&lt; number_of_square +1:&lt;br /&gt;            # draw text on canvas&lt;br /&gt;            img.text(((sqrt_x+(i*t1)+((i-1)*sqrt_height)),y3), unicode(a[i-1]), fill=TextColor,font=   (u'Nokia Hindi S60',20,appuifw.STYLE_BOLD))       &lt;br /&gt;            i=i+1&lt;br /&gt;          handle_redraw(None)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def draw_number(i, no_of_days_in_month):&lt;br /&gt;    global number_of_lines, number_of_square&lt;br /&gt;    j=0&lt;br /&gt;    a=1&lt;br /&gt;    while j&lt;(number_of_lines-1):&lt;br /&gt;        if i==number_of_square:&lt;br /&gt;            i=0   &lt;br /&gt;        t1=5       &lt;br /&gt;        x1=sqrt_x&lt;br /&gt;        y1=sqrt_y+((j+1)*sqrt_width)+14   &lt;br /&gt;        while (i&lt;number_of_square):&lt;br /&gt;            img.text((x1+ (i*sqrt_height)+((i+1)*t1),y1),unicode(a),fill=PrintNumber)&lt;br /&gt;            a=a+1                       &lt;br /&gt;            i=i+1&lt;br /&gt;            if a==no_of_days_in_month+1:&lt;br /&gt;                break&lt;br /&gt;        handle_redraw(None)&lt;br /&gt;        #a=a+1&lt;br /&gt;        j=j+1       &lt;br /&gt;#calling the function       &lt;br /&gt;draw_screen()&lt;br /&gt;draw_text()&lt;br /&gt;draw_number(3,31)&lt;br /&gt;app_lock=e32.Ao_lock()&lt;br /&gt;&lt;br /&gt;#Wait for the user to request the exit&lt;br /&gt;app_lock.wait()   &lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Screenshots:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_41x6TcLNwoc/Sm3GDS3b9UI/AAAAAAAAAIE/G0MftW8gBB0/s1600-h/draw_square.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 149px; height: 200px;" src="http://4.bp.blogspot.com/_41x6TcLNwoc/Sm3GDS3b9UI/AAAAAAAAAIE/G0MftW8gBB0/s200/draw_square.JPG" alt="" id="BLOGGER_PHOTO_ID_5363160491174393154" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_41x6TcLNwoc/Sm3GDuVrOII/AAAAAAAAAIM/1qZ1eMmHAg4/s1600-h/draw_text.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 152px; height: 200px;" src="http://1.bp.blogspot.com/_41x6TcLNwoc/Sm3GDuVrOII/AAAAAAAAAIM/1qZ1eMmHAg4/s200/draw_text.JPG" alt="" id="BLOGGER_PHOTO_ID_5363160498548979842" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_41x6TcLNwoc/Sm3GEEYIdLI/AAAAAAAAAIU/fhsR21Gj2EA/s1600-h/print_number.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 151px; height: 200px;" src="http://4.bp.blogspot.com/_41x6TcLNwoc/Sm3GEEYIdLI/AAAAAAAAAIU/fhsR21Gj2EA/s200/print_number.JPG" alt="" id="BLOGGER_PHOTO_ID_5363160504464864434" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_41x6TcLNwoc/Sm3GELgHs8I/AAAAAAAAAIc/e74P0f1ZxBU/s1600-h/print_number2.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 155px; height: 200px;" src="http://3.bp.blogspot.com/_41x6TcLNwoc/Sm3GELgHs8I/AAAAAAAAAIc/e74P0f1ZxBU/s200/print_number2.JPG" alt="" id="BLOGGER_PHOTO_ID_5363160506377417666" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1747402171197835962-4381684684616568143?l=nirpsis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nirpsis.blogspot.com/feeds/4381684684616568143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nirpsis.blogspot.com/2009/07/canvas-calender.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1747402171197835962/posts/default/4381684684616568143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1747402171197835962/posts/default/4381684684616568143'/><link rel='alternate' type='text/html' href='http://nirpsis.blogspot.com/2009/07/canvas-calender.html' title='Canvas Calender'/><author><name>Nirpsis</name><uri>http://www.blogger.com/profile/02998426230941520169</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_41x6TcLNwoc/Sm3GDS3b9UI/AAAAAAAAAIE/G0MftW8gBB0/s72-c/draw_square.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1747402171197835962.post-2955323367398009539</id><published>2009-07-21T05:44:00.000-07:00</published><updated>2009-07-21T05:57:10.242-07:00</updated><title type='text'>How to develop brick-breaker game in Python - Part 3</title><content type='html'>&lt;span style="font-weight: bold;font-size:100%;" &gt;Introduction&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Finally we have the last article in the series of "How to develop brick-breaker game in Python. If you have followed the previous articles in this series, then after finishing this one, you should be able to create your own Brick-breaker or similar game using PyS60.&lt;br /&gt;&lt;br /&gt;In this article- Part 3, we would learn about the code for the moving ball, intializing the bricks parameter, slider parameter and sequence of calling functions. Let's discuss them in detail.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Part 3&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;Code for moving the ball&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Here we have a little code for moving the ball in canvas.&lt;br /&gt;This ball is moving automatically.&lt;br /&gt;&lt;br /&gt;Thus the code for moving the ball  could be as follows: &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;blockquote style="color: rgb(153, 255, 153);"&gt;&lt;span style="font-size:85%;"&gt;# import module&lt;br /&gt;import e32,random&lt;br /&gt;import time&lt;br /&gt;import appuifw&lt;br /&gt;import graphics&lt;br /&gt;import math&lt;br /&gt;BLACK=(0,0,0)&lt;br /&gt;GREEN=(0,255,0)&lt;br /&gt;RED=(255,0,0)&lt;br /&gt;running=1&lt;br /&gt;#define exit function&lt;br /&gt;def quit():&lt;br /&gt;&lt;blockquote&gt;global running&lt;br /&gt;running=0&lt;/blockquote&gt;&lt;br /&gt;appuifw.app.exit_key_handler=quit&lt;br /&gt;#Set the screen to large&lt;br /&gt;appuifw.app.screen='large'&lt;br /&gt;#Create an instance of Canvas and set it as the application's body&lt;br /&gt;canvas=appuifw.Canvas()&lt;br /&gt;appuifw.app.body=canvas&lt;br /&gt;j,k=canvas.size&lt;br /&gt;#define circle coordinate&lt;br /&gt;x1vel=10&lt;br /&gt;y1vel=10&lt;br /&gt;x1=150&lt;br /&gt;y1=300&lt;br /&gt;speed=15&lt;br /&gt;while running:&lt;br /&gt;&lt;blockquote&gt;global x1,y1,x1vel,y1vel&lt;br /&gt;if((x1&lt;0)&gt;j-15)):&lt;br /&gt;    x1vel=x1vel*-1&lt;br /&gt;if ((y1&lt;0)&gt;k-15)):&lt;br /&gt;    y1vel=y1vel*-1&lt;br /&gt;x1=x1+x1vel&lt;br /&gt;y1=y1+y1vel&lt;br /&gt;x2=x1+speed&lt;br /&gt;y2=y1+speed&lt;br /&gt;#draw circle&lt;br /&gt;canvas.ellipse((x1,y1,x2,y2),outline=None,fill=RED)&lt;br /&gt;# Sleep for 0.1&lt;br /&gt;e32.ao_sleep(0.1)&lt;br /&gt;#clear canvas&lt;br /&gt;canvas.clear(BLACK)&lt;br /&gt;e32.ao_yield()&lt;/blockquote&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;Sequence of calling functions&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;The defined functions need to be called in a proper sequence. sequence of calling functions are as follows:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);font-size:85%;" &gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(153, 255, 153);font-size:85%;" &gt;draw_screen()&lt;br /&gt;draw_slider()&lt;br /&gt;draw_bricks()&lt;br /&gt;erase_bricks(12)&lt;br /&gt;app_lock = e32.Ao_lock()&lt;br /&gt;app_lock.wait()&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;Screenshots&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_41x6TcLNwoc/SmW5106JELI/AAAAAAAAAH0/yx_gISxkXss/s1600-h/General_diagram_brickbreaker.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 184px;" src="http://4.bp.blogspot.com/_41x6TcLNwoc/SmW5106JELI/AAAAAAAAAH0/yx_gISxkXss/s200/General_diagram_brickbreaker.JPG" alt="" id="BLOGGER_PHOTO_ID_5360895265841156274" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_41x6TcLNwoc/SmW52RkItgI/AAAAAAAAAH8/AE7Y2vFSalc/s1600-h/BrickBreaker_final.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 150px; height: 200px;" src="http://1.bp.blogspot.com/_41x6TcLNwoc/SmW52RkItgI/AAAAAAAAAH8/AE7Y2vFSalc/s200/BrickBreaker_final.JPG" alt="" id="BLOGGER_PHOTO_ID_5360895273533486594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;We have concluded the series of articles related on "How to develop Brick-Breaker game. If you will follow this series, you would be able to create a Brick-Breaker game in Python for S60. &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1747402171197835962-2955323367398009539?l=nirpsis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nirpsis.blogspot.com/feeds/2955323367398009539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nirpsis.blogspot.com/2009/07/how-to-develop-brick-breaker-game-in_21.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1747402171197835962/posts/default/2955323367398009539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1747402171197835962/posts/default/2955323367398009539'/><link rel='alternate' type='text/html' href='http://nirpsis.blogspot.com/2009/07/how-to-develop-brick-breaker-game-in_21.html' title='How to develop brick-breaker game in Python - Part 3'/><author><name>Nirpsis</name><uri>http://www.blogger.com/profile/02998426230941520169</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_41x6TcLNwoc/SmW5106JELI/AAAAAAAAAH0/yx_gISxkXss/s72-c/General_diagram_brickbreaker.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1747402171197835962.post-1542340078034551809</id><published>2009-07-19T22:10:00.000-07:00</published><updated>2009-07-19T23:10:05.609-07:00</updated><title type='text'>How to develop brick-breaker game in Python - Part 2</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;span class="mw-headline"&gt;Introduction&lt;/span&gt;&lt;/span&gt; &lt;p&gt;&lt;span style="font-size:85%;"&gt;In the Part 1 of this article series the slider functions were discussed and one has an idea about how to create a moving slider for the Brick-breaker game. In this article - Part 2, we would learn about different brick functions. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Brick functions of this game include functions for drawing the number of bricks needed and erase the required bricks. Following functions are discussed in this article. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;1.&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;tt&gt;&lt;tt&gt;&lt;tt&gt;&lt;tt&gt;&lt;tt&gt;draw_bricks&lt;/tt&gt;&lt;/tt&gt;&lt;/tt&gt;&lt;/tt&gt;&lt;/tt&gt;: &lt;/span&gt;&lt;span style="font-size:85%;"&gt;draw number of bricks&lt;/span&gt;&lt;/p&gt;&lt;p&gt;2.&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;tt&gt;&lt;tt&gt;&lt;tt&gt;&lt;tt&gt;erase_bricks&lt;/tt&gt;&lt;/tt&gt;&lt;/tt&gt;&lt;/tt&gt;&lt;/span&gt;: &lt;span style="font-size:85%;"&gt;erase bricks&lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;a name="Part_2"&gt;&lt;/a&gt;&lt;h1&gt;&lt;span class="editsection"&gt;&lt;/span&gt;&lt;span style="font-weight: normal;font-size:100%;" &gt;&lt;span class="mw-headline"&gt;Part 2&lt;/span&gt;&lt;/span&gt;&lt;/h1&gt; &lt;p&gt;&lt;span style="font-size:85%;"&gt;In this Brick-breaker game, we initialize some brick parameters. One can change the value of this parameter according to his customization requirements. The bricks can be replaced by certain fancy or game characters by birds or insects as shown in the following screenshot. The parameters for simple bricks used in this game are initialized as follows: &lt;/span&gt;&lt;/p&gt; &lt;pre class="python"&gt;&lt;span style="color: rgb(128, 128, 128); font-style: italic;"&gt;# Initializing bricks parameter######&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);font-size:85%;" &gt;&lt;blockquote&gt;brick_x=10&lt;br /&gt;brick_y=40&lt;br /&gt;brick_width=32&lt;br /&gt;brick_height=20&lt;br /&gt;number_of_bricks=7&lt;br /&gt;number_of_lines=3&lt;br /&gt;Horizontal_Separator=2&lt;br /&gt;Vertical_Separator=3&lt;br /&gt;BrickColour=BLUE&lt;br /&gt;BrickBorder=GREEN&lt;/blockquote&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span style="font-size:100%;"&gt;Draw_bricks()&lt;/span&gt; &lt;p&gt;&lt;span style="font-size:85%;"&gt;By using this function, we can draw numbers of bricks in horizontal as well as vertical direction. Here, I have created total 30 bricks. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;The defination of the draw_screen() is as follows: &lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:78%;"&gt;def draw_bricks():&lt;br /&gt;&lt;blockquote&gt; &lt;span style="color: rgb(153, 255, 153);"&gt;global x1,y1,x2,y2, brick_x, brick_y, brick_width, brick_height,number_of_bricks, Horizontal_Separator,Vertical_Separator,number_of_lines   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;   j=0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;   while j&lt;number_of_lines:&gt;&lt;/number_of_lines:&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;        i=0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;        x1=brick_x&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;        y1=brick_y+(j*(brick_height+Vertical_Separator))&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;        x2=x1+brick_width&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;        y2=y1+brick_height&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;        while (i&lt;number_of_bricks):&gt;&lt;/number_of_bricks):&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;            img.rectangle((x1+ (i*brick_width),y1,x2+ (i*brick_width)-Horizontal_Separator,y2), width=1, outline=BrickBorder,fill= BrickColour)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;            i=i+1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;            handle_redraw(None)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;        j=j+1&lt;/span&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 255, 153);font-size:85%;" &gt;&lt;a name="erase_bricks.28.29"&gt;&lt;/a&gt;&lt;/span&gt;&lt;h2 style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(51, 51, 51);font-size:100%;" &gt; &lt;span class="mw-headline"&gt;erase_bricks()&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;span style="font-size:85%;"&gt;By using this function, we erase the bricks by passing the number of brick that is required to be earased. The definition of the add_location() could be as follows:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;def erase_bricks(number):&lt;/span&gt; &lt;blockquote&gt;&lt;span style="color: rgb(153, 255, 153);font-size:78%;" &gt;global x1,y1,x2,y2, brick_x, brick_y, brick_width, brick_height,number_of_bricks, Horizontal_Separator,Vertical_Separator,number_of_lines&lt;br /&gt;i=0&lt;br /&gt;if (number &lt; i="number" x1="brick_x" y1="brick_y" x2="x1+brick_width" y2="y1+brick_height" fill=" BLACK)"&gt; (number_of_bricks-1)):&lt;br /&gt;    i=number-number_of_bricks&lt;br /&gt;    x1=brick_x&lt;br /&gt;    y1=brick_y+(1*(brick_height+Vertical_Separator))&lt;br /&gt;    x2=x1+brick_width&lt;br /&gt;    y2=y1+brick_height   &lt;br /&gt;    img.rectangle((x1+ (i*brick_width),y1,x2+ (i*brick_width)-Horizontal_Separator,y2),fill= BLACK)   &lt;br /&gt;    handle_redraw(None)&lt;br /&gt;&lt;br /&gt;if (number &lt; (3*number_of_bricks)) and  (number &gt; (2*number_of_bricks-1)):&lt;br /&gt;    i=number-(2*number_of_bricks)&lt;br /&gt;    x1=brick_x&lt;br /&gt;    y1=brick_y+(2*(brick_height+Vertical_Separator))&lt;br /&gt;    x2=x1+brick_width&lt;br /&gt;    y2=y1+brick_height   &lt;br /&gt;    img.rectangle((x1+ (i*brick_width),y1,x2+ (i*brick_width)-Horizontal_Separator,y2),fill= BLACK)       &lt;br /&gt;    handle_redraw(None)&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;That finishes the brick functions (Part 2) for the Brick-Breaker Game. &lt;/span&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;The next article in the series- Part 3 for brick-Breaker , would cover Bouncing ball in canvas, game operation and would conclude this game. &lt;/span&gt;&lt;/p&gt; &lt;a name="Screenshots"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span class="editsection"&gt;&lt;/span&gt;&lt;span style="font-weight: normal;font-size:100%;" &gt;&lt;span class="mw-headline"&gt;Screenshots&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt; &lt;p&gt;&lt;span style="font-size:85%;"&gt;These screenshots demonstrate the Brick function  on canvas. The screenshots are relevant only to Part 2.  &lt;/span&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_41x6TcLNwoc/SmQCBBEakaI/AAAAAAAAAHc/CXYHx1L8Rgk/s1600-h/Draw_screen.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 157px; height: 200px;" src="http://1.bp.blogspot.com/_41x6TcLNwoc/SmQCBBEakaI/AAAAAAAAAHc/CXYHx1L8Rgk/s200/Draw_screen.JPG" alt="" id="BLOGGER_PHOTO_ID_5360411672967811490" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_41x6TcLNwoc/SmQCBddMr_I/AAAAAAAAAHk/8_wq-LFx2XM/s1600-h/BrickBreaker.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 150px; height: 200px;" src="http://4.bp.blogspot.com/_41x6TcLNwoc/SmQCBddMr_I/AAAAAAAAAHk/8_wq-LFx2XM/s200/BrickBreaker.JPG" alt="" id="BLOGGER_PHOTO_ID_5360411680587952114" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_41x6TcLNwoc/SmQCBkp56TI/AAAAAAAAAHs/w_OWkU2uKdk/s1600-h/Erase_brick.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 158px; height: 200px;" src="http://2.bp.blogspot.com/_41x6TcLNwoc/SmQCBkp56TI/AAAAAAAAAHs/w_OWkU2uKdk/s200/Erase_brick.JPG" alt="" id="BLOGGER_PHOTO_ID_5360411682520295730" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_41x6TcLNwoc/SmQCBkp56TI/AAAAAAAAAHs/w_OWkU2uKdk/s1600-h/Erase_brick.JPG"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_41x6TcLNwoc/SmQCBkp56TI/AAAAAAAAAHs/w_OWkU2uKdk/s1600-h/Erase_brick.JPG"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_41x6TcLNwoc/SmQCBkp56TI/AAAAAAAAAHs/w_OWkU2uKdk/s1600-h/Erase_brick.JPG"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_41x6TcLNwoc/SmQCBkp56TI/AAAAAAAAAHs/w_OWkU2uKdk/s1600-h/Erase_brick.JPG"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_41x6TcLNwoc/SmQCBkp56TI/AAAAAAAAAHs/w_OWkU2uKdk/s1600-h/Erase_brick.JPG"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_41x6TcLNwoc/SmQCBkp56TI/AAAAAAAAAHs/w_OWkU2uKdk/s1600-h/Erase_brick.JPG"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt; &lt;span style="color: rgb(51, 51, 51);font-size:85%;" &gt;&lt;/span&gt;&lt;br /&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_41x6TcLNwoc/SmQCBkp56TI/AAAAAAAAAHs/w_OWkU2uKdk/s1600-h/Erase_brick.JPG"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_41x6TcLNwoc/SmQCBddMr_I/AAAAAAAAAHk/8_wq-LFx2XM/s1600-h/BrickBreaker.JPG"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1747402171197835962-1542340078034551809?l=nirpsis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nirpsis.blogspot.com/feeds/1542340078034551809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nirpsis.blogspot.com/2009/07/how-to-develop-brick-breaker-game-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1747402171197835962/posts/default/1542340078034551809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1747402171197835962/posts/default/1542340078034551809'/><link rel='alternate' type='text/html' href='http://nirpsis.blogspot.com/2009/07/how-to-develop-brick-breaker-game-in.html' title='How to develop brick-breaker game in Python - Part 2'/><author><name>Nirpsis</name><uri>http://www.blogger.com/profile/02998426230941520169</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_41x6TcLNwoc/SmQCBBEakaI/AAAAAAAAAHc/CXYHx1L8Rgk/s72-c/Draw_screen.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1747402171197835962.post-4492994317200511587</id><published>2009-07-15T03:42:00.000-07:00</published><updated>2009-07-15T23:52:44.394-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Game'/><category scheme='http://www.blogger.com/atom/ns#' term='Symbian'/><category scheme='http://www.blogger.com/atom/ns#' term='S60'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Brick-breaker game in Python - Part 1</title><content type='html'>&lt;span class="mw-headline" style="font-weight: bold;font-size:100%;" &gt;&lt;br /&gt;Introduction&lt;/span&gt; &lt;h2&gt;&lt;span class="mw-headline"&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;In this article, I would be explaining how to create a Brick-Breaker game in Python for S60. The Brick-Breaker game is an arcade game. In this game, the player moves a paddle on the screen and bounces a ball. The objective of the game is to destroy bricks which are at the top. &lt;/span&gt;&lt;/p&gt;&lt;a name="Development_tools"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span style="font-size:100%;"&gt;&lt;span class="mw-headline"&gt;Development tools&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;1. Text editor - notepad is sufficient. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;2. Python for S60 - preferred version: PyS60 1.4.5 stable release &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;3. Python for S60 script shell - preferred version: PyS60 1.4.5 stable release &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;The PyS60 tools can be downloaded from &lt;a class="external text" title="http://sourceforge.net/project/showfiles.php?group_id=" href="http://sourceforge.net/project/showfiles.php?group_id=154155&amp;amp;package_id=171153&amp;amp;release_id=644640" rel="nofollow" package_id="171153&amp;amp;release_id="&gt;Sourceforge resources&lt;/a&gt;. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;The following modules are used when developing this application: &lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;appuifw module &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;sysinfo module &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;graphics module &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;e32 module &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;key_codes module &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;random module &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;math module &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;time module &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span class="mw-headline"  style="font-size:180%;"&gt;&lt;strong&gt;Part 1&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;In this article (Part-1) we would discuss the different slider functions in detail. &lt;/span&gt;&lt;/p&gt;&lt;a name="Initializing_slider_parameter"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span style="font-size:100%;"&gt;&lt;span class="mw-headline"&gt;Initializing slider parameter&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Before discussing, any functions in detail - let us define some of the slider parameters. &lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;#SLIDER PARAMETERS########&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;SliderX1=120&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;SliderY1=305&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;SliderX2=160&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;SliderY2=315&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;SliderSpeed=22&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;SliderColor=RED&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;TotalScreenWidth=230&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;         &lt;a name="draw_screen.28.29"&gt;&lt;/a&gt;&lt;h2&gt;&lt;span style="font-size:100%;"&gt;&lt;span class="mw-headline"&gt;draw_screen()&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;By using this function, We create a black screen in canvas. The definition of the draw_screen() is as follows:&lt;/span&gt;&lt;/p&gt;&lt;blockquote style="color: rgb(153, 255, 153);"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;def draw_screen():&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;                  &lt;blockquote&gt;appuifw.app.screen = 'full'     &lt;blockquote&gt;&lt;/blockquote&gt;                    global canvas&lt;br /&gt;                 canvas = appuifw.Canvas(redraw_callback=handle_redraw)&lt;br /&gt;                 appuifw.app.body = canvas&lt;br /&gt;                 appuifw.app.exit_key_handler = quit&lt;br /&gt;&lt;br /&gt;                 global img&lt;br /&gt;     img = graphics.Image.new(canvas.size)&lt;br /&gt;                 img.clear(BLACK)&lt;br /&gt;                 handle_redraw(None)&lt;/blockquote&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;a name="draw_slider.28.29"&gt;&lt;/a&gt;&lt;/span&gt;&lt;h2&gt;&lt;span style="font-size:100%;"&gt;&lt;span class="mw-headline"&gt;draw_slider()&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;By using this function, we create a slider in canvas using keyboard shortcuts. The defination of the draw_screen() is as follows:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(153, 255, 153); font-weight: bold;font-size:100%;" &gt;def draw_slider():&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;blockquote style="color: rgb(51, 255, 51);"&gt;&lt;span style="font-size:85%;"&gt;          &lt;span style="color: rgb(153, 255, 153);"&gt;global canvas&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;         #Keyboard shortcuts&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;         canvas.bind(key_codes.EKeyLeftArrow,lambda:  leftkey())&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;         canvas.bind(key_codes.EKeyRightArrow,lambda: rightkey())&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;       appuifw.app.body = canvas&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;         appuifw.app.exit_key_handler = quit&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;         img.rectangle((SliderX1,SliderY1,SliderX2,SliderY2),fill=SliderColor)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;         handle_redraw(None)&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;span style="font-size:85%;"&gt;&lt;a name="leftkey.28.29"&gt;&lt;/a&gt;&lt;/span&gt;&lt;h2&gt;&lt;span style="font-size:100%;"&gt;&lt;span class="mw-headline"&gt;leftkey()&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;The leftkey() is called from the draw_slider() function. By using this function, we can move the slider to left side by pressing left key. Thus, the code of leftkey() function is as follows:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(153, 255, 153); font-weight: bold;font-size:100%;" &gt;def leftkey():&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;                 &lt;/span&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;if (SliderX1&gt;0):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;                                             img.rectangle((SliderX1, SliderY1, SliderX2, SliderY2),fill=BLACK)  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;                                            global img, canvas,SliderX1, SliderY1, SliderX2, SliderY2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;                                            SliderX1=SliderX1-SliderSpeed&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;                                            SliderX2=SliderX2-SliderSpeed&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;                        img.rectangle((SliderX1, SliderY1, SliderX2, SliderY2),fill=SliderColor)  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;                                           #appuifw.note(u"Left arrow was pressed")&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;                                              handle_redraw(None)&lt;/span&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;&lt;a name="rightkey.28.29"&gt;&lt;/a&gt;&lt;/span&gt;&lt;h2&gt;&lt;span class="mw-headline"  style="font-size:130%;"&gt;rightkey()&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;The rightkey() is called from the draw_slider() function. By using this function, we can move the slider to right side by pressing right key. Thus the code of rightkey() function is as follows:&lt;/span&gt;&lt;/p&gt;&lt;blockquote style="color: rgb(51, 255, 51);"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(153, 255, 153); font-weight: bold;font-size:100%;" &gt;def rightkey():&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;    &lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;if (SliderX2&lt;230):&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;                   img.rectangle((SliderX1, SliderY1, SliderX2, SliderY2),fill=BLACK)    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;                   global img, canvas,SliderX1, SliderY1, SliderX2, SliderY2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;            SliderX1=SliderX1+SliderSpeed&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;                   SliderX2=SliderX2+SliderSpeed&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;                   img.rectangle((SliderX1, SliderY1, SliderX2, SliderY2),fill=SliderColor)    &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;                   #appuifw.note(u"Left arrow was pressed")&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 255, 153);"&gt;                   handle_redraw(None)&lt;/span&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;That finishes the slider functions (Part 1) for the Brick-Breaker Game.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;The next article in the series : Part 2 for brick-Breaker, would cover Brick functions for this game.&lt;/span&gt;&lt;/p&gt;&lt;h2&gt; &lt;span style="font-size:100%;"&gt;&lt;span class="mw-headline"&gt;Screenshots&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: normal;font-size:85%;" &gt;           &lt;span&gt;These screenshots demonstrate the Slider and its movable position on canvas. The screenshots are relevant only to Part 1.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_41x6TcLNwoc/Sl3bNJtO6OI/AAAAAAAAAGk/5ryBr2zTzyg/s1600-h/BrickBreaker_slider.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 138px; height: 212px;" src="http://2.bp.blogspot.com/_41x6TcLNwoc/Sl3bNJtO6OI/AAAAAAAAAGk/5ryBr2zTzyg/s200/BrickBreaker_slider.jpg" alt="" id="BLOGGER_PHOTO_ID_5358680150631180514" border="0" /&gt;&lt;/a&gt;&lt;/h2&gt;                                                                            &lt;h2&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_41x6TcLNwoc/Sl3bNcUM3HI/AAAAAAAAAG0/SA03KYoVic0/s1600-h/BrickBreaker_slider_right.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 146px; height: 207px;" src="http://1.bp.blogspot.com/_41x6TcLNwoc/Sl3bNcUM3HI/AAAAAAAAAG0/SA03KYoVic0/s200/BrickBreaker_slider_right.JPG" alt="" id="BLOGGER_PHOTO_ID_5358680155626462322" border="0" /&gt;&lt;/a&gt;&lt;/h2&gt;&lt;br /&gt;&lt;h2&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_41x6TcLNwoc/Sl3bNJtO6OI/AAAAAAAAAGk/5ryBr2zTzyg/s1600-h/BrickBreaker_slider.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_41x6TcLNwoc/Sl3bNftK2VI/AAAAAAAAAGs/-nGbuGoVf08/s1600-h/BrickBreaker_slider_left.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 138px; height: 202px;" src="http://3.bp.blogspot.com/_41x6TcLNwoc/Sl3bNftK2VI/AAAAAAAAAGs/-nGbuGoVf08/s200/BrickBreaker_slider_left.JPG" alt="" id="BLOGGER_PHOTO_ID_5358680156536494418" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1747402171197835962-4492994317200511587?l=nirpsis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nirpsis.blogspot.com/feeds/4492994317200511587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nirpsis.blogspot.com/2009/07/brick-breaker-game-in-python-part-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1747402171197835962/posts/default/4492994317200511587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1747402171197835962/posts/default/4492994317200511587'/><link rel='alternate' type='text/html' href='http://nirpsis.blogspot.com/2009/07/brick-breaker-game-in-python-part-1.html' title='Brick-breaker game in Python - Part 1'/><author><name>Nirpsis</name><uri>http://www.blogger.com/profile/02998426230941520169</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_41x6TcLNwoc/Sl3bNJtO6OI/AAAAAAAAAGk/5ryBr2zTzyg/s72-c/BrickBreaker_slider.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1747402171197835962.post-1473504756875950428</id><published>2009-06-19T05:15:00.000-07:00</published><updated>2009-06-19T11:13:31.776-07:00</updated><title type='text'>GraphicsGenerator v 1.0.0</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_41x6TcLNwoc/SjuRL3gAH2I/AAAAAAAAAEU/W5Q9TemKQzA/s1600-h/screenshot1.jpg"&gt;&lt;img style="cursor: pointer; width: 150px; height: 200px;" src="http://1.bp.blogspot.com/_41x6TcLNwoc/SjuRL3gAH2I/AAAAAAAAAEU/W5Q9TemKQzA/s200/screenshot1.jpg" alt="" id="BLOGGER_PHOTO_ID_5349028615495360354" border="0" /&gt;&lt;/a&gt;  &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_41x6TcLNwoc/SjuQksUI31I/AAAAAAAAAD8/nAdCin60DUA/s1600-h/screenshot2.jpg"&gt;&lt;img style="cursor: pointer; width: 150px; height: 200px;" src="http://4.bp.blogspot.com/_41x6TcLNwoc/SjuQksUI31I/AAAAAAAAAD8/nAdCin60DUA/s200/screenshot2.jpg" alt="" id="BLOGGER_PHOTO_ID_5349027942477913938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_41x6TcLNwoc/SjuQ-LdoBVI/AAAAAAAAAEM/rwl-hBqK8p8/s1600-h/screenshot4.jpg"&gt;&lt;img style="cursor: pointer; width: 150px; height: 200px;" src="http://2.bp.blogspot.com/_41x6TcLNwoc/SjuQ-LdoBVI/AAAAAAAAAEM/rwl-hBqK8p8/s200/screenshot4.jpg" alt="" id="BLOGGER_PHOTO_ID_5349028380335932754" border="0" /&gt;&lt;/a&gt;  &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_41x6TcLNwoc/SjuQtRuqnPI/AAAAAAAAAEE/tdQFfhmGGlc/s1600-h/screenshot3.jpg"&gt;&lt;img style="cursor: pointer; width: 150px; height: 200px;" src="http://1.bp.blogspot.com/_41x6TcLNwoc/SjuQtRuqnPI/AAAAAAAAAEE/tdQFfhmGGlc/s200/screenshot3.jpg" alt="" id="BLOGGER_PHOTO_ID_5349028089960242418" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;Last night, I decided to code something that I could use to generate graphics that I had been needing for mobile optimized websites. Finally, I came up with something that could just accomplish the job of generating patterns for me.&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Basically, the software generates beautiful patterns (slide strokes for now) of the desired colour and latency (a parameter to interpret the pattern).&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3 style="font-weight: normal;"&gt;&lt;span style="font-size:85%;"&gt;&lt;a name="TOC-Features"&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;Features&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Generates slide stroke patterns.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Supports all colors.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Support for random colors.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Supports 30 different patterns - all slide strokes.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Graphics generated can be saved.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt; &lt;div&gt;&lt;span style="font-size:85%;"&gt;The code sample for the application is also available, in addition to the install file. See this link:&lt;br /&gt;&lt;br /&gt;http://sites.google.com/site/nirpsis/graphicsgenerator&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;   &lt;div&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: bold;"&gt;Version 1.00&lt;/span&gt;, release date  2009-05-07 &lt;/span&gt;    &lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Initial release&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Tested with S60 3.1 emulator (PyS60 1.4.5)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Tested with &lt;span style="color: rgb(51, 51, 255);"&gt;N73&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://www.forum.nokia.com/devices/N82"&gt; &lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Tested with &lt;span style="color: rgb(51, 51, 255);"&gt;N95&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Released as ready-to-install SIS ( only for PyS60 1.4.x) as well as source code.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Enjoy,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;-nirpsis&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1747402171197835962-1473504756875950428?l=nirpsis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nirpsis.blogspot.com/feeds/1473504756875950428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nirpsis.blogspot.com/2009/06/graphicsgenerator.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1747402171197835962/posts/default/1473504756875950428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1747402171197835962/posts/default/1473504756875950428'/><link rel='alternate' type='text/html' href='http://nirpsis.blogspot.com/2009/06/graphicsgenerator.html' title='GraphicsGenerator v 1.0.0'/><author><name>Nirpsis</name><uri>http://www.blogger.com/profile/02998426230941520169</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_41x6TcLNwoc/SjuRL3gAH2I/AAAAAAAAAEU/W5Q9TemKQzA/s72-c/screenshot1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry></feed>
