Advertisement
Guest User

Untitled

a guest
Jul 29th, 2013
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.21 KB | None | 0 0
  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()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement