Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Jordan <bcjordan@gmail.com>2009-06-21 18:37:44 (GMT)
committer Brian Jordan <bcjordan@gmail.com>2009-06-21 18:37:44 (GMT)
commit5b05d263ac35bd26e25d434c86948003883c5d03 (patch)
tree8e3255715b40a2359b36f2d353bbca6337f242c8
parent60f20c2d37e4ac74dba8fbe309d7920b4cc02ea6 (diff)
Add XOlympics physics example
-rw-r--r--NEWS7
-rw-r--r--data/graphics/xolympics150
2 files changed, 154 insertions, 3 deletions
diff --git a/NEWS b/NEWS
index 6eca394..8b3c153 100644
--- a/NEWS
+++ b/NEWS
@@ -1,8 +1,9 @@
-32
+33
+* Include XOlympics physics game example
-32 (Soas-only release)
+32
* Trac #607 (SugarLabs), Font size needs to be 10 for Soas
- (font size of 8 recommended for XO-1 users)
+ (font size of 8 for XO-1 users)
31
diff --git a/data/graphics/xolympics b/data/graphics/xolympics
new file mode 100644
index 0000000..5fe273c
--- /dev/null
+++ b/data/graphics/xolympics
@@ -0,0 +1,150 @@
+#!/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()
+