import pygame
import sys
import Vec2D
import math
from constants import *
from pygame.locals import *
from objects import Text, Ball, Player, Enemy
class Game(object):
def main(self):
# initialize ball
vector = Vec2D.Vec2D().from_magn_and_angle(BALL_SPEED, math.radians(0))
self.ball = Ball(self, vector)
# initialize enemy
self.enemy = Enemy(self.ball)
# initialize player
self.player = Player(self.ball, PLAYER_SIDE)
# initialize groups
self.ballsprite = pygame.sprite.Group(self.ball)
self.paddle_sprites = pygame.sprite.Group(self.enemy, self.player)
# initialize background
screen = pygame.display.get_surface()
self.background = pygame.Surface(screen.get_size())
self._draw_background()
screen.blit(self.background, (0,0))
# initialize text
self.left_score = Text('', 32, WHITE, top = 10, right = SCREEN_WIDTH/2 - 20)
self.right_score = Text('', 32, WHITE, top = 10, left = SCREEN_WIDTH/2 + 20)
self.pause_text = Text('PAUSE', 64, RED,
centerx = SCREEN_WIDTH/2, centery = SCREEN_HEIGHT/2)
# initialize music
self.theme_music = pygame.mixer.music.load('theme.mp3')
pygame.mixer.music.play(-1)
# initialize clock
clock = pygame.time.Clock()
# pause flag
paused = False
while 1:
dt = clock.tick(FPS) / 1000
for event in pygame.event.get():
if event.type == QUIT or (event.type == KEYUP and event.key == K_ESCAPE):
pygame.quit()
sys.exit()
elif event.type == KEYUP:
if event.key == K_UP or event.key == K_DOWN:
self.player.movepos = [0, 0]
self.player.state = 'still'
elif event.type == KEYDOWN:
if event.key == K_p:
if not paused:
pygame.mixer.music.pause()
pygame.time.delay(150)
paused = True
else:
pygame.mixer.music.unpause()
pygame.time.delay(150)
paused = False
if not paused:
# erase sprites
screen.blit(self.background, self.ball.rect, self.ball.rect)
screen.blit(self.background, self.player.rect, self.player.rect)
screen.blit(self.background, self.enemy.rect, self.enemy.rect)
# erase scores
screen.blit(self.background, self.left_score.rect, self.left_score.rect)
screen.blit(self.background, self.right_score.rect, self.right_score.rect)
# erase pause text
screen.blit(self.background, self.pause_text.rect, self.pause_text.rect)
# update sprites
self.ballsprite.update(dt)
self.paddle_sprites.update(dt)
# update scores
a, b = self.player.score, self.enemy.score
if self.player.side != 'left':
a = self.enemy.score
b = self.player.score
self.left_score.set_value(a)
self.right_score.set_value(b)
# draw sprites
self.ballsprite.draw(screen)
self.paddle_sprites.draw(screen)
# draw scores
screen.blit(self.left_score.image, self.left_score.rect)
screen.blit(self.right_score.image, self.right_score.rect)
else:
screen.blit(self.pause_text.image, self.pause_text.rect)
# flip display
pygame.display.flip()
def increase_score(self, side):
if self.player.side == side:
self.enemy.score += 1
else:
self.player.score += 1
def _draw_background(self):
self.background.fill(BGCOLOR)
# draw middle line
pygame.draw.line(self.background, WHITE,
(SCREEN_WIDTH/2, 0),
(SCREEN_WIDTH/2, SCREEN_HEIGHT), 2)
leftcolor = BLUE
rightcolor = RED
if self.player.side != 'left':
leftcolor = RED
rightcolor = BLUE
# draw left line
pygame.draw.line(self.background, leftcolor,
(GAP, 0),
(GAP, SCREEN_HEIGHT), 2)
# draw right line
pygame.draw.line(self.background, rightcolor,
(SCREEN_WIDTH - GAP, 0),
(SCREEN_WIDTH - GAP, SCREEN_HEIGHT), 2)
if __name__ == '__main__':
pygame.init()
screen = pygame.display.set_mode(SCREEN_SIZE)
pygame.display.set_caption('Pong!')
pong = Game()
pong.main()