Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:danieljbell
frogger
frogger.py
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File frogger.py of Package frogger
#!/usr/bin/env python """ Frog Game (C) Daniel Bell, 2010. Frog Game is released under the General Public License Version 3. See LICENSE for details. Frog Game is a fun survival game, that is based upon the classic arcade game: Frogger. """ try: import sys import os import pygame import time from pygame.locals import * except ImportError, err: print "Failure loading module. %s" % (err) sys.exit(2) class Leftcar(pygame.sprite.Sprite): """ Left Car functions. """ def __init__(self, left, top): pygame.sprite.Sprite.__init__(self) self.image, self.rect = load_image('bettercar2.gif', -1) self.rect.left = left self.rect.top = top class Rightcar(pygame.sprite.Sprite): """ Left Car functions. """ def __init__(self, left, top): pygame.sprite.Sprite.__init__(self) self.image, self.rect = load_image('bettercar.gif', -1) self.rect.left = left self.rect.top = top class Homefrog(pygame.sprite.Sprite): def __init__(self, left, top): pygame.sprite.Sprite.__init__(self) self.image, self.rect = load_image('smallerfrog.gif', -1) self.rect.left = left self.rect.top = top class Log(pygame.sprite.Sprite): def __init__(self, left, top): pygame.sprite.Sprite.__init__(self) self.image, self.rect = load_image('log.gif') self.rect.left = left self.rect.top = top class Life(pygame.sprite.Sprite): def __init__(self, left, top): pygame.sprite.Sprite.__init__(self) self.image, self.rect = load_image('life.gif') self.rect.left = left self.rect.top = top class Frog(pygame.sprite.Sprite): """ Contains all the functions and information regarding the Frog, player controllable character """ def __init__(self): pygame.sprite.Sprite.__init__(self) self.image, self.rect = load_image('betterfrog.gif', -1) self.rect.left = 266 self.rect.top= 661 self.lives = 3 self.score = 0 self.level = 1 self.gameOver = False self.frogsHome = [False, False, False, False, False] self.onLeftLog = False self.onRightLog = False self.perfectScore = True self.goodScore = True self.startTime = time.time() def update(self): #moves the frog self.gameAreaCheck() def scored(self): self.rect.left = 266 self.rect.top= 661 self.endTime = time.time() - self.startTime self.endTime = int(self.endTime) if self.endTime <5: self.baseScore = 30 elif self.endTime >=6 and self.endTime <15: self.baseScore = 20 else: self.baseScore = 10 if self.perfectScore == True: self.score += (self.baseScore + (self.level*5))*3 elif self.goodScore == True: self.score += (self.baseScore + (self.level*5))*2 else: self.score += self.baseScore + (self.level*5) self.startTime = time.time() def gameAreaCheck(self): if self.onLeftLog != True and self.onRightLog != True: if self.rect.top >=662: self.rect.top -=45 if self.rect.left <=0: self.rect.left +=20 if self.rect.right >=595: self.rect.left -=20 else: if self.rect.right <=0: self.loseLife() if self.rect.left >=600: self.loseLife() def loseLife(self): self.startTime = time.time() self.goodScore = False self.perfectScore = False self.onLeftLog = False self.onRightLog = False self.rect.left = 266 self.rect.top= 661 self.lives -= 1 if self.lives <= 0: self.gameOver = True """ Image Loading Function """ global screen screen = pygame.display.set_mode((592,774), DOUBLEBUF, 32) def load_image(name, colorkey=None): fullname = os.path.join('data/images/', name) try: image = pygame.image.load(fullname) except pygame.error, message: print 'Cannot load image:', fullname raise SystemExit, message image = image.convert() if colorkey is not None: if colorkey is -1: colorkey = image.get_at((0,0)) image.set_colorkey(colorkey, RLEACCEL) return image, image.get_rect() def levelIndicator(level): fontNormal = pygame.font.Font('data/fonts/bgrovealtb.ttf', 28) levelText = fontNormal.render("Level: " + str(level), True, (0, 0, 255), (181, 230, 29)) screen.blit(levelText, (250, 15)) pygame.display.update() def scoreIndicator(score, time, perfect, good): fontNormal = pygame.font.Font('data/fonts/bgrovealtb.ttf', 18) scoreText = fontNormal.render("Score: " + str(score), True, (0, 0, 255), (0, 0, 0)) if time != 0: scoreTime = fontNormal.render("Last Frog Scored in: " + str(time) + " seconds!", True, (0, 0, 255), (0, 0, 0)) screen.blit(scoreTime, (300, 745)) if perfect == True: modifier = fontNormal.render("Score Modifier: (x3)", True, (0, 0, 255), (0, 0, 0)) screen.blit(modifier, (422, 715)) elif good == True and perfect == False: modifier = fontNormal.render("Score Modifier: (x2)", True, (0, 0, 255), (0, 0, 0)) screen.blit(modifier, (422, 715)) else: modifier = fontNormal.render("Score Modifier: (x1)", True, (0, 0, 255), (0, 0, 0)) screen.blit(modifier, (422, 715)) screen.blit(scoreText, (5, 745)) pygame.display.update() def gameOverScreen(score, level): pygame.init() pygame.display.set_caption('Frog Game') logo = pygame.image.load("data/images/logo.png") pygame.display.set_icon(logo) screen = pygame.display.set_mode((592,774), DOUBLEBUF, 32) pygame.display.update() """ Menu """ fontTitle = pygame.font.Font('data/fonts/bgrovealtb.ttf', 72) fontNormal = pygame.font.Font('data/fonts/bgrovealtb.ttf', 28) fontExit = pygame.font.Font('data/fonts/bgrovealtb.ttf', 18) title = fontTitle.render("GAME OVER", True, (0, 0, 255)) caption = fontNormal.render("You Scored: " + str(score), True, (0, 0, 255)) caption2 = fontNormal.render("Level: " + str(level), True, (0, 0, 255)) play = fontNormal.render("Press <SPACE> to Start a New Game", True, (0, 0, 255)) esc = fontExit.render("ESC to exit", True, (0, 0, 255)) screen.blit(caption, (150, 160)) screen.blit(caption2, (150, 200)) screen.blit(title, (100,50)) screen.blit(esc, (0, 0)) screen.blit(play, (60, 700)) pygame.display.update() clock = pygame.time.Clock() while 1: #Get input for event in pygame.event.get(): if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE): sys.exit() if event.type == KEYDOWN and event.key == K_SPACE: game() #using 30 FPS clock.tick(30) def main(): pygame.init() pygame.display.set_caption('Frog Game') logo = pygame.image.load("data/images/logo.png") pygame.display.set_icon(logo) screen = pygame.display.set_mode((592,774), DOUBLEBUF, 32) pygame.display.update() """ Menu """ fontTitle = pygame.font.Font('data/fonts/bgrovealtb.ttf', 72) fontNormal = pygame.font.Font('data/fonts/bgrovealtb.ttf', 28) fontExit = pygame.font.Font('data/fonts/bgrovealtb.ttf', 18) title = fontTitle.render("FROG GAME", True, (0, 0, 255)) caption = fontNormal.render("Welcome To", True, (0, 0, 255)) play = fontNormal.render("Press <SPACE> to Continue", True, (0, 0, 255)) esc = fontExit.render("ESC to exit", True, (0, 0, 255)) screen.blit(caption, (220, 175)) screen.blit(title, (100,200)) screen.blit(esc, (0, 0)) screen.blit(play, (120, 700)) pygame.display.update() clock = pygame.time.Clock() while 1: #Get input for event in pygame.event.get(): if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE): sys.exit() if event.type == KEYDOWN and event.key == K_SPACE: game() #using 30 FPS clock.tick(30) def game(): #Initialise pygame, icons and captions. pygame.init() pygame.display.set_caption('Frog Game') logo = pygame.image.load("data/images/logo.png") pygame.display.set_icon(logo) #Initialise the screen, resolution: 592x774 (which is the size of the current background). #TODO: Make the screen size smaller by default, or allow scrolling to occur in the game. screen = pygame.display.set_mode((592,774), DOUBLEBUF, 32) #Make background backgroundImage = 'data/images/background.png' background = pygame.image.load(backgroundImage).convert() screen.blit(background, (0,0)) pygame.display.update() #Keep track of sprites player = Frog() leftcars = [] """ 0 & 1 = Row 1, 2 & 3 = Row 3, 4 & 5 = Row 5 """ leftcars.append(Leftcar(400, 616)) # 0 leftcars.append(Leftcar(100, 616)) # 1 leftcars.append(Leftcar(400, 526)) # 2 leftcars.append(Leftcar(100, 526)) # 3 leftcars.append(Leftcar(400, 436)) # 4 leftcars.append(Leftcar(100, 436)) # 5 rightcars = [] """ 0 & 1 = Row 1, 2 & 3 = Row 3, 4 & 5 = Row 5 """ rightcars.append(Rightcar(200, 571)) # 0 rightcars.append(Rightcar(500, 571)) # 1 rightcars.append(Rightcar(200, 481)) # 2 rightcars.append(Rightcar(500, 481)) # 3 rightcars.append(Rightcar(200, 391)) # 4 rightcars.append(Rightcar(500, 391)) # 5 homefrogs = [Homefrog(-10,-10), Homefrog(-10,-10), Homefrog(-10,-10), Homefrog(-10,-10), Homefrog(-10,-10)] leftlogs = [Log(20, 301), Log(220, 301), Log(420,301), Log(20, 211), Log(220, 211), Log(420, 211), Log(20, 121), Log(220, 121), Log(420, 121)] rightlogs = [Log(-20, 256), Log(180, 256), Log(380, 256), Log(-20, 166), Log(180, 166), Log(380, 166)] lives = [Life(10, 710), Life(38, 710), Life(66, 710)] speed = 4 """ Using pygame.sprite.OrderedUpdates instead of pygame.sprite.RenderedUpdates due to the need to have the the frog ONTOP of the logs. There is a small performance hit using this function. """ all = pygame.sprite.OrderedUpdates(leftlogs, rightlogs, player, leftcars, rightcars, homefrogs, lives) #Keep track of time clock = pygame.time.Clock() levelIndicator(player.level) scoreIndicator(player.score, 0, player.perfectScore, player.goodScore) #Game Loop while 1: #Get input for event in pygame.event.get(): if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE): sys.exit() if player.gameOver != True: if event.type == KEYDOWN and event.key == K_UP: player.rect.top -= 45 player.onLeftLog = False player.onRightLog = False if event.type == KEYDOWN and event.key == K_DOWN: player.rect.top += 45 player.onLeftLog = False player.onRightLog = False if event.type == KEYDOWN and event.key == K_LEFT: player.rect.left -= 20 player.onLeftLog = False player.onRightLog = False if event.type == KEYDOWN and event.key == K_RIGHT: player.rect.left += 20 player.onLeftLog = False player.onRightLog = False #move objects for car in leftcars: if car.rect.right <=0: car.rect.left = 600 else: car.rect.left -= speed if car.rect.colliderect(player.rect): player.loseLife() scoreIndicator(player.score, 0, player.perfectScore, player.goodScore) for car in rightcars: if car.rect.left >=600: car.rect.right = 0 else: car.rect.left += speed if car.rect.colliderect(player.rect): player.loseLife() scoreIndicator(player.score, 0, player.perfectScore, player.goodScore) for log in leftlogs: if log.rect.right <=0: log.rect.left = 600 else: log.rect.left -=speed if log.rect.colliderect(player.rect): player.onLeftLog = True for log in rightlogs: if log.rect.left >=600: log.rect.right = 0 else: log.rect.left +=speed if log.rect.colliderect(player.rect): player.onRightLog = True if player.rect.top <=301 and player.rect.top >=121: if player.onLeftLog == True: player.rect.left -=speed elif player.onRightLog == True: player.rect.left +=speed else: player.loseLife() scoreIndicator(player.score, 0, player.perfectScore, player.goodScore) if player.rect.top <=100: if player.rect.left >=12 and player.rect.right <=104 and player.frogsHome[0] != True: player.scored() scoreIndicator(player.score, player.endTime, player.perfectScore, player.goodScore) homefrogs[0].rect.left = 35 homefrogs[0].rect.top = 70 player.frogsHome[0] = True elif player.rect.left >=132 and player.rect.right <=224 and player.frogsHome[1] != True: player.scored() scoreIndicator(player.score, player.endTime, player.perfectScore, player.goodScore) homefrogs[1].rect.left = 155 homefrogs[1].rect.top = 70 player.frogsHome[1] = True elif player.rect.left >=252 and player.rect.right <=344 and player.frogsHome[2] != True: player.scored() scoreIndicator(player.score, player.endTime, player.perfectScore, player.goodScore) homefrogs[2].rect.left = 275 homefrogs[2].rect.top = 70 player.frogsHome[2] = True elif player.rect.left >=372 and player.rect.right <=464 and player.frogsHome[3] != True: player.scored() scoreIndicator(player.score, player.endTime, player.perfectScore, player.goodScore) homefrogs[3].rect.left = 395 homefrogs[3].rect.top = 70 player.frogsHome[3] = True elif player.rect.left >=492 and player.rect.right <=584 and player.frogsHome[4] != True: player.scored() scoreIndicator(player.score, player.endTime, player.perfectScore, player.goodScore) homefrogs[4].rect.left = 515 homefrogs[4].rect.top = 70 player.frogsHome[4] = True else: player.loseLife() scoreIndicator(player.score, 0, player.perfectScore, player.goodScore) if player.frogsHome[0] == True and player.frogsHome[1] == True and player.frogsHome[2] == True and player.frogsHome[3] == True and player.frogsHome[4] == True: player.frogsHome[0] = False player.frogsHome[1] = False player.frogsHome[2] = False player.frogsHome[3] = False player.frogsHome[4] = False homefrogs[0].rect.left = -10 homefrogs[0].rect.top = -10 homefrogs[1].rect.left = -10 homefrogs[1].rect.top = -10 homefrogs[2].rect.left = -10 homefrogs[2].rect.top = -10 homefrogs[3].rect.left = -10 homefrogs[3].rect.top = -10 homefrogs[4].rect.left = -10 homefrogs[4].rect.top = -10 if player.lives == 3: player.goodScore = True if player.lives <3: player.lives +=1 if player.lives == 2: lives[1].rect.left = 38 elif player.lives == 3: lives[2].rect.left = 66 player.level +=1 speed +=1 levelIndicator(player.level) if player.gameOver: gameOverScreen(player.score, player.level) if player.lives == 2: lives[2].rect.left = -50 if player.lives == 1: lives[1].rect.left = -50 #Clear sprite all.clear(screen, background) #Update sprites all.update() #Redraw sprites dirty = all.draw(screen) pygame.display.update(dirty) #Maintain frame rate #using 30 FPS clock.tick(30) if __name__ == '__main__': main()
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor