changeset 4:e8ddbc95cbf3

Silly (and broken) first stab at menu thing.
author Jeremy Thurgood <firxen@gmail.com>
date Sun, 30 Aug 2009 12:48:02 +0000
parents 41761fcd7386
children 67b79658b047
files gamelib/main.py gamelib/mainmenu.py
diffstat 2 files changed, 179 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/gamelib/main.py	Sun Aug 30 12:17:15 2009 +0000
+++ b/gamelib/main.py	Sun Aug 30 12:48:02 2009 +0000
@@ -6,8 +6,118 @@
 package.
 '''
 
-import data
+SCREEN = (800, 600)
+
+import time
+import random
+
+import pygame
+from pgu import gui
+from pygame.locals import *
+
+from mainmenu import MainMenu
+
+W,H = 640,480
+W2,H2 = 320,240
+
+##Using App instead of Desktop removes the GUI background.  Note the call to app.init()
+##::
+
+form = gui.Form()
+
+app = gui.App()
+main_menu = MainMenu()
+
+c = gui.Container(align=-1,valign=-1)
+c.add(main_menu,0,0)
+
+app.init(c)
+##
+
+dist = 8192
+span = 10
+stars = []
+def reset():
+    global stars
+    stars = []
+    for i in range(0,form['quantity'].value):
+        stars.append([random.randrange(-W*span,W*span),
+                      random.randrange(-H*span,H*span),
+                      random.randrange(1,dist)])
+        
+
+def render(dt):
+    speed = form['speed'].value*10
+    size = form['size'].value
+    color = form['color'].value
+    warp = form['warp'].value
+
+    colors = []
+    for i in range(256,0,-1):
+        colors.append((color[0]*i/256,color[1]*i/256,color[2]*i/256))
+        
+    n = 0
+    for x,y,z in stars:
+        if warp:
+            z1 = max(1,z + speed*2)
+            x1 = x*256/z1
+            y1 = y*256/z1
+            xx1,yy1 = x1+W2,y1+H2
+    
+        x = x*256/z
+        y = y*256/z
+        xx,yy = x+W2,y+H2
+        c = min(255,z * 255 / dist)
+        col = colors[int(c)]
+
+        if warp:
+            pygame.draw.line(screen,col,
+                             (int(xx1),int(yy1)),
+                             (int(xx),int(yy)),size)
+        
+        pygame.draw.circle(screen,col,(int(xx),int(yy)),size)
+        
+        ch = 0
+        z -= speed*dt
+        if z <= 0: 
+            ch = 1
+            z += dist
+        if z > dist: 
+            ch = 1
+            z -= dist
+        if ch:
+            stars[n][0] = random.randrange(-W*span,W*span)
+            stars[n][1] = random.randrange(-H*span,H*span)
+        stars[n][2] = z
+        
+        n += 1
+        
+screen = pygame.display.set_mode(SCREEN,SWSURFACE)
+
+##You can include your own run loop.
+##::
+
+def gameloop(screen):
+    reset()
+    clock = pygame.time.Clock()
+    done = False
+    while not done:
+        for e in pygame.event.get():
+            if e.type is QUIT: 
+                done = True
+            elif e.type is KEYDOWN and e.key == K_ESCAPE: 
+                done = True
+            else:
+                app.event(e)
+
+        # Clear the screen and render the stars
+        dt = clock.tick()/1000.0
+        screen.fill((0,0,0))
+        render(dt)
+        app.paint(screen)
+        pygame.display.flip()
+        pygame.time.wait(10)
+
 
 def main():
-    print "Hello from your game's main()"
-    print data.load('sample.txt').read()
+    gameloop(screen)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gamelib/mainmenu.py	Sun Aug 30 12:48:02 2009 +0000
@@ -0,0 +1,66 @@
+import pygame
+from pgu import gui
+
+class MainMenu(gui.Table):
+    def __init__(self,**params):
+        gui.Table.__init__(self,**params)
+
+        def fullscreen_changed(btn):
+            #pygame.display.toggle_fullscreen()
+            print "TOGGLE FULLSCREEN"
+
+        def stars_changed(slider):
+            n = slider.value - len(stars)
+            if n < 0:
+                for i in range(n,0): 
+                    stars.pop()
+            else:
+                for i in range(0,n):
+                    stars.append([random.randrange(-W*span,W*span),
+                                  random.randrange(-H*span,H*span),
+                                  random.randrange(1,dist)])
+
+        fg = (255,255,255)
+
+        self.tr()
+        self.td(gui.Label("Phil's Pygame GUI",color=fg),colspan=2)
+        
+        self.tr()
+        self.td(gui.Label("Speed: ",color=fg),align=1)
+        e = gui.HSlider(100,-500,500,size=20,width=100,height=16,name='speed')
+        self.td(e)
+        
+        self.tr()
+        self.td(gui.Label("Size: ",color=fg),align=1)
+        e = gui.HSlider(2,1,5,size=20,width=100,height=16,name='size')
+        self.td(e)
+        
+        self.tr()
+        self.td(gui.Label("Quantity: ",color=fg),align=1)
+        e = gui.HSlider(100,1,1000,size=20,width=100,height=16,name='quantity')
+        e.connect(gui.CHANGE, stars_changed, e)
+        self.td(e)
+        
+        self.tr()
+        self.td(gui.Label("Color: ",color=fg),align=1)
+        
+        
+        default = "#ffffff"
+        color = gui.Color(default,width=64,height=10,name='color')
+#         color_d = ColorDialog(default)
+
+#         color.connect(gui.CLICK,color_d.open,None)
+#         color_d.connect(gui.CHANGE,gui.action_setvalue,(color_d,color))
+        self.td(color)
+        
+        btn = gui.Switch(value=False,name='fullscreen')
+        btn.connect(gui.CHANGE, fullscreen_changed, btn)
+
+        self.tr()
+        self.td(gui.Label("Full Screen: ",color=fg),align=1)
+        self.td(btn)
+        
+        self.tr()
+        self.td(gui.Label("Warp Speed: ",color=fg),align=1)
+        self.td(gui.Switch(value=False,name='warp'))
+