#!/usr/bin/python
import os, sys
import pygame
from pygame.locals import *
##
## Define our game initial variables
##
DEBUG = 1
DEBUG = 1
VERSION = "$Id: pyfrog.py,v 1.5 2011/11/05 04:07:53 nick Exp $"
TITLE = "PyFrog"
SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480
COLORKEY = ( 255, 0, 255 )
TRUE = 1
FALSE = 0
##
## Baddies
##
VEHICLE = 0
LOG = 1
TURTLE = 2
GATOR = 3
SNAKE = 4
BEAVER = 5
##
## Goal areas
##
MAX_GOALS = 5
##
## Logs
##
SHORT_LOG = 4
MEDIUM_LOG = 6
LONG_LOG = 9
MAX_WOOD = 7
##
## Input
##
UP = 273
DOWN = 274
RIGHT = 275
LEFT = 276
##
## Turtles
##
DIVE_START_TIME = 50
DIVE_PHASE_TIME = 20
MAX_TURTLES = 9
TURTLE_ANIM_TIME= 5
##
## Vehicles
##
MAX_VEHICLES = 40
##
## Our points table
##
SCORE_HOP = 10
SCORE_GOAL = 50
SCORE_LEVEL = 1000
SCORE_FLY = 150
SCORE_PINK = 200
SCORE_SECONDS = 10
HIGH_SCORE = 4630
SCORE_FREE_FROG = 2000
LIVES = 3
global screen
##
## Some general game state stats
##
class mainGame( ):
def __init__( self ):
self.level = 0
self.playing = FALSE
self.goDelay = 0
self.score = 0
self.lives = 0
self.freefrog = 0
self.drawBG = FALSE
class images( ):
def __init__( self ):
self.title_image = 0
self.title_rect = 0
self.frogger_image = 0
self.frogger_rect = 0
self.background_image = 0
self.background_rect = 0
class sounds( ):
def __init__( self ):
self.hop = 0
class Log( pygame.sprite.Sprite ):
def __init__( self ):
pygame.sprite.Sprite.__init__( self )
self.size = 0
self.placement = [ 0, 0 ]
self.oPlacement = [ 0, 0 ]
self.row = 0
self.speed = 0
self.pink = 0
self.gator = 0
def update( self ):
self.placement += self.speed
class Vehicles( pygame.sprite.Sprite):
def __init__( self ):
self.placement = [ 0, 0 ]
self.oPlacement = [ 0, 0 ]
self.direction = 0
self.row = 0
self.speed = 0
self.level = 0
self.image = 0
def update( self ):
self.placement += self.speed
def draw( self ):
print "D: Display Vehicle"
class Goals( pygame.sprite.Sprite ):
def __init__( self ):
pygame.sprite.Sprite.__init__( self )
self.x, self.y, self.w, self.h = 0
self.occupied = 0
self.fly = 0
self.gator = 0
class pyFrog( ):
def __init__( self ):
# pygame.sprite.Sprite.__init( self )
self.pos = [0, 0]
self.oldPos = [0, 0]
self.direction = 0
self.location = 0
self.hopCount = 0
self.currentRow = 0
self.alive = 1
self.riding = 0
self.ridingType = 0
self.deathType = 0
self.deathCount = 0
def main( ):
pygame.mixer.init( )
pygame.mixer.pre_init( 44100, -16, 2, 2048 )
pygame.init( )
global game
global screen
global frog
global gfx
global snd
screen = pygame.display.set_mode( ( SCREEN_WIDTH, SCREEN_HEIGHT ) )
game = mainGame( )
frog = pyFrog( )
gfx = images( )
snd = sounds( )
pygame.display.set_caption( TITLE )
pygame.mouse.set_visible( 0 )
beginGame( )
def beginGame( ):
next_heartbeat = 0
done = FALSE
if loadMedia( ) <= 0:
print "Error: Failed to load graphics and audio!\n"
return
if DEBUG: print "D: Starting main game loop"
clock = pygame.time.Clock( )
while 1:
for event in pygame.event.get( ):
if keyEvents( event ): return
# if pygame.GetTicks( ) >= next_heartbeat:
# next_hearbeat = pygame.GetTicks( ) + heartbeat( )
clock.tick( heartbeat( ) )
def keyEvents( event ):
if event.type == QUIT: return 1
elif event.type == KEYDOWN:
print "Key Event Type: ", event.key
if event.key == K_ESCAPE: return 1
elif event.key == K_p:
if game.level:
if game.playing:
game.playing = FALSE
else:
game.playing = TRUE
print "D: Pausing Game"
elif event.key == K_1:
if not game.level and not game.playing:
game.level = 1
game.playing = TRUE
game.lives = LIVES
print "D: Starting Game"
if game.level and game.playing and frog.alive:
if event.key == K_LEFT:
if not frog.direction:
print "D: Frogger going left"
frog.hopCount = 0
frog.direction = LEFT
#snd.hop.play()
if event.key == K_RIGHT:
if not frog.direction:
print "D: Frogger going right"
frog.hopCount = 0
frog.direction = RIGHT
#snd.hop.play()
#playSound( frogger.s_hop )
if event.key == K_UP:
if not frog.direction:
print "D: Frogger going up"
frog.hopCount = 0
frog.direction = UP
frog.currentRow += 1
#playSound( frogger.s_hop )
if event.key == K_DOWN:
if not frog.direction:
print "D: Frogger going down"
frog.hopCount = 0
frog.direction = DOWN
frog.direction -= 1
#playSound( frogger.s_hop )
return 0
def updateGameState( ):
if game.lives <= 0:
game.goDelay += 1
drawGameOver( )
if goDelay > 7:
game.playing = FALSE
game.lives = 0
game.level = 0
game.score = 0
game.freefrog = 0
game.drawBG = FALSE
# for i = 0; i < MAX_GOALS; i++:
# goals[i].occupied = 0
return 500
drawGameScreen( )
return 50
def drawGameScreen( ):
if frog.direction: moveFrog( )
screen.blit( gfx.background_image, ( 0, 0 ) )
pygame.display.flip( )
def moveFrog( ):
frog.hopCount += 1
if frog.hopCount > 60:
print "D: Try Again"
frog.direction = FALSE
def heartbeat( ):
ticks = 0;
if game.level:
if game.playing:
ticks = updateGameState( )
if ticks <= 0: ticks = 50
return ticks
else:
drawPauseScreen( )
return 500
else:
drawTitleScreen( )
return 500
def drawGameOver( ):
print "D: Game Over man! Game Over!"
def drawPauseScreen( ):
print "D: Game Paused"
def drawTitleScreen( ):
screen.blit( gfx.background_image, ( 0, 0 ) )
screen.blit( gfx.title_image, ( 35, 92 ) )
pygame.display.flip( )
def loadMedia( ):
print "D: Loading media"
gfx.background_image, gfx.background_rect = loadImage( 'gameboard.png' )
gfx.frogger_image, gfx.frogger_rect = loadImage( 'frogger.png' )
gfx.title_image, gfx.title_rect = loadImage( 'pyfrog-title.png', -1 )
snd.hop = loadSound( 'dp_frogger_hop.ogg' )
return 1
def loadImage( filename, colorKey = None ):
fullname = os.path.join( 'images', filename )
try:
image = pygame.image.load( fullname )
except pygame.error, message:
print "ERROR: Failed to 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 loadSound( name ):
class noSound:
def play( self ): pass
if not pygame.mixer or not pygame.mixer.get_init( ):
return noSound( )
fullname = os.path.join( 'sounds', name )
if os.path.exists( fullname ) == False:
sound = pygame.mixer.Sound( fullname )
else:
print "ERROR: Audio file missing: " + fullname
return noSound
return sound
################################################################################
## Begin Here
################################################################################
if __name__ == '__main__': main()
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>