def main(): #Initialize pygame.init() screen = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT)) font = pygame.font.Font(None,30) pygame.display.set_caption("Dinosaur Run") #Load images and colors startpage = pygame.image.load("images/startpage.png") instructionpage = pygame.image.load("images/instructionpage.png") background = pygame.image.load("images/background.png") far_background = pygame.image.load("images/far_background.png") background_ending = pygame.image.load("images/background_ending.png") sky = pygame.image.load("images/sky.png") cloud = pygame.image.load("images/cloud.png") heart1 = pygame.image.load("images/heart.png") heart2 = pygame.image.load("images/heart2.png") stone = pygame.image.load("images/stone.png") house = pygame.image.load("images/house.png") houseBack = pygame.image.load("images/house2.png") black = pygame.Color(0,0,0) leftTime = font.render("0", False, black) #Button images start_button = pygame.image.load("images/start_button.png") instruction_button = pygame.image.load("images/instruction_button.png") end_button1 = pygame.image.load("images/end_button1.png") home_button = pygame.image.load("images/home_button.png") end_button2 = pygame.image.load("images/end_button2.png") #Character images playerFrames = [0] * 5 dinoFrames = [0] * 5 playerFrames[1] = pygame.image.load("images/player1.png") playerFrames[2] = pygame.image.load("images/player2.png") playerFrames[3] = pygame.image.load("images/player3.png") playerFrames[4] = pygame.image.load("images/player4.png") dinoFrames[1] = pygame.image.load("images/dino1.png") dinoFrames[2] = pygame.image.load("images/dino2.png") dinoFrames[3] = pygame.image.load("images/dino3.png") dinoFrames[4] = pygame.image.load("images/dino4.png") deathCharacter = pygame.image.load("images/bite.png") bite1 = pygame.image.load("images/bite1.png") bite2 = pygame.image.load("images/bite2.png") bite3 = pygame.image.load("images/bite3.png") bite4 = pygame.image.load("images/bite4.png") bite5 = pygame.image.load("images/bite5.png") gameover_font = pygame.image.load("images/gameover.png") safely_home_font = pygame.image.load("images/safelyhome.png") #Initial usic file import startmenu_bgm = pygame.mixer.Sound("sounds/startmenu.wav") play_bgm = pygame.mixer.Sound("sounds/play.wav") gameover_bgm = pygame.mixer.Sound("sounds/gameover.wav") #Create clock clock = pygame.time.Clock() running = True state = SCENE_MAIN_MENU #Questions questions = [] questions.insert(0,createLoveQuestion("cat.png","mouse.png",True)) questions.insert(0,createLoveQuestion("monkey.png","banana.png",True)) #questions.insert(0,createLoveQuestion("ham.png","sfseed.png",True)) questions.insert(0,createLoveQuestion("dora.png","mouse.png",False)) questions.insert(0,createLoveQuestion("dora.png","dan.png",True)) questions.insert(0,createLoveQuestion("dracula.png","blood.png",True)) questions.insert(0,createLoveQuestion("dracula.png","garlic.png",False)) questions.insert(0,createLoveQuestion("mouse.png","cheese.png",True)) questions.insert(0,createLoveQuestion("bug.png","apple.png",True)) questions.insert(0,createLoveQuestion("snail.png","salt.png",False)) questions.insert(0,createLoveQuestion("rabbit.png","carrot.png",True)) questions.insert(0,createLoveQuestion("pica.png","monsterb.png",False)) questions.insert(0,createLoveQuestion("horse.png","carrot.png",True)) questions.insert(0,createLoveQuestion("zombie.png","sun.png",False)) questions.insert(0,createLoveQuestion("son.png","dragon.png",True)) questions.insert(0,createLoveQuestion("snow.png","apple.png",False)) questionOffTimer = 0 questionOnTimer = 0 questionOn = False questionCurrentNo = -1 questionsLoverImage = () questionsLoveeImage = () #Load questions image for i in range(0,len(questions)): questionsLoverImage = questionsLoverImage[:i] + (pygame.image.load(questions[i].LoverDir),) questionsLoveeImage = questionsLoveeImage[:i] + (pygame.image.load(questions[i].LoveeDir),) #True False buttons trueButtonPosition = (484,84) falseButtonPosition = (484,121) trueImage = pygame.image.load("images/v.png") falseImage = pygame.image.load("images/x.png") trueFalseButtonSize = (trueImage.get_width(),trueImage.get_height()) trueButton = Button(Vec2(trueButtonPosition[0] + trueFalseButtonSize[0]/2,trueButtonPosition[1] + trueFalseButtonSize[1]/2)) falseButton = Button(Vec2(falseButtonPosition[0] + trueFalseButtonSize[0]/2,falseButtonPosition[1] + trueFalseButtonSize[1]/2)) trueButton.setShape(RectShape(trueFalseButtonSize[0],trueFalseButtonSize[1])) falseButton.setShape(RectShape(trueFalseButtonSize[0],trueFalseButtonSize[1])) #Positions playerPosition = [300,260] dinoPosition = [15,300] life1Position = (28,37) life2Position = (68,37) life3Position = (108,37) stonePosition = (7,0) loverPosition = (191,72) loveePosition = (354,72) heartPosition = (310,119) houseFinalPosition = (389,130) houseBackFinalPosition = (389,239) housePosition = (700,houseFinalPosition[1]) houseBackPosition = (housePosition[0] + houseBackFinalPosition[0] - houseFinalPosition[0],houseBackFinalPosition[1]) deathCharacterPosition = (250,310) #Game numerics fps = 60 timer = 0 rotateTimer = 0 houseAppearTime = 5 * fps houseMoveTimer = 0 houseMoveDistance = housePosition[0] - houseFinalPosition[0] houseOn = False addPlayerx = 1 addDinox = 1 dinoCenter = 25 life = 3 bgm = False goalTime = 6 * fps playerDestinationX = 542 deathAnimationCounter = 0 winAnimationCounter = 3 * fps playerFrameNo = -1 dinoFrameNo = -1 while running: #Main Menu if state == SCENE_MAIN_MENU: if bgm == False: startmenu_bgm.play() bgm = True #Position initializing start playerPosition = [300,260] dinoPosition = [15,300] housePosition = (700,houseFinalPosition[1]) houseBackPosition = (housePosition[0] + houseBackFinalPosition[0] - houseFinalPosition[0],houseBackFinalPosition[1]) houseMoveTimer = 0 life = 3 timer = 0 deathAnimationCounter = 0 winAnimationCounter = 3 * fps houseMoveTimer = 0 houseOn = False rotateTimer = 0 deathCharacterPosition = (250,310) #Position initializing end screen.blit(startpage, (0,0)) screen.blit(start_button, (270,210)) screen.blit(instruction_button, (270,280)) screen.blit(end_button1, (270,350)) button1 = Button(Vec2(350,240)) button1.setShape(RectShape(160,60)) button2 = Button(Vec2(350,310)) button2.setShape(RectShape(160,60)) button3 = Button(Vec2(350,380)) button3.setShape(RectShape(160,60)) for event in pygame.event.get(): if event.type == MOUSEBUTTONUP: mousex, mousey = event.pos coord = Vec2(mousex,mousey) if button1.isInner(coord) == True: state = SCENE_GAME startmenu_bgm.stop() bgm = False if button2.isInner(coord) == True: state = SCENE_INSTRUCTION if button3.isInner(coord) == True: startmenu_bgm.stop() bgm = False running = False #In-game elif state == SCENE_GAME: if bgm == False: play_bgm.play() bgm = True #rolling sky screen.blit(sky,(rotateTimer,0)) screen.blit(sky,(rotateTimer+8400,0)) rotateTimer -= 1 #far background screen.blit(far_background, (0,0)) #rolling background screen.blit(background,(rotateTimer,0)) screen.blit(background,(rotateTimer+8400,0)) rotateTimer -= 1 #Life points and stone screen.blit(stone,stonePosition) if(1 <= life): screen.blit(heart1,life1Position) dinoCenter = 185 if(2 <= life): screen.blit(heart1,life2Position) dinoCenter = 95 if(3 <= life): screen.blit(heart1,life3Position) dinoCenter = 25 #rotateTimer initializing if rotateTimer == -8400: rotateTimer = 0 #player+dino animation drawPlayerAndDino(screen,timer,playerFrames,dinoFrames,playerPosition,dinoPosition) #moving player back and forth if playerPosition[0] == 280: addPlayerx = 1 if playerPosition[0] == 320: addPlayerx = -1 #moving dino back and forth if dinoPosition[0] <= dinoCenter - 15: addDinox = 1 if dinoPosition[0] >= dinoCenter + 15: addDinox = -1 playerPosition[0] += addPlayerx dinoPosition[0] += addDinox screen.blit(cloud, (0,0)) #questions if(questionOn == False): questionOffTimer += 1 else: questionOnTimer += 1 #If 60 frame has passed with question off, show question if(questionOffTimer == 1 * fps): questionOffTimer = 0 questionOn = True questionCurrentNo = random.randrange(0,len(questions)) #If 60 frame has passed with question on, remove question, decrease life, and show next question if(questionOnTimer == 1 * fps): questionOnTimer = 0 questionCurrentNo = random.randrange(0,len(questions)) life -= 1 #Question is on. Show question if(questionOn == True): #Draw cloud #screen.blit(cloud,(0,0)) #Why slow??? #Draw characters screen.blit(questionsLoverImage[questionCurrentNo],loverPosition) screen.blit(questionsLoveeImage[questionCurrentNo],loveePosition) #Draw heart screen.blit(heart2,heartPosition) #Draw buttons screen.blit(trueImage,trueButtonPosition) screen.blit(falseImage,falseButtonPosition) for event in pygame.event.get(): #Quit game if event.type == QUIT: running = False #Mouse clicked, check whether trueButton or falseButton is clicked elif event.type == MOUSEBUTTONDOWN: mousex,mousey = event.pos coord = Vec2(mousex,mousey) #True button clicked if(trueButton.isInner(coord) == True): if(questionOn == True): if(questions[questionCurrentNo].answer == True): None #Wrong else: life -= 1 questionOnTimer = 0 questionCurrentNo = random.randrange(0,len(questions)) #False button clicked if(falseButton.isInner(coord) == True): if(questionOn == True): #Wrong if(questions[questionCurrentNo].answer == True): life -= 1 else: None questionOnTimer = 0 questionCurrentNo = random.randrange(0,len(questions)) if event.type == QUIT: running = False elif event.type == MOUSEBUTTONUP: mousex, mousey = event.pos #Dead if(life == 0): state = SCENE_DEATH play_bgm.stop() bgm = False timer = 0 #Start showing house if(houseOn == False and timer == goalTime - houseAppearTime): houseOn = True if(houseOn and houseMoveTimer < houseAppearTime): screen.blit(house,housePosition) screen.blit(houseBack,houseBackPosition) housePosition = (housePosition[0] - houseMoveDistance / houseAppearTime, housePosition[1]) houseBackPosition = (houseBackPosition[0] - houseMoveDistance / houseAppearTime, housePosition[1]) ++houseMoveTimer if(timer == goalTime): play_bgm.stop() bgm = False state = SCENE_WIN addPlayerx = (playerDestinationX - playerPosition[0]) * 1.0 / (winAnimationCounter * 1.0) #Display time leftTime = font.render("Left Time : " + `(goalTime - timer) / fps`, False, black) screen.blit(leftTime,(SCREEN_WIDTH - 150,30)) #Add timer timer += 1 #Instruction page elif state == SCENE_INSTRUCTION: screen.blit(instructionpage, (0,0)) screen.blit(home_button, (520,320)) button4 = Button(Vec2(600,350)) button4.setShape(RectShape(160,60)) for event in pygame.event.get(): if event.type == MOUSEBUTTONUP: mousex, mousey = event.pos coord = Vec2(mousex,mousey) if button4.isInner(coord) == True: state = SCENE_MAIN_MENU #Dead. Show death animation elif state == SCENE_DEATH: #rolling sky screen.blit(sky,(rotateTimer,0)) screen.blit(sky,(rotateTimer+8400,0)) #far background screen.blit(far_background, (0,0)) #rolling background screen.blit(background,(rotateTimer,0)) screen.blit(background,(rotateTimer+8400,0)) if bgm == False: gameover_bgm.play() bgm = True #bite animation if timer <= 4*1: screen.blit(bite1, (dinoPosition[0],270)) elif timer<= 4*2: screen.blit(bite2, (dinoPosition[0],270)) elif timer <= 4*3: screen.blit(bite3, (dinoPosition[0],270)) else: if timer%2 == 0: screen.blit(bite4, (dinoPosition[0],270)) else: screen.blit(bite5, (dinoPosition[0],270)) timer += 1 screen.blit(gameover_font, (0,0)) screen.blit(home_button, (20,320)) screen.blit(end_button2, (520,320)) button5 = Button(Vec2(600,350)) button5.setShape(RectShape(160,60)) button6 = Button(Vec2(100,350)) button6.setShape(RectShape(160,60)) for event in pygame.event.get(): if event.type == MOUSEBUTTONUP: mousex, mousey = event.pos coord = Vec2(mousex,mousey) if button5.isInner(coord) == True: running = False if button6.isInner(coord) == True: state = SCENE_MAIN_MENU gameover_bgm.stop() bgm = False #Won!! elif state == SCENE_WIN: if bgm == False: startmenu_bgm.play() bgm = True playerPosition[0] += addPlayerx #rolling sky screen.blit(sky,(rotateTimer,0)) screen.blit(sky,(rotateTimer+8400,0)) #far background screen.blit(far_background, (0,0)) #rolling background screen.blit(background,(rotateTimer,0)) screen.blit(background,(rotateTimer+8400,0)) drawDino(screen,timer,dinoFrames,dinoPosition) screen.blit(house,housePosition) drawPlayer(screen,timer,playerFrames,playerPosition) screen.blit(houseBack,houseBackPosition) if(winAnimationCounter != 0): timer += 1 winAnimationCounter -= 1 else: addPlayerx = 0 screen.blit(safely_home_font, (0,0)) screen.blit(home_button, (20,320)) screen.blit(end_button2, (520,320)) button5 = Button(Vec2(600,350)) button5.setShape(RectShape(160,60)) button6 = Button(Vec2(100,350)) button6.setShape(RectShape(160,60)) for event in pygame.event.get(): if event.type == MOUSEBUTTONUP: mousex, mousey = event.pos coord = Vec2(mousex,mousey) if button5.isInner(coord) == True: running = False if button6.isInner(coord) == True: state = SCENE_MAIN_MENU clock.tick(fps) pygame.display.update() pygame.quit()