Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/physics.py
diff options
context:
space:
mode:
Diffstat (limited to 'physics.py')
-rw-r--r--physics.py113
1 files changed, 113 insertions, 0 deletions
diff --git a/physics.py b/physics.py
new file mode 100644
index 0000000..47a91fb
--- /dev/null
+++ b/physics.py
@@ -0,0 +1,113 @@
+#==================================================================
+# Physics.activity
+# An attempt at a Phun / Crayon Physics style physics game
+# By Alex Levenson and Brian Jordan
+#==================================================================
+
+import sys
+import math
+import pygame
+from pygame.locals import *
+from pygame.color import *
+import olpcgames
+import elements
+from elements import Elements
+from elements.menu import *
+from tools import *
+from helpers import *
+
+class PhysicsGame:
+ def __init__(self,screen):
+ self.screen = screen
+ # get everything set up
+ self.clock = pygame.time.Clock()
+ self.font = pygame.font.Font(None, 24) # font object
+
+ # setup tools
+ self.tools = {
+ "Triangle": TriangleTool(self),
+ "Box": BoxTool(self),
+ "Circle": CircleTool(self),
+ "Polygon": PolygonTool(self),
+ "Magic Pen": MagicPenTool(self),
+ "Joint": JointTool(self),
+ "Grab": GrabTool(self),
+ "Destroy": DestroyTool(self)
+ }
+ self.currentTool = self.tools["Triangle"]
+
+ # setup the menus
+ self.menu = MenuClass()
+ self.menu.set_width(self.screen.get_width())
+ self.menu.addItem('Box', callback=self.setTool)
+ self.menu.addItem('Circle', callback=self.setTool)
+ self.menu.addItem('Triangle', callback=self.setTool)
+ self.menu.addItem('Polygon', callback=self.setTool)
+ self.menu.addItem('Magic Pen', callback=self.setTool)
+ self.menu.addItem('Grab', callback=self.setTool)
+ self.menu.addItem('Joint', callback=self.setTool)
+ self.menu.addItem('Destroy', callback=self.setTool)
+
+ # set up the world
+ self.world = elements.Elements(self.screen.get_size())
+ self.world.renderer.set_surface(self.screen)
+
+ # load enviornment
+ self.world.add.ground()
+
+ def run(self):
+ self.running = True
+ while self.running:
+ for event in pygame.event.get():
+ self.currentTool.handleEvents(event)
+ # Clear Display
+ self.screen.fill((255,255,255))
+
+ # Update & Draw World
+ self.world.update()
+ self.world.draw()
+
+ # draw output from tools
+ self.currentTool.draw()
+
+ # draw the menu
+ self.menu.draw(self.screen)
+
+ #Print all the text on the screen
+ text = self.font.render("Current Tool: "+self.currentTool.name, True, (255,255,255))
+ textpos = text.get_rect(left=700,top=7)
+ self.screen.blit(text,textpos)
+
+ # Flip Display
+ pygame.display.flip()
+
+ # Try to stay at 30 FPS
+ self.clock.tick(30) # originally 50
+
+ def setTool(self,tool,Discard=None):
+ self.currentTool.cancel()
+ self.currentTool = self.tools[tool]
+
+def main():
+ # compensate for the size of the toolbar
+ toolbarheight = 75
+ pygame.init()
+ pygame.display.init()
+ x,y = pygame.display.list_modes()[0]
+ screen = pygame.display.set_mode((x,y-toolbarheight))
+ # create an instance of the game
+ game = PhysicsGame(screen)
+ # start the main loop
+ game.run()
+
+# make sure that main get's called
+if __name__ == '__main__':
+ main()
+
+
+
+
+
+
+
+