#!/usr/bin/python """ XOlympics is a 2 player game where you are a triangle! Use w,a,s,d and up,down,left,right to play. Score by making the newest ball hit your opponent's wall. """ import pippy, pygame, sys, math from pygame.locals import * from pippy import physics from pygame.color import * from pippy.physics import box2d class XOlympicsGame: def __init__(self,screen): self.rightscore = self.leftscore = 0 self.forcespeed = 75 self.jumpforce = 20 self.leftDPress = False self.rightDPress = False self.leftLPress = False self.leftRPress = False self.leftJump = False self.rightLPress = False self.rightRPress = False self.rightJump = False self.updateList = [] self.screen = pygame.display.set_mode((1200,900)) self.clock = pygame.time.Clock() self.font = pygame.font.Font(None, 24) # font object # set up the world (instance of Elements) self.world = physics.Elements(self.screen.get_size()) self.world.renderer.set_surface(self.screen) # set up static environment self.world.set_color((0, 255, 0)) self.world.add.ground() self.ball = self.world.add.ball((600, 0), 50) # add the left border and player (red) self.world.set_color((255, 0, 0)) self.world.add.rect((0,-20), 25, 900, dynamic=False, density=1.0, restitution=0.16, friction=0.5) self.leftplayer = self.world.add.poly(( 264.0, 81.0 ), ((-109.9405166666667, -64.244016666666653), (110.60718333333335, -63.089316666666605), (-0.66666666666668561, 127.33333333333337)) , dynamic=True, density=1.0, restitution=0.16, friction=0.5, screenCoord=False) # add the right border and player (blue) self.world.set_color((0, 0, 255)) self.world.add.rect((1180,-20), 25, 900, dynamic=False, density=1.0, restitution=0.16, friction=0.5) self.rightplayer = self.world.add.poly(( 885.0, 78.0 ), [(108.94051666666667, -65.976066666666611), (2.6666666666666288, 127.33333333333337), (-111.60718333333341, -61.357266666666646)] , dynamic=True, density=1.0, restitution=0.16, friction=0.5, screenCoord=False) # we're getting 2 grounds - grey and green. wtf. self.leftplayer.linearDamping = 0.07 self.test = self.leftplayer.GetWorldCenter() def run(self): self.running = True while self.running: for event in pygame.event.get(): if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE): self.running = False if (event.type == KEYDOWN and (event.key == K_a or event.key == K_KP4)): self.leftLPress = True if (event.type == KEYUP and (event.key == K_a or event.key == K_KP4)): self.leftLPress = False if (event.type == KEYDOWN and (event.key == K_s or event.key == K_KP2)): self.leftDPress = True if (event.type == KEYUP and (event.key == K_s or event.key == K_KP2)): self.leftDPress = False if (event.type == KEYDOWN and (event.key == K_d or event.key == K_KP6)): self.leftRPress = True if (event.type == KEYUP and (event.key == K_d or event.key == K_KP6)): self.leftRPress = False if (event.type == KEYDOWN and (event.key == K_w or event.key == K_KP8)): self.leftJump = True if (event.type == KEYUP and (event.key == K_w or event.key == K_KP8)): self.leftJump = False if (event.type == KEYDOWN and (event.key == K_LEFT or event.key == K_KP7)): self.rightLPress = True if (event.type == KEYUP and (event.key == K_LEFT or event.key == K_KP7)): self.rightLPress = False if (event.type == KEYDOWN and (event.key == K_RIGHT or event.key == K_KP1)): self.rightRPress = True if (event.type == KEYUP and (event.key == K_RIGHT or event.key == K_KP1)): self.rightRPress = False if (event.type == KEYDOWN and (event.key == K_UP or event.key == K_KP9)): self.rightJump = True if (event.type == KEYUP and (event.key == K_UP or event.key == K_KP9)): self.rightJump = False if (event.type == KEYDOWN and (event.key == K_DOWN or event.key == K_KP3)): self.rightDPress = True if (event.type == KEYUP and (event.key == K_DOWN or event.key == K_KP3)): self.rightDPress = False if self.leftLPress: self.leftplayer.ApplyForce(box2d.b2Vec2(-self.forcespeed,0), self.leftplayer.GetWorldCenter()) if self.leftRPress: self.leftplayer.ApplyForce(box2d.b2Vec2(self.forcespeed,0), self.leftplayer.GetWorldCenter()) if self.leftJump: if self.leftplayer.GetWorldCenter().y < 0.75: self.leftplayer.ApplyImpulse(box2d.b2Vec2(0,self.jumpforce), self.leftplayer.GetWorldCenter()) if self.rightLPress: self.rightplayer.ApplyForce(box2d.b2Vec2(-self.forcespeed,0), self.rightplayer.GetWorldCenter()) if self.rightRPress: self.rightplayer.ApplyForce(box2d.b2Vec2(self.forcespeed,0), self.rightplayer.GetWorldCenter()) if self.rightDPress: self.rightplayer.ApplyImpulse(box2d.b2Vec2(0,-self.jumpforce), self.rightplayer.GetWorldCenter()) if self.rightJump: if self.rightplayer.GetWorldCenter().y < 0.75: self.rightplayer.ApplyImpulse(box2d.b2Vec2(0,self.jumpforce), self.rightplayer.GetWorldCenter()) if self.leftDPress: self.leftplayer.ApplyImpulse(box2d.b2Vec2(0,-self.jumpforce), self.leftplayer.GetWorldCenter()) # Clear Display if self.ball.GetWorldCenter().x < 1: self.leftscore += 1 print "Goal Blue!", self.leftscore self.world.set_color((0, 0, 255)) self.ball = self.world.add.ball((600, 0), 50) elif self.ball.GetWorldCenter().x > 11: self.rightscore += 1 print "Goal Red!", self.rightscore self.world.set_color((255, 0, 0)) self.ball = self.world.add.ball((600, 0), 50) self.screen.fill((255,255,255)) # Update & Draw World self.world.update() self.world.draw() # Flip Display pygame.display.flip() # Try to stay at 30 FPS self.clock.tick(30) # originally 50 def main(): toolbarheight = 0 tabheight = 0 pygame.init() pygame.display.init() x,y = pygame.display.list_modes()[0] screen = pygame.display.set_mode((x,y-toolbarheight))#-tabheight)) # create an instance of the game game = XOlympicsGame(screen) # start the main loop game.run() # make sure that main get's called if __name__ == '__main__': main()