Friday, February 28, 2014

Dodger (02.24.2014-02.28.2014)


Created sprites for dodger.
Finished dodger code.
Here thou art:

import pygame, random, sys
from pygame.locals import *

WINDOWWIDTH=600
WINDOWHEIGHT=600
TEXTCOLOR=(255, 255, 255)
BACKGROUNDCOLOR=(0, 0, 0)
FPS=40
BADDIEMINSIZE=10
BADDIEMAXSIZE=40
BADDIEMINSPEED=1
BADDIEMAXSPEED=6
ADDNEWBADDIERATE=7
PLAYERMOVERATE=6

def terminate():
    pygame.quit()
    sys.exit()

def waitForPlayerToPressKey():
    while True:
        for event in pygame.event.get():
            if event.type==QUIT:
                terminate()
            if event.type==KEYDOWN:
                if event.key==K_ESCAPE: #pressing escape quits
                    terminate()
                return

def playerHasHitBaddie(playerRect, baddies):
    for b in baddies:
        if playerRect.colliderect(b['rect']):
            return True
    return False

def drawText(text, font, surface, x, y):
    textobj=font.render(text, 1, TEXTCOLOR)
    textrect=textobj.get_rect()
    textrect.topleft=(x, y)
    surface.blit(textobj, textrect)

#Set up pygame, the window, and the mouse cursor
pygame.init()
mainClock=pygame.time.Clock()
windowSurface=pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT))
pygame.display.set_caption('Dodger')
pygame.mouse.set_visible(False)

#Set up fonts
font=pygame.font.SysFont(None, 48)

#Set up sounds
gameOverSound=pygame.mixer.Sound('gameOver.mp3')
pygame.mixer.music.load('background.mp3')

#Set up images
playerImage=pygame.image.load('shrek.png')
playerRect=playerImage.get_rect()
baddieImage=pygame.image.load('shrekEnemy.png')

#Show the "Start" screen
drawText('Dodger', font, windowSurface, (WINDOWWIDTH/3), (WINDOWHEIGHT/3))
drawText('press a key to start.', font, windowSurface, (WINDOWWIDTH/3), (WINDOWHEIGHT/3)+50)
pygame.display.update()
waitForPlayerToPressKey() or pygame.mouse.get_pressed(True, False, False)

topScore=0
while True:
    #Set up the start of the game
    baddies=[]
    score=0
    playerRect.topleft=(WINDOWWIDTH/2, WINDOWHEIGHT-50)
    moveLeft=moveRight=moveUp=moveDown=False
    reverseCheat=slowCheat=False
    baddieAddCounter=0
    pygame.mixer.music.play(-1, 0.0)

    while True: #The game loop runs while the game part is playing
        score+=1

        for event in pygame.event.get():
            if event.type==QUIT:
                terminate()
             
            if event.type==KEYDOWN:
                if event.key==ord('z'):
                    reverseCheat=True
                if event.key==ord('x'):
                    slowCheat=True
                if event.key==K_LEFT or event.key==ord('a'):
                    moveRight=False
                    moveLeft=True
                if event.key==K_RIGHT or event.key==ord('d'):
                    moveLeft=False
                    moveRight=True
                if event.key==K_UP or event.key==ord('s'):
                    moveDown=False
                    moveUp=True
                if event.key==K_DOWN or event.key==ord('w'):
                    moveUp=False
                    moveDown=True

            if event.type==KEYUP:
                if event.key==ord('z'):
                    reverseCheat=False
                if event.key==ord('x'):
                    slowCheat=False
                    score=0
                if event.key==ord(','):
                    pygame.mixer.music.stop()
                if event.key==ord('.'):
                    pygame.mixer.music.play(-1, 0.0)
                 
                if event.key==K_ESCAPE:
                    terminate()
                 
                if event.key==K_LEFT or event.key==ord('a'):
                    moveLeft=False
                if event.key==K_RIGHT or event.key==ord('d'):
                    moveRight=False
                if event.key==K_UP or event.key==ord('w'):
                    moveUp=False
                if event.key==K_DOWN or event.key==ord('s'):
                    moveDown=False

            if event.type==MOUSEMOTION:
                #If the mouse moves, move the player where the cursor is
                playerRect.move_ip(event.pos[0]-playerRect.centerx, event.pos[1]-playerRect.centery)

        #Add new enemies at the top of the screen, if needed
        if not reverseCheat and not slowCheat:
            baddieAddCounter+=1
            if baddieAddCounter==ADDNEWBADDIERATE:
                baddieAddCounter=0
                baddieSize=random.randint(BADDIEMINSIZE, BADDIEMAXSIZE)
                newBaddie={'rect':pygame.Rect(random.randint(0, WINDOWWIDTH-baddieSize), 0-baddieSize, baddieSize, baddieSize),
                           'speed':random.randint(BADDIEMINSPEED, BADDIEMAXSPEED),
                           'surface':pygame.transform.scale(baddieImage, (baddieSize, baddieSize)),
                           }
                baddies.append(newBaddie)

            #Move the player around
            if moveLeft and playerRect.left>0:
                playerRect.move_ip(-1*PLAYERMOVERATE, 0)
            if moveRight and playerRect.right<WINDOWWIDTH:
                playerRect.move_ip(PLAYERMOVERATE, 0)
            if moveUp and playerRect.top>0:
                playerRect.move_ip(0, -1*PLAYERMOVERATE)
            if moveDown and playerRect.bottom<WINDOWHEIGHT:
                playerRect.move_ip(0, PLAYERMOVERATE)

            #Move the mouse cursor to match the player
            pygame.mouse.set_pos(playerRect.centerx, playerRect.centery)

            #Move the baddies down
            for b in baddies:
                if not reverseCheat and not slowCheat:
                    b['rect'].move_ip(0, b['speed'])
                elif reverseCheat:
                    b['rect'].move_ip(0, -5)
                elif slowCheat:
                    b['rect'].move_ip(0, 1)

            #Delete enemies that have fallen past the bottom
            for b in baddies[:]:
                if b['rect'].top>WINDOWHEIGHT:
                    baddies.remove(b)

            #Draw the game world on the window
            windowSurface.fill(BACKGROUNDCOLOR)

            #Draw the scores and top score
            drawText('Score: %s'%(score), font, windowSurface, 10, 0)
            drawText('Top score: %s'%(topScore), font, windowSurface, 10, 40)

            #Draw the players' rectangle
            windowSurface.blit(playerImage, playerRect)

            #Draw each baddie
            for b in baddies:
                windowSurface.blit(b['surface'], b['rect'])

            pygame.display.update()

            #Check if any of the baddies have hit the player
            if playerHasHitBaddie(playerRect, baddies):
                if score>topScore:
                    topScore=score
                break

            mainClock.tick(FPS)

    #Stop the game and show the 'game over' screen
    pygame.mixer.music.stop()
    gameOverSound.play()
    drawText('GAME OGRE', font, windowSurface, (WINDOWWIDTH/3), (WINDOWHEIGHT/3))
    drawText('press a key to play again.', font, windowSurface, (WINDOWWIDTH/3)-80, (WINDOWHEIGHT/3)+50)

    pygame.display.update()
    waitForPlayerToPressKey()

    gameOverSound.stop()

No comments:

Post a Comment