Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #
- import pygame
- from pygame.locals import *
- from random import randint
- import math
- class Paddle(pygame.sprite.Sprite):
- WIDTH, HEIGHT = 15, 300
- SPEED = 20.
- def __init__(self, pos):
- pygame.sprite.Sprite.__init__(self)
- self.rect = Rect(0,0, Paddle.WIDTH, Paddle.HEIGHT)
- self.rect.center = pos
- self.image = pygame.Surface(self.rect.size)
- self.image.fill(Color("gray80"))
- def handle_keystate(self, keys):
- if keys[pygame.K_w]:
- self.rect.top -= self.SPEED
- elif keys[pygame.K_s]:
- self.rect.top += self.SPEED
- class Ball(pygame.sprite.Sprite):
- SPEED = 10.
- def __init__(self, game):
- pygame.sprite.Sprite.__init__(self)
- self.game = game
- self.rect = Rect(0,0,20,20)
- self.image = pygame.Surface(self.rect.size)
- self.image.fill(Color("gray20"))
- self.velx, self.vely = self.SPEED, self.SPEED
- def draw(self):
- self.game.screen.blit(self.image, self.rect)
- def reset(self):
- # to center
- self.rect.center = self.game.screen.get_rect().center
- # random direction, with same initial speed
- angle = math.radians(randint(0,360))
- self.velx = math.cos(angle) * self.SPEED
- self.vely = math.sin(angle) * self.SPEED
- def update(self):
- # move
- self.rect.x += self.velx
- self.rect.y += self.vely
- # bounce walls
- if self.rect.top <= 0:
- self.vely *= -1
- if self.rect.bottom >= self.game.screen.get_rect().bottom:
- self.vely *= -1
- # offscreen
- if not self.rect.colliderect(self.game.screen.get_rect()):
- if self.rect.left <= 0:
- print "ai scores"
- else:
- print "human scores"
- self.reset()
- def handle_collision(self, other):
- self.velx *= -1
- self.vely *= -1
- class GameMain():
- """game Main. entry point. handles intialization of game and graphics, as well as game loop."""
- done = False
- color_bg = Color('gray30') # or also: Color(50,50,50) , or: Color('#fefefe')
- def __init__(self, width=800, height=600):
- """
- """
- pygame.init()
- self.width, self.height = width, height
- self.screen = pygame.display.set_mode(( self.width, self.height ))
- self.clock = pygame.time.Clock()
- self.player = Paddle(( 50 ,300))
- self.ai = Paddle(( self.screen.get_rect().right - 50,300))
- self.paddles = pygame.sprite.Group()
- self.ball = Ball(self)
- self.paddles.add( self.player, self.ai)
- def main_loop(self):
- """Game() main loop."""
- while not self.done:
- self.handle_events()
- # move ball
- self.ball.update()
- for p in self.paddles:
- if self.ball.rect.colliderect(p.rect):
- self.ball.handle_collision(p)
- self.draw()
- self.clock.tick(60)
- def draw(self):
- """draw screen"""
- self.screen.fill( self.color_bg )
- self.paddles.draw(self.screen)
- self.ball.draw()
- pygame.display.flip()
- def handle_events(self):
- """handle events: keyboard, mouse, etc."""
- events = pygame.event.get()
- # keystates
- keys = pygame.key.get_pressed()
- self.player.handle_keystate(keys)
- # events
- for event in events:
- if event.type == pygame.QUIT: self.done = True
- # event: keydown
- elif event.type == KEYDOWN:
- if event.key == K_ESCAPE: self.done = True
- elif event.key == K_SPACE:
- self.ball.reset()
- if __name__ == "__main__":
- game = GameMain()
- game.main_loop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement