import random, os.path import util import pygame import pygame.font from pygame.locals import * import time import math #to do: possibly change to 5 minute intervals for ease of reading # put am/pm on the watches themselves def run(): #Must initialize pygame before doing anything else pygame.init() random.seed() display_flags = DOUBLEBUF #XO laptop is 1200x900 resolution width, height = 1200, 900 if pygame.display.mode_ok((width, height), display_flags ): screen = pygame.display.set_mode((width, height), display_flags) clock = pygame.time.Clock() run = 1 pygame.display.set_caption('OLPC Math Game') background = util.load_image('watch_drop_bg.bmp') watch1 = util.load_image('watch_broken2.bmp') colorkey = watch1.get_at((0, 0)) watch1.set_colorkey(colorkey) watch2 = util.load_image('watch3.bmp') colorkey = watch2.get_at((0, 0)) watch2.set_colorkey(colorkey) bg_draw = 1 state = (4,1) screen.blit(background,(0,0)) intro_string = "We are finally out of the cellar, but now Count Mathenstein is nowhere in sight! But look, he dropped his watch...and it broke when it fell, so it still is showing the time it was when he was here! How long has it been since the Count was last here?" util.ok_box(intro_string,(300,300),600,70,screen) current_hours = int(time.strftime("%H")) current_minutes = int(time.strftime("%M")) random_hours = random.randint(0,current_hours) if random_hours == current_hours and current_minutes > 20: random_minutes = random.randint(10,current_minutes) else: random_minutes = random.randint(0,60) if current_hours % 12 == current_hours and current_hours != 12: am_pm_current = "AM" else: am_pm_current = "PM" if random_hours % 12 == random_hours and random_hours != 12: am_pm_broken = "AM" else: am_pm_broken = "PM" watch3_mid = (333,441) broken_watch = (880,510) line_length_1 = 100 cur_hours = current_hours current_hours = current_hours % 12 if current_hours == 0: current_hours = 12 elapsed_time = (cur_hours - random_hours)*60+current_minutes-random_minutes print "answer in case its hard to tell for debugging:" print " current time: " print current_hours print current_minutes print am_pm_current print "random time" print random_hours print random_minutes print am_pm_broken print "elapsed: " print elapsed_time while run: events = pygame.event.get() for event in events: #User decides to exit program if event.type == QUIT: run = 0 #stop running pygame.quit() if bg_draw == 1: bg_draw = 0 screen.blit(background,(0,0)) screen.blit(watch1,(630,100)) screen.blit(watch2, (100,100)) font = pygame.font.Font(None, 24) pygame.draw.line(screen, (0,0,0),watch3_mid,( watch3_mid[0]+50*math.cos(math.radians(90-30*current_hours)), watch3_mid[1]-50*math.sin(math.radians(90-30*current_hours))) ,8) pygame.draw.line(screen, (0,0,0),watch3_mid, (watch3_mid[0]+100*math.cos(math.radians(90-6*current_minutes)), watch3_mid[1]-100*math.sin(math.radians(90-6*current_minutes))), 2) pygame.draw.line(screen, (0,0,0),broken_watch, (broken_watch[0]+50*math.cos(math.radians(90-30*random_hours)),broken_watch[1]-50*math.sin(math.radians(90-30*random_hours)) ) ,8) pygame.draw.line(screen, (0,0,0),broken_watch, (broken_watch[0]+100*math.cos(math.radians(90-6*random_minutes)), broken_watch[1]-100*math.sin(math.radians(90-6*random_minutes))), 2) text_rect = pygame.Rect((400,800),(30,30)) text_box = util.render_textrect(am_pm_current,font,text_rect,(255,255,255),0,0) screen.blit(text_box,text_rect.topleft) text_rect = pygame.Rect((900,800),(30,30)) text_box = util.render_textrect(am_pm_broken,font,text_rect,(255,255,255),0,0) screen.blit(text_box,text_rect.topleft) elapsed_guess = util.ask(screen,"How long has it been since his watch broke? (HH:MM)", 450,800,400) print "hmm" hours_guess = int(elapsed_guess[0:elapsed_guess.find(':')]) minutes_guess = int(elapsed_guess[elapsed_guess.find(':')+1:len(elapsed_guess)]) guess = hours_guess*60+minutes_guess print "guess" print guess if int(guess) == elapsed_time or elapsed_guess == "quit": print "win" util.ok_box("Good job, now we know how long it has been since he was here!",(500,300),200,50,screen) run = 0 else: bg_draw = 1 pygame.display.flip() clock.tick(40) #limits to 40 FPS def main(): print "Running Tower" run() #runs main if called via other naming convention if __name__ == '__main__': main()