SHARE
TWEET

Untitled

a guest Jul 29th, 2013 63 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import pygame
  2. import math
  3. import os
  4. import random
  5. import time
  6.  
  7. class PJ_StaticHost: pass
  8.  
  9. def sm_PJImage__loadFromFile(path):
  10.         return PJImage(path, 0, 0)
  11.  
  12. def sm_PJImage__createBlank(width, height):
  13.         return PJImage(None, width, height)
  14.  
  15. class PJImage:
  16.         def __init__(self, filepath, width, height):
  17.                 self.width = 0
  18.                 self.height = 0
  19.                 if filepath == None:
  20.                         self.width = width
  21.                         self.height = height
  22.                         self.pgImage = pygame.Surface((width, height))
  23.                 else:
  24.                         self.pgImage = pygame.image.load(filepath.replace("/", os.sep).replace("\\", os.sep))
  25.                         self.width = self.pgImage.get_width()
  26.                         self.height = self.pgImage.get_height()
  27.  
  28.         def blit(self, img, x, y):
  29.                 self.pgImage.blit(img.pgImage, (x, y))
  30.  
  31. def sm_PJEvent__convertKeyCode(rawKeyCode):
  32.         if sh_PJEvent.keyCodeMapping == None:
  33.                 sh_PJEvent.keyCodeMapping = { pygame.K_SPACE: "space", pygame.K_RETURN: "enter", pygame.K_TAB: "tab", pygame.K_UP: "up", pygame.K_DOWN: "down", pygame.K_LEFT: "left", pygame.K_RIGHT: "right", pygame.K_LALT: "alt", pygame.K_RALT: "alt", pygame.K_LCTRL: "ctrl", pygame.K_RCTRL: "ctrl", pygame.K_LSHIFT: "shift", pygame.K_RSHIFT: "shift", pygame.K_a: "a", pygame.K_b: "b", pygame.K_c: "c", pygame.K_d: "d", pygame.K_e: "e", pygame.K_f: "f", pygame.K_g: "g", pygame.K_h: "h", pygame.K_i: "i", pygame.K_j: "j", pygame.K_k: "k", pygame.K_l: "l", pygame.K_m: "m", pygame.K_n: "n", pygame.K_o: "o", pygame.K_p: "p", pygame.K_q: "q", pygame.K_r: "r", pygame.K_s: "s", pygame.K_t: "t", pygame.K_u: "u", pygame.K_v: "v", pygame.K_w: "w", pygame.K_x: "x", pygame.K_y: "y", pygame.K_z: "z", pygame.K_0: "0", pygame.K_1: "1", pygame.K_2: "2", pygame.K_3: "3", pygame.K_4: "4", pygame.K_5: "5", pygame.K_6: "6", pygame.K_7: "7", pygame.K_8: "8", pygame.K_9: "9", pygame.K_F1: "F1", pygame.K_F2: "F2", pygame.K_F3: "F3", pygame.K_F4: "F4", pygame.K_F5: "F5", pygame.K_F6: "F6", pygame.K_F7: "F7", pygame.K_F8: "F8", pygame.K_F9: "F9", pygame.K_F10: "F10", pygame.K_F11: "F11", pygame.K_F12: "F12" }
  34.         return sh_PJEvent.keyCodeMapping.get(rawKeyCode, None)
  35.  
  36. sh_PJEvent = PJ_StaticHost()
  37. sh_PJEvent.keyCodeMapping = None
  38.  
  39. class PJEvent:
  40.         def __init__(self, type, keycode):
  41.                 self.type = None
  42.                 self.keycode = None
  43.                 self.keyCodeMapping = None
  44.                 self.type = type
  45.                 self.keycode = keycode
  46.  
  47. class PJGame:
  48.         def __init__(self, postInit, updater, renderer, screenWidth, screenHeight, targetFps):
  49.                 self.postInit = postInit
  50.                 self.updater = updater
  51.                 self.renderer = renderer
  52.                 self.width = screenWidth
  53.                 self.height = screenHeight
  54.                 self.fps = targetFps
  55.                 self.quitAttempt = False
  56.  
  57.         def start(self):
  58.                 pygame.init()
  59.                 screen = pygame.display.set_mode((self.width, self.height))
  60.                 self.postInit()
  61.                 self._screen = PJImage(None, self.width, self.height)
  62.                 self._screen.pgImage = screen
  63.                
  64.                 sm_PJEvent__convertKeyCode(pygame.K_a)
  65.                 self.pressedKeys = {}
  66.                 for key in sh_PJEvent.keyCodeMapping.values():
  67.                         self.pressedKeys[key] = False
  68.                
  69.                 while True:
  70.                         start = time.time()
  71.                         self.tick()
  72.                         if self.quitAttempt:
  73.                                 return
  74.                         end = time.time()
  75.                         diff = end - start
  76.                         delay = 1.0 / self.fps - diff
  77.                         if delay > 0:
  78.                                 time.sleep(delay)
  79.  
  80.         def tick(self):
  81.                 events = []
  82.                 for ev in pygame.event.get():
  83.                         myEvent = None
  84.                         if ev.type == pygame.QUIT:
  85.                                 self.quitAttempt = True
  86.                         elif ev.type == pygame.KEYDOWN:
  87.                                 keycode = sm_PJEvent__convertKeyCode(ev.key)
  88.                                 myEvent = PJEvent("keydown", keycode)
  89.                                 self.pressedKeys[keycode] = True
  90.                                 if keycode == 'F4' and self.pressedKeys['alt']:
  91.                                         self.quitAttempt = True
  92.                         elif ev.type == pygame.KEYUP:
  93.                                 keycode = sm_PJEvent__convertKeyCode(ev.key)
  94.                                 myEvent = PJEvent("keyup", keycode)
  95.                                 self.pressedKeys[keycode] = False
  96.                
  97.                         if myEvent != None:
  98.                                 events.append(myEvent)
  99.                
  100.                 self.updater(events, self.pressedKeys)
  101.                
  102.                 self._screen.pgImage.fill((0, 0, 0))
  103.                 self.renderer(self._screen)
  104.                
  105.                 pygame.display.flip()
  106.                
  107.  
  108. def sm_Util__getImage(path):
  109.         if not (((path) in sh_Util.images)):
  110.                 sh_Util.images[path] = sm_PJImage__loadFromFile(path)
  111.         return sh_Util.images[path]
  112.  
  113. sh_Util = PJ_StaticHost()
  114. sh_Util.images = {}
  115.  
  116. class Util:
  117.         def __init__(self):
  118.                 self.images = {}
  119.  
  120. class Program:
  121.         def __init__(self):
  122.                 self.renderCounter = 0
  123.                 self.activeScene = None
  124.                 self.gameInstance = None
  125.  
  126.         def init(self):
  127.                 self.gameInstance = PJGame(self.postInit, self.update, self.render, 640, 480, 60)
  128.                 self.gameInstance.start()
  129.  
  130.         def postInit(self):
  131.                 self.activeScene = SceneBase()
  132.  
  133.         def update(self, events, pressedKeys):
  134.                 self.activeScene.update(events, pressedKeys)
  135.  
  136.         def render(self, screen):
  137.                 self.activeScene.render(screen, self.renderCounter)
  138.                 self.renderCounter = self.renderCounter + 1
  139.  
  140. class SceneBase:
  141.         def __init__(self):
  142.                 self.next = None
  143.                 self.img = None
  144.                 self.x = 0
  145.                 self.y = 0
  146.                 self.next = self
  147.                 self.img = sm_Util__getImage("images/test.png")
  148.                 self.x = 100
  149.                 self.y = 100
  150.  
  151.         def update(self, events, pressedKeys):
  152.                 v = 3
  153.                 if pressedKeys["left"]:
  154.                         self.x = self.x - v
  155.                 if pressedKeys["right"]:
  156.                         self.x = self.x + v
  157.                 if pressedKeys["up"]:
  158.                         self.y = self.y - v
  159.                 if pressedKeys["down"]:
  160.                         self.y = self.y + v
  161.  
  162.         def render(self, screen, renderCounter):
  163.                 screen.blit(self.img, self.x, self.y)
  164.  
  165.  
  166. app = Program()
  167. app.init()
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top