Advertisement
mixster

Untitled

Dec 2nd, 2010
409
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.75 KB | None | 0 0
  1. #!/user/bin/env python
  2.  
  3. import sys
  4. import os
  5. import pygame
  6. from pygame.locals import *
  7.  
  8. #--- Init pygame
  9. os.environ["SDL_VIDEO_CENTERED"] = "1"
  10. pygame.init
  11.  
  12. #--- Variables
  13. res = (32, 32)
  14. PLAYER_NUM = 1
  15. TILE_SET_LENGTH = 9
  16. #TILE_SET_LENGTH = 20
  17. clock = pygame.time.Clock()
  18.  
  19. #--- Setup
  20. gameName = "Testing 1,2,3"
  21. levelFile = "level.txt"
  22. tilesetFile = "tileset.bmp"
  23. screenSize = (20, 17)
  24. FPS = 30
  25.  
  26. gravity = 1
  27.  
  28. class Entity(object):
  29. def __init__(self, Size):
  30. self.rect = pygame.Rect(Size[0], Size[1], Size[2], Size[3])
  31. self.permSize = (self.rect[2], self.rect[3])
  32. self.speed = [0, 0]
  33. self.accel = 0;
  34. self.controlled = True
  35.  
  36. def applyGravity():
  37. if self.speed[1] < 16:
  38. self.speed[1] += 1
  39.  
  40. class Player(Entity):
  41.  
  42. def __init__(self, Size, Speed):
  43. Entity.__init__(self, Size)
  44. self.topSpeed = Speed
  45. self.currentJump = 0
  46. self.totJumpNum = 2
  47. self.vectors = [[0,0]]
  48. self.jumping = False
  49. self.walking = False
  50. self.lastValue = [0,0]
  51. self.walkDir = 0
  52. self.inputt = {"jump": [K_UP], "right": [K_RIGHT], "left": [K_LEFT], "crouch": [K_DOWN]}
  53.  
  54. def move(self, dx, dy):
  55. if dx != 0:
  56. self.move_single_axis(dx, 0)
  57. if dy != 0:
  58. self.move_single_axis(0, dy)
  59.  
  60. def collide(self, dx, dy, collideBox):
  61. if self.rect.colliderect(collideBox):
  62. if dx > 0:
  63. self.rect.right = collideBox.left
  64. if dx < 0:
  65. self.rect.left = collideBox.right
  66. if dy > 0:
  67. self.rect.bottom = collideBox.top
  68. self.jumping = False
  69. self.speed[1] = 0;
  70. if dy < 0:
  71. self.rect.top = collideBox.bottom
  72. self.jumping = False
  73. self.speed[1] = 0
  74. return
  75.  
  76. def move_single_axis(self, dx, dy):
  77. self.rect.x += dx
  78. self.rect.y += dy
  79.  
  80. tx, ty = int(self.rect.x / res[0]), int(self.rect.y / res[1])
  81. rects = [[tx, ty], [tx + 1, ty], [tx, ty + 1], [tx + 1, ty + 1]]
  82.  
  83. for h in rects:
  84. if levels.map[int(h[0])][int(h[1])].tNum == 1:
  85. wam = levels.map[int(h[0])][int(h[1])].rect
  86. self.collide(dx, dy, wam)
  87. for players in player:
  88. if self <> players:
  89. self.collide(dx, dy, players.rect)
  90.  
  91. def jump(self):
  92. if self.jumping == False:
  93. self.jumping = True
  94. self.currentJump += 1
  95. self.vectors.append([0,-self.topSpeed[1]])
  96.  
  97. def addVector(self, first, second):
  98. return [first[0] + second[0], first[1] + second[1]]
  99.  
  100.  
  101. def input(self, type, keys):
  102. if type == KEYDOWN:
  103. if keys in self.inputt["jump"]:
  104. self.jump()
  105.  
  106. #if keys in self.inputt["crouch"]:
  107.  
  108. if keys in self.inputt["left"]:
  109. self.walking = True
  110. self.walkDir = -1
  111.  
  112. if keys in self.inputt["right"]:
  113. self.walking = True
  114. self.walkDir = 1
  115.  
  116. if type == KEYUP:
  117. if keys in self.inputt["jump"]:
  118. self.unjump = True
  119.  
  120. #if keys in self.inputt["crouch"] and self.speed[1] > 0:
  121.  
  122. if keys in self.inputt["left"] and self.speed[0] < 0:
  123. self.walking = False
  124. self.walkDir = 0
  125.  
  126. if keys in self.inputt["right"] and self.speed[0] > 0:
  127. self.walkDir = 0
  128. self.walking = False
  129.  
  130. def walk():
  131. return [self.topSpeed[0] * self.walkDir, 0]
  132.  
  133. def tick(self, inputs):
  134. #Get input
  135. #self.vectors = [[0,0]]
  136. if len(inputs) != 0:
  137. for inputy in inputs:
  138. self.input(inputy[0], inputy[1])
  139. # end get input
  140.  
  141. if self.walking:
  142. self.vectors.append(self.walk)
  143.  
  144. #Gravity
  145. #if self.jumping:
  146. self.vectors.append([0,gravity])
  147.  
  148. #applying input
  149. if len(self.vectors) > 1:
  150. for i in range(1, len(self.vectors) - 1):
  151. self.vectors[0] = self.addVector(self.vectors[0], self.vectors[i])
  152. self.speed = self.vectors[0]
  153. self.vectors = [self.vectors[0]]
  154. self.move(self.speed[0], self.speed[1])
  155. # end applying input
  156.  
  157. #if self.jumping:
  158. # if (self.speed[1] >= 0) and (self.currentJump <= self.totJumpNum - 1):
  159. # self.jumping = False
  160.  
  161.  
  162. class Wall(object):
  163.  
  164. def __init__(self, pos):
  165. self.rect = pygame.Rect(pos[0], pos[1], pos[2], pos[3])
  166. self.tNum = pos[4]
  167. self.tile = pos[5]
  168.  
  169.  
  170. class Level(object):
  171.  
  172. def __init__(self, (size, resolution, mapArray, playerStart)):
  173. self.size = size
  174. self.res = resolution
  175. self.map = mapArray
  176. self.start = playerStart
  177.  
  178.  
  179. class Camera(Entity):
  180.  
  181. def __init__(self, Size, Target):
  182. Entity.__init__(self, Size)
  183. self.target = Target
  184.  
  185. def tick(self):
  186. self.rect.x = self.target.rect.x - (self.rect.width / 2)
  187. if self.rect.x < 0:
  188. self.rect.x = 0
  189. if self.rect.x + self.rect.width > len(levels.map) * res[0]:
  190. self.rect.x = (len(levels.map) * res[0]) - self.rect.width
  191.  
  192. self.rect.y = self.target.rect.y - (self.rect.height / 2)
  193. if self.rect.y < 0:
  194. self.rect.y = 0
  195. if self.rect.y + self.rect.height > len(levels.map[0]) * res[1]:
  196. self.rect.y = (len(levels.map[0]) * res[1]) - self.rect.height
  197.  
  198.  
  199. def translate(rect, Cam):
  200. return pygame.Rect(rect.x - Cam.rect.x, rect.y - Cam.rect.y, rect.w, rect.h)
  201.  
  202. def getEvents():
  203. res = []
  204. for event in pygame.event.get():
  205. if event.type == KEYDOWN or event.type == KEYUP:
  206. res.append((event.type, event.key))
  207. if event.type == pygame.QUIT:
  208. gameRunning = False
  209. sys.exit()
  210. return res
  211.  
  212. def parseLevel(filename):
  213. COMMA_ITER = 6
  214. pos, walls, tot = [], [], []
  215. fileObj = open(filename)
  216. s = fileObj.read()
  217. fileObj.close()
  218. mRes = s.find(".", 0)
  219. tot = [float(res[0]) / float(s[0: mRes]), float(res[1]) / float(s[0: mRes])]
  220. mx = s.find(".", mRes + 1)
  221. my = s.find("(", mx)
  222. strPart = 0
  223. for i in range(0, int(s[mRes + 1: mx])):
  224. walls.append([])
  225. for e in range(0, int(s[mx + 1: my])):
  226. strPart = s.find("(", strPart) + 1
  227. strPart2 = s.find(")", strPart)
  228. for la in range(0, COMMA_ITER):
  229. final = s.find(",", strPart, strPart2)
  230. pos.append(int(s[strPart: final]))
  231. strPart = final + 1
  232. if pos[4] == 2:
  233. pos[4] = 0
  234. star = (pos[0] * tot[0], pos[1] * tot[1])
  235. walls[i].append(Wall((pos[0] * tot[0], pos[1] * tot[1], pos[2] * tot[0], pos[3] * tot[1], pos[4], pos[5])))
  236. pos = []
  237. return ((mx, my), tot, walls, star)
  238.  
  239. #--- Object Creation
  240. pygame.display.set_caption(gameName)
  241. screen = pygame.display.set_mode((screenSize[0] * res[0], screenSize[1] * res[1]))
  242.  
  243. levels = Level(parseLevel(levelFile))
  244.  
  245. player = []
  246. for h in range(0, PLAYER_NUM):
  247. player.append(Player((levels.start[0] + h * 16, levels.start[1], res[0] - 1, res[1]), (4 * levels.res[0], 8 * levels.res[1])))
  248.  
  249. camera = Camera((0,0,screen.get_width(), screen.get_height()), player[0])
  250. tileset = pygame.transform.scale(pygame.image.load(tilesetFile), (res[0], res[1] * TILE_SET_LENGTH)).convert()
  251.  
  252. #--- Main Loop
  253. gameRunning = True
  254. while gameRunning:
  255.  
  256. inputer = getEvents()
  257. for players in player:
  258. if players.controlled == True:
  259. players.tick(inputer)
  260. else:
  261. players.tick([])
  262. inputer = False
  263. camera.tick()
  264.  
  265.  
  266. screen.fill((0, 0, 0))
  267. for i in range(0, len(levels.map)):
  268. for e in range(0, len(levels.map[i])):
  269. rect = translate(levels.map[i][e].rect, camera)
  270. til = pygame.surface.Surface((res[0],res[1]))
  271. til.set_colorkey((73,154,191))
  272. #til.set_colorkey((63,13,45))
  273. til.blit(tileset, (0, -levels.map[i][e].tile * res[1], res[0], res[1]))
  274. screen.blit(til, rect)
  275.  
  276. for k in range(0, len(player)):
  277. rect = translate(player[k].rect, camera)
  278. pygame.draw.rect(screen, (255, 200, 0), rect)
  279.  
  280. clock.tick(FPS)
  281. pygame.display.flip()
  282. pygame.quit ()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement