Posts Issued in July, 2014

First ever lines of code in Py. For testing go to cloud www.codesculptor.org and paste the code in canvas, then press run.Implementation of classic arcade game Pong - week 4 of 8, assignment #4

# Implementation of classic arcade game Pong
 
import simplegui
import random
 
# initialize globals - pos and vel encode vertical info for paddles
WIDTH = 600
HEIGHT = 400       
BALL_RADIUS = 20
PAD_WIDTH = 8
PAD_HEIGHT = 80
HALF_PAD_WIDTH = PAD_WIDTH / 2
HALF_PAD_HEIGHT = PAD_HEIGHT / 2
 
# helper function that spawns a ball by updating the 
# ball's position vector and velocity vector
# if right is True, the ball's velocity is upper right, else upper left
def ball_init(right):
    global ball_pos, ball_vel # these are vectors stored as lists
    pass
 
 
# define event handlers
 
def new_game():
    global paddle1_pos, paddle2_pos, paddle1_vel, paddle2_vel  # these are floats
    global score1, score2  # these are ints
    pass
 
def draw(c):
    global score1, score2, paddle1_pos, paddle2_pos, ball_pos, ball_vel
 
    # update paddle's vertical position, keep paddle on the screen
 
    # draw mid line and gutters
    c.draw_line([WIDTH / 2, 0],[WIDTH / 2, HEIGHT], 1, "White")
    c.draw_line([PAD_WIDTH, 0],[PAD_WIDTH, HEIGHT], 1, "White")
    c.draw_line([WIDTH - PAD_WIDTH, 0],[WIDTH - PAD_WIDTH, HEIGHT], 1, "White")
 
    # draw paddles
 
    # update ball
 
    # draw ball and scores
 
def keydown(key):
    global paddle1_vel, paddle2_vel
    #current_key=chr(key)
    if key == simplegui.KEY_MAP["down"] and paddle1_vel<(HEIGHT - HALF_PAD_HEIGHT):
        #move right down
        paddle1_vel += 5
    if key == simplegui.KEY_MAP["up"] and (paddle1_vel - HALF_PAD_HEIGHT)>0:
        #move right up
        paddle1_vel -= 5
    if key == simplegui.KEY_MAP["s"] and paddle2_vel<(HEIGHT - HALF_PAD_HEIGHT):
        #move left down
        paddle2_vel += 5
    if key == simplegui.KEY_MAP["w"] and (paddle2_vel - HALF_PAD_HEIGHT)>0:
        #move left up
        paddle2_vel -= 5
 
 
def keyup(key):
    global paddle1_vel, paddle2_vel
    #current_key=''
 
 
# create frame
frame = simplegui.create_frame("Pong", WIDTH, HEIGHT)
frame.set_draw_handler(draw)
frame.set_keydown_handler(keydown)
frame.set_keyup_handler(keyup)
 
 
# start frame
frame.start()

First ever lines of code in Py. For testing go to cloud www.codesculptor.org and paste the code in canvas, then press run. Week 6. Mini-project #6 - Blackjack

# Mini-project #6 - Blackjack
 
import simplegui
import random
 
# load card sprite - 949x392 - source: jfitz.com
CARD_SIZE = (73, 98)
CARD_CENTER = (36.5, 49)
card_images = simplegui.load_image("http://commondatastorage.googleapis.com/codeskulptor-assets/cards.jfitz.png")
 
CARD_BACK_SIZE = (71, 96)
CARD_BACK_CENTER = (35.5, 48)
card_back = simplegui.load_image("http://commondatastorage.googleapis.com/codeskulptor-assets/card_back.png")    
 
# initialize some useful global variables
in_play = False
outcome = ""
score = 0
pos=[ 30, 100]
# define globals for cards
SUITS = ('C', 'S', 'H', 'D')
RANKS = ('A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K')
VALUES = {'A':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9, 'T':10, 'J':10, 'Q':10, 'K':10}
 
 
# define card class
class Card:
    def __init__(self, suit, rank):
        if (suit in SUITS) and (rank in RANKS):
            self.suit = suit
            self.rank = rank
        else:
            self.suit = None
            self.rank = None
            print "Invalid card: ", suit, rank
 
    def __str__(self):
        return self.suit + self.rank
 
    def get_suit(self):
        return self.suit
 
    def get_rank(self):
        return self.rank
 
    def draw(self, canvas, pos):
        card_loc = (CARD_CENTER[0] + CARD_SIZE[0] * RANKS.index(self.rank), 
                    CARD_CENTER[1] + CARD_SIZE[1] * SUITS.index(self.suit))
        canvas.draw_image(card_images, card_loc, CARD_SIZE, [pos[0] + CARD_CENTER[0], pos[1] + CARD_CENTER[1]], CARD_SIZE)
 
# define hand class
class Hand:
    def __init__(self):
        global cards_table
        cards_table=0
        self.hand_list=[]
 
    def __str__(self):
        retu=''
        for b in range(len(self.hand_list)/2):
            i = b*2 #+ 1
            #i = iter(self.hand_list)
            item_su = self.hand_list[i] #.next() # fetch first value
            item_ra = self.hand_list[i+1]#i.next()
            retu = retu + str(item_su) + str(item_ra)+ ' '
        return retu 
        #pass   # return a string representation of a hand
 
    def add_card(self, card):
        global cards_table, pos
        cards_table += 1
        card_a=( card.get_suit(), card.get_rank())
        self.hand_list.extend(card_a)
        pos [0]= pos[0] + 100
#       self.draw(canvas, pos)
 
 
    def get_value(self):
        sum_hand=0
        aces=0
        for i in range(len(self.hand_list)/2):
            #print self.hand_list[i*2+1]
            a=str(self.hand_list[i*2+1])
            a=VALUES[a]
            if a==1:
                aces = 1
            sum_hand += a
        if aces == 0:
            retu= sum_hand
        else:
            if sum_hand+10<=21:
                retu= sum_hand+ 10
            else:
                retu= sum_hand
        return retu
 
 
        # count aces as 1, if the hand has an ace, then add 10 to hand value if it doesn't bust
        pass    # compute the value of the hand, see Blackjack video
 
    def draw(self, canvas, pos):
        card.draw(canvas, pos)
        #or i in range(len(self.hand_list)/2):
        #   card.draw(canvas, pos)
        #   pos
       #draw(canvas, pos)
       #pass    # draw a hand on the canvas, use the draw method for cards
 
 
# define deck class 
class Deck:
    def __init__(self):
        self.hand_list=[]
        for i in SUITS:
            for j in RANKS:
                suit=i
                rank=j
                fu = Card(suit, rank)
                self.hand_list.append(fu)
 
        #pass   # create a Deck object
 
    def shuffle(self):
        random.shuffle(self.hand_list)
        # add cards back to deck and shuffle
        pass    # use random.shuffle() to shuffle the deck
 
    def deal_card(self):
        return self.hand_list.pop()
        #pass   # deal a card object from the deck
 
    def __str__(self):
        #print self.hand_list
        st=''
        for i in range(len(self.hand_list)):
            st += str(self.hand_list[i])+ ' '
 
        return st
 
#define event handlers for buttons
def deal():
    global outcome, in_play, cards_list, player_hand, dealer_hand, new_deck
    new_deck=Deck()
    cards_list = new_deck.shuffle()
    player_hand = Hand()
    dealer_hand = Hand()
    player_hand.add_card(new_deck.deal_card())
    player_hand.add_card(new_deck.deal_card())
    dealer_hand.add_card(new_deck.deal_card())
    dealer_hand.add_card(new_deck.deal_card())
    print "Player's hand " + str(player_hand)
    print "dealer's hand " + str(dealer_hand)#.str()
    print "Player's hand value " + str(player_hand.get_value())
    print "dealer's hand value " + str(dealer_hand.get_value() )   
    # your code goes here
    in_play = True
 
def hit():
    if player_hand.get_value()<=21:
        player_hand.add_card(new_deck.deal_card())
    if player_hand.get_value()>21:
        print "You have busted"
    # replace with your code below
    # if the hand is in play, hit the player
    # if busted, assign a message to outcome, update in_play and score
 
def stand():
    global score, dealer_hand, player_hand
    if player_hand.get_value()>21:
        print "You have busted"
        score -=1
    else:
        while dealer_hand.get_value()<17:
            dealer_hand.add_card(new_deck.deal_card())
        if dealer_hand.get_value()>21:
            print "Dealer was busted"
            score +=1
        else:
            if player_hand.get_value()<=dealer_hand.get_value() and dealer_hand.get_value()<=21:
                score -=1
            else:
                score +=1
    print score,dealer_hand, player_hand            
 
    # if hand is in play, repeatedly hit dealer until his hand has value 17 or more
 
    # assign a message to outcome, update in_play and score
 
# draw handler    
def draw(canvas):
    global score, dealer_hand, player_hand
    canvas.draw_text("Score: " + str(score), (550,50),12, "White")
    pos=[50,50]
    for i in range(len(self.hand_list)/2):
        dealer_hand.draw(canvas, pos)
        pos[0] += 100
    pos=[50, 350]
    for i in range(len(self.hand_list)/2):
        dealer_hand.draw(canvas, pos)
        pos[0] += 100
      # draw(self, canvas, pos)
        # test to make sure that card.draw works, replace with your code below
 
    #ard = Card("S", "A")
    #ard.draw(canvas, [300, 300])
    #   cards_table += 1
    #   card_a=( card.get_suit(), card.get_rank())
    #   self.hand_list.extend(card_a)
    #   pos [0]= pos[0] + 100
    #   self.draw(canvas, pos)
 
# initialization frame
frame = simplegui.create_frame("Blackjack", 600, 600)
frame.set_canvas_background("Green")
 
#create buttons and canvas callback
frame.add_button("Deal", deal, 200)
frame.add_button("Hit",  hit, 200)
frame.add_button("Stand", stand, 200)
frame.set_draw_handler(draw)
 
 
# get things rolling
frame.start()
 
 
# remember to review the gradic rubric

First ever lines of code in Py. For testing go to cloud www.codesculptor.org and paste the code in canvas, then press run. Implementation of Spaceship - program template for RiceRocks - last project in the course. Week 7 - 8.

# implementation of Spaceship - program template for RiceRocks
import simplegui
import math
import random
 
# globals for user interface
WIDTH = 800
HEIGHT = 600
score = 0
lives = 3
time = 0.5
started = False
rock_group = set()
missile_group = set()
explosion_group = set()
rock_count = 0
 
 
# Helper function to process drawing/updates
 
def process_sprite_group(group,canvas):
    for s in list(group):
        s.draw(canvas)
        if s.update() == True:
            group.remove(s)
 
 
def group_collide(group,other_object):
    c_num = 0
    for s in list(group):
        if s.collide(other_object) == True:
            rock_avel = random.random() * .2 - .1
            explosion = Sprite(s.get_position(), [0,0], 0, rock_avel, explosion_image, explosion_info,explosion_sound) 
            explosion_group.add(explosion)
            group.remove(s)
            c_num += 1
    return c_num
 
def group_group_collide(group1,group2):
    c_num = 0
    for s in list(group2):
        g1_c = group_collide(group1,s)
        if g1_c > 0 :
            group2.remove(s)
            c_num += g1_c
    return c_num
 
 
 
 
 
class ImageInfo:
    def __init__(self, center, size, radius = 0, lifespan = None, animated = False):
        self.center = center
        self.size = size
        self.radius = radius
        if lifespan:
            self.lifespan = lifespan
        else:
            self.lifespan = float('inf')
        self.animated = animated
 
    def get_center(self):
        return self.center
 
    def get_size(self):
        return self.size
 
    def get_radius(self):
        return self.radius
 
    def get_lifespan(self):
        return self.lifespan
 
    def get_animated(self):
        return self.animated
 
 
# art assets created by Kim Lathrop, may be freely re-used in non-commercial projects, please credit Kim
 
# debris images - debris1_brown.png, debris2_brown.png, debris3_brown.png, debris4_brown.png
#                 debris1_blue.png, debris2_blue.png, debris3_blue.png, debris4_blue.png, debris_blend.png
debris_info = ImageInfo([320, 240], [640, 480])
debris_image = simplegui.load_image("http://commondatastorage.googleapis.com/codeskulptor-assets/lathrop/debris2_blue.png")
 
# nebula images - nebula_brown.png, nebula_blue.png
nebula_info = ImageInfo([400, 300], [800, 600])
nebula_image = simplegui.load_image("http://commondatastorage.googleapis.com/codeskulptor-assets/lathrop/nebula_blue.png")
 
# splash image
splash_info = ImageInfo([200, 150], [400, 300])
splash_image = simplegui.load_image("http://commondatastorage.googleapis.com/codeskulptor-assets/lathrop/splash.png")
 
# ship image
ship_info = ImageInfo([45, 45], [90, 90], 35)
ship_image = simplegui.load_image("http://commondatastorage.googleapis.com/codeskulptor-assets/lathrop/double_ship.png")
 
# missile image - shot1.png, shot2.png, shot3.png
missile_info = ImageInfo([5,5], [10, 10], 3, 70)
missile_image = simplegui.load_image("http://commondatastorage.googleapis.com/codeskulptor-assets/lathrop/shot2.png")
 
# asteroid images - asteroid_blue.png, asteroid_brown.png, asteroid_blend.png
asteroid_info = ImageInfo([45, 45], [90, 90], 40)
asteroid_image = simplegui.load_image("http://commondatastorage.googleapis.com/codeskulptor-assets/lathrop/asteroid_blue.png")
 
# animated explosion - explosion_orange.png, explosion_blue.png, explosion_blue2.png, explosion_alpha.png
explosion_info = ImageInfo([64, 64], [128, 128], 17, 24, True)
explosion_image = simplegui.load_image("http://commondatastorage.googleapis.com/codeskulptor-assets/lathrop/explosion_alpha.png")
 
# sound assets purchased from sounddogs.com, please do not redistribute
# .ogg versions of sounds are also available, just replace .mp3 by .ogg
 
soundtrack= simplegui.load_sound("http://commondatastorage.googleapis.com/codeskulptor-assets/sounddogs/soundtrack.mp3")
missile_sound = simplegui.load_sound("http://commondatastorage.googleapis.com/codeskulptor-assets/sounddogs/missile.mp3")
missile_sound.set_volume(.5)
ship_thrust_sound = simplegui.load_sound("http://commondatastorage.googleapis.com/codeskulptor-assets/sounddogs/thrust.mp3")
explosion_sound = simplegui.load_sound("http://commondatastorage.googleapis.com/codeskulptor-assets/sounddogs/explosion.mp3")
 
# helper functions to handle transformations
def angle_to_vector(ang):
    return [math.cos(ang), math.sin(ang)]
 
def dist(p, q):
    return math.sqrt((p[0] - q[0]) ** 2 + (p[1] - q[1]) ** 2)
 
 
# Ship class
class Ship:
 
    def __init__(self, pos, vel, angle, image, info):
        self.pos = [pos[0], pos[1]]
        self.vel = [vel[0], vel[1]]
        self.thrust = False
        self.angle = angle
        self.angle_vel = 0
        self.image = image
        self.image_center = info.get_center()
        self.image_size = info.get_size()
        self.radius = info.get_radius()
 
    def draw(self,canvas):
        if self.thrust:
            canvas.draw_image(self.image, [self.image_center[0] + self.image_size[0], self.image_center[1]] , self.image_size,
                              self.pos, self.image_size, self.angle)
        else:
            canvas.draw_image(self.image, self.image_center, self.image_size,
                              self.pos, self.image_size, self.angle)
 
 
    def update(self):
        # update angle
        self.angle += self.angle_vel
 
        # update position
        self.pos[0] = (self.pos[0] + self.vel[0]) % WIDTH
        self.pos[1] = (self.pos[1] + self.vel[1]) % HEIGHT
 
        # update velocity
        if self.thrust:
            acc = angle_to_vector(self.angle)
            self.vel[0] += acc[0] * .1
            self.vel[1] += acc[1] * .1
 
        self.vel[0] *= .99
        self.vel[1] *= .99
 
    def set_thrust(self, on):
        self.thrust = on
        if on:
            ship_thrust_sound.rewind()
            ship_thrust_sound.play()
        else:
            ship_thrust_sound.pause()
 
    def increment_angle_vel(self):
        self.angle_vel += .05
 
    def decrement_angle_vel(self):
        self.angle_vel -= .05
 
    def shoot(self):
        forward = angle_to_vector(self.angle)
        missile_pos = [self.pos[0] + self.radius * forward[0], self.pos[1] + self.radius * forward[1]]
        missile_vel = [self.vel[0] + 6 * forward[0], self.vel[1] + 6 * forward[1]]
        m = Sprite(missile_pos, missile_vel, self.angle, 0, missile_image, missile_info, missile_sound)
        missile_group.add(m)
 
    def get_radius(self): return self.radius
    def get_position(self): return self.pos
 
    def tooclose(self,other_object):
        other = other_object.get_position()
        dist2 = dist(self.pos,other)
        rad2 = self.radius + other_object.get_radius()
        if dist2 < rad2*1.5 :
            return True
        else:
            return False 
 
 
 
# Sprite class
class Sprite:
    def __init__(self, pos, vel, ang, ang_vel, image, info, sound = None):
        self.pos = [pos[0],pos[1]]
        self.vel = [vel[0],vel[1]]
        self.angle = ang
        self.angle_vel = ang_vel
        self.image = image
        self.image_center = info.get_center()
        self.image_size = info.get_size()
        self.radius = info.get_radius()
        self.lifespan = info.get_lifespan()
        self.animated = info.get_animated()
        self.age = 0
        if sound:
            sound.rewind()
            sound.play()
 
    def draw(self, canvas):
 
        if self.animated == False:
            canvas.draw_image(self.image, self.image_center, self.image_size,
                          self.pos, self.image_size, self.angle)
        elif self.animated == True:
             i = self.age
             center = [self.image_center[0]+i*self.image_size[0],self.image_center[1]]
             canvas.draw_image(self.image, center, self.image_size,
                       self.pos, self.image_size, self.angle)
 
 
    def update(self):
        # update angle
        self.angle += self.angle_vel
        self.age += 1
 
        # update position
        self.pos[0] = (self.pos[0] + self.vel[0]) % WIDTH
        self.pos[1] = (self.pos[1] + self.vel[1]) % HEIGHT
 
        if self.age < self.lifespan:
            return False
        else:
            return True
 
    def collide(self,other_object):
        other = other_object.get_position()
        dist2 = dist(self.pos,other)
        rad2 = self.radius + other_object.get_radius()
        if dist2 < rad2 :
            return True
        else:
            return False
 
 
 
    def get_radius(self): return self.radius
    def get_position(self): return self.pos
 
 
# key handlers to control ship   
def keydown(key):
    if key == simplegui.KEY_MAP['left']:
        my_ship.decrement_angle_vel()
    elif key == simplegui.KEY_MAP['right']:
        my_ship.increment_angle_vel()
    elif key == simplegui.KEY_MAP['up']:
        my_ship.set_thrust(True)
    elif key == simplegui.KEY_MAP['space']:
        my_ship.shoot()
 
def keyup(key):
    if key == simplegui.KEY_MAP['left']:
        my_ship.increment_angle_vel()
    elif key == simplegui.KEY_MAP['right']:
        my_ship.decrement_angle_vel()
    elif key == simplegui.KEY_MAP['up']:
        my_ship.set_thrust(False)
 
# mouseclick handlers that reset UI and conditions whether splash image is drawn
def click(pos):
    global started,lives,score
    center = [WIDTH / 2, HEIGHT / 2]
    size = splash_info.get_size()
    inwidth = (center[0] - size[0] / 2) < pos[0] < (center[0] + size[0] / 2)
    inheight = (center[1] - size[1] / 2) < pos[1] < (center[1] + size[1] / 2)
    if (not started) and inwidth and inheight:
        started = True
        lives = 3
        score = 0
        soundtrack.play()
 
def draw(canvas):
    global time, started, lives,score, rock_count
 
    # animiate background
    time += 1
    center = debris_info.get_center()
    size = debris_info.get_size()
    wtime = (time / 8) % center[0]
    canvas.draw_image(nebula_image, nebula_info.get_center(), nebula_info.get_size(), [WIDTH / 2, HEIGHT / 2], [WIDTH, HEIGHT])
    canvas.draw_image(debris_image, [center[0] - wtime, center[1]], [size[0] - 2 * wtime, size[1]], 
                                [WIDTH / 2 + 1.25 * wtime, HEIGHT / 2], [WIDTH - 2.5 * wtime, HEIGHT])
    canvas.draw_image(debris_image, [size[0] - wtime, center[1]], [2 * wtime, size[1]], 
                                [1.25 * wtime, HEIGHT / 2], [2.5 * wtime, HEIGHT])
 
    # draw UI
    canvas.draw_text("Lives", [50, 50], 22, "White")
    canvas.draw_text("Score", [680, 50], 22, "White")
    canvas.draw_text(str(lives), [50, 80], 22, "White")
    canvas.draw_text(str(score), [680, 80], 22, "White")
 
    # draw ship and sprites
    my_ship.draw(canvas)
 
    #for r in rock_group: r.draw(canvas)      
    process_sprite_group(rock_group,canvas)
    process_sprite_group(missile_group,canvas)
    process_sprite_group(explosion_group,canvas)
 
    #a_missile.draw(canvas)
 
    # update ship and sprites
    my_ship.update()
 
    for r in rock_group: r.update()
 
    # detect COLLISIONS
 
    g1 =group_collide(rock_group,my_ship)
    lives -= g1
    rock_count -= g1
 
    g1 = group_group_collide(rock_group,missile_group)
    score += g1
    rock_count -= g1
 
    #detect end of game
 
    if lives < 1:
        rock_count = 0
        for r in list(rock_group):
            rock_group.discard(r)   
        started = False
        soundtrack.pause()
 
    # draw splash screen if not started
    if not started:
        canvas.draw_image(splash_image, splash_info.get_center(), 
                          splash_info.get_size(), [WIDTH / 2, HEIGHT / 2], 
                          splash_info.get_size())
 
# timer handler that spawns a rock    
def rock_spawner():
    global rock_group,rock_count
 
    if rock_count <= 12 and started == True:
 
        rock_pos = [random.randrange(0, WIDTH), random.randrange(0, HEIGHT)]
        rock_vel = [random.random() * .6 - .3, random.random() * .6 - .3]
        rock_avel = random.random() * .2 - .1
 
        rock = Sprite(rock_pos, rock_vel, 0, rock_avel, asteroid_image, asteroid_info) 
 
    #if rock position is NOT too close to ship, add to the group
        if my_ship.tooclose(rock) == False:
            rock_group.add(rock)
            rock_count += 1
 
 
# initialize stuff
frame = simplegui.create_frame("Asteroids", WIDTH, HEIGHT)
 
# initialize ship and two sprites
my_ship = Ship([WIDTH / 2, HEIGHT / 2], [0, 0], 0, ship_image, ship_info)
 
 
 
#rock_group = Sprite([WIDTH / 3, HEIGHT / 3], [1, 1], 0, .1, asteroid_image, asteroid_info)
a_missile = Sprite([2 * WIDTH / 3, 2 * HEIGHT / 3], [-1,1], 0, 0, missile_image, missile_info, missile_sound)
 
 
 
# register handlers
frame.set_keyup_handler(keyup)
frame.set_keydown_handler(keydown)
frame.set_mouseclick_handler(click)
frame.set_draw_handler(draw)
 
timer = simplegui.create_timer(2000.0, rock_spawner)
 
# get things rolling
timer.start()
frame.start()

First ever lines of code in Py. For testing go to cloud www.codesculptor.org and paste the code in canvas, then press run.

# template for "Stopwatch: The Game"
import simplegui
import random
# define global variables
message="0:00.0"
position=[50,120]
width=200
height=200
interval=100
counter=0
started=False
counter_won=0
counter_stopped=0
 
# define helper function format that converts time
# in tenths of seconds into formatted string A:BC.D
def format_look(t):
    #pass
    t=t
    D=t-(t//10)*10
    C=t//10-(t//100)*10
    B=t//100 - (t//600)*6
    A=t//600
    if started == True:
        res_forman=str(A) + ':' + str(B) + str(C) + '.' + str(D)
    else:
        res_forman=message
    return res_forman
 
# define event handlers for buttons; "Start", "Stop", "Reset"
def update(text): #handler for text box
    global message
    message=text
 
def start_handler():
    global started
    #if started != True:
        #counter_started += 1
    started=True
 
    timer.start()
 
def stop_handler():
    global started, counter_stopped, counter_won, counter
    timer.stop()
 
    if started != False:
        counter_stopped +=1
    if counter//10==counter/10:
        counter_won +=1
        counter -=1
    started=False
 
    timer.stop()
 
def reset_handler():
    global started,message,counter,counter_won,counter_stopped
    counter_stopped=0
    counter_won=0
    started=False
    timer.stop()
    message="0:00.0"
    counter=0
    #counter_started=counter  
 
# Handler to draw on canvas
def draw(canvas):
    global counter_won, counter_stopped
    canvas.draw_text(message, position, 36, "Red")
    msg = str(counter_won)+ '/' + str(counter_stopped)
    canvas.draw_text(msg, (width-20,height-0.9*height), 10, "Red")
 
# define event handler for timer with 0.1 sec interval
def timer_handler(): #handler for timer
    global counter, message
    #x=random.randrange(0, width)
    #y=random.randrange(0, height)
    #position[0]=x
    #position[1]=y
    #print x,y
    counter +=1
    message = format_look(counter)
 
# define draw handler
 
 
# Create a frame and assign callbacks to event handlers
frame = simplegui.create_frame("Home", width, height)
timer = simplegui.create_timer(interval, timer_handler)
start = frame.add_button("Start", start_handler,100)
stop = frame.add_button("Stop", stop_handler,100)
reset = frame.add_button("Reset", reset_handler,100)
frame.set_draw_handler(draw)
#text = frame.add_input("Message:", update, 150)
# Start the frame animation
frame.start()
timer.start()

Go to page: