Advertisement
Guest User

Untitled

a guest
May 29th, 2015
268
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.27 KB | None | 0 0
  1. """
  2. The point of this incarnation of the game is that there will be 3 areas for the player to explore, all connected by a center field.
  3.  
  4. Tasks:
  5. Setup D-pad so that the image rotates with each direction
  6. Get Monsters moving
  7. Make Volume Control function do Pause instead???
  8. #Come up with Loop or List system for Text Parsing
  9. #Implement Pause function
  10.  
  11. Setup Cities 2 & 3 - Top Right & Bottom Left
  12. #Have Spacebar be some kind of quick move thing - moves 10 instead of 5, etc.
  13. This will require direction detection
  14. Have Function so Player doesn't go off screen
  15. Inventory Screen
  16. Villagers
  17. Text Bubble When Talking to Villagers
  18. Player Eventually Surpasses Screen over Very Long Distance
  19.  
  20. Add Water
  21. Change Rects to Blitted Objects
  22. How would I create a Mini-Map??
  23. Take everything that's blitting/being drawn & draw it again at 1/8 size & position it in the lower right corner
  24. What's a non-guess based way to math out the map
  25.  
  26. """
  27.  
  28. """
  29. Controls List:
  30.  
  31. quick controls list:
  32. k - kills game
  33. p - pauses game
  34. i - brings up inventory screen
  35. arrow keys - move
  36. m - mute/unmute music
  37. spacebar - quick move
  38. """
  39.  
  40. import pygame, sys
  41. from pygame.locals import *
  42.  
  43. class Wall(pygame.sprite.Sprite):
  44. def __init__(self, pos, color, xoffset, yoffset):
  45. pygame.sprite.Sprite.__init__(self)
  46. self.image = pygame.image.load('archer_2.png')
  47. self.rect = self.image.get_rect()
  48. self.pos = pos
  49. wallsList.add(self)
  50. self.xoffset = xoffset
  51. self.yoffset = yoffset
  52. self.color = color
  53.  
  54. def draw(self):
  55. pygame.draw.rect(gameDisplay, self.color, (self.pos[0], self.pos[1], 50, 50))
  56.  
  57. class Player(pygame.sprite.Sprite):
  58. def __init__(self, xoffset, yoffset):
  59. pygame.sprite.Sprite.__init__(self)
  60. self.image = pygame.image.load('worker_0.png')
  61. self.rect = self.image.get_rect()
  62. self.pos = [200, 425]
  63. playersList.add(self)
  64. self.xoffset = xoffset
  65. self.yoffset = yoffset
  66.  
  67. def draw(self):
  68. playBlit = gameDisplay.blit(self.image, (self.pos[0], self.pos[1]), (0, 0, 50, 50))
  69. #Collision Dection Here - USE SPRITES IN THIS INCARNATION
  70.  
  71. class Monster(pygame.sprite.Sprite):
  72. def __init__(self, pos, xoffset, yoffset):
  73. pygame.sprite.Sprite.__init__(self)
  74. self.image = pygame.image.load('archon0.png')
  75. self.rect = self.image.get_rect()
  76. self.pos = pos
  77. monstersList.add(self)
  78. self.xoffset = xoffset
  79. self.yoffset = yoffset
  80. # self.startPosX = pos[0]
  81. # self.startPosY = pos[1]
  82. # self.monsterMoveX = 0
  83.  
  84. def draw(self):
  85. gameDisplay.blit(self.image, self.pos)
  86.  
  87. def wander(self):
  88. self.monsterMoveX = 5
  89. #Movement Code here ... there is some better way to do this
  90.  
  91.  
  92. def drawBackground(display, bg_img, bg_rect):
  93. nrows = int(winWidth / 20) + 1
  94. ncols = int(winHeight / 20) + 1
  95.  
  96. for row in range(nrows):
  97. for col in range(ncols):
  98. bg_rect.topleft = (row * 20, col * 20)
  99. gameDisplay.blit(bg_img, bg_rect, (40, 41, 20, 20))
  100.  
  101. def volumeControl(): #Maybe I should make this pause instead??
  102. curVol = pygame.mixer.music.get_volume()
  103. if curVol > 0.0:
  104. pygame.mixer.music.set_volume(0.0)
  105. elif curVol == 0.0:
  106. pygame.mixer.music.set_volume(1.0)
  107.  
  108. # def drawIt():
  109. # for wall in wallsList:
  110. # wall.pos[0] += xoffset
  111. # wall.pos[1] += yoffset
  112. # wall.draw()
  113. # for player in playersList:
  114. # player.pos[0] += xchange
  115. # player.pos[1] += ychange
  116. # player.draw()
  117. # for monster in monstersList:
  118. # monster.pos[0] += xchange
  119. # monster.pos[1] += ychange
  120. # monster.draw()
  121.  
  122. def intro():
  123. messages = []
  124. run = True
  125. while run:
  126. for event in pygame.event.get():
  127. if event.type == KEYDOWN:
  128. if event.key == K_k:
  129. pygame.quit()
  130. sys.exit()
  131. if event.key == K_p:
  132. gameLoop()
  133. if event.key == K_m:
  134. volumeControl()
  135.  
  136. #Efficient way to do this?
  137. #for loop with messages?
  138. messages.append(("Luna's Game", 100))
  139. messages.append(("Press p to Play", 350))
  140.  
  141. for message in messages:
  142.  
  143. font = pygame.font.Font(None, 100)
  144. text = font.render(message[0], 1, green)
  145. textpos = text.get_rect()
  146. textpos.centerx = gameDisplay.get_rect().centerx
  147. textpos.y = message[1]
  148. gameDisplay.blit(text, textpos)
  149.  
  150. # text2 = font.render("Press p to play", 1, green)
  151. # textpos2 = text2.get_rect()
  152. # textpos2.centerx = gameDisplay.get_rect().centerx
  153. # textpos2.y = 350
  154. # gameDisplay.blit(text2, textpos2)
  155.  
  156.  
  157.  
  158. # intro_img = pygame.image.load('archer_2.png')
  159. # intro_rect = intro_img.get_rect()
  160. # gameDisplay.blit(intro_img, intro_rect.topleft)
  161. pygame.display.update()
  162.  
  163. pygame.mixer.init()
  164. pygame.mixer.music.load('gate.mp3')
  165. pygame.mixer.music.play(-1)
  166.  
  167. playersList = pygame.sprite.Group()
  168. wallsList = pygame.sprite.Group()
  169. monstersList = pygame.sprite.Group()
  170.  
  171. bg_img = pygame.image.load('grasclif.bmp')
  172. bg_rect = bg_img.get_rect()
  173.  
  174. healthbar_img = pygame.image.load('blood_red_bar.png')
  175. healthbar_rect = healthbar_img.get_rect()
  176.  
  177. black = (0, 0, 0)
  178. red = (255, 0, 0)
  179. green = (0, 255, 0)
  180. white = (125, 125, 125)
  181. grey = (25, 25, 25)
  182. brown = (139, 69, 19)
  183. dark_brown = (100, 50, 19)
  184. dark_green = (0, 50, 0)
  185. dark_red = (150, 0, 0)
  186.  
  187. winWidth = 800
  188. winHeight = 600
  189. pygame.init()
  190.  
  191. gameDisplay = pygame.display.set_mode((winWidth, winHeight))
  192. pygame.display.set_caption('Exploring Game')
  193.  
  194. offset = 0
  195.  
  196. xchange = 0
  197. ychange = 0
  198. playerx = winWidth / 2
  199. playery = winHeight - 50
  200. xoffset = 0
  201. yoffset = 0
  202. playChar = Player(xoffset, yoffset)
  203. clock = pygame.time.Clock()
  204.  
  205. city1 = ["W" * (winWidth/50), #16 Tiles Across
  206. "W W",
  207. "W H R H W",
  208. "W R W",
  209. "W R W",
  210. "W R W",
  211. "W H R H W",
  212. "W H R W",
  213. "W R H W",
  214. "WRRRRRRRRRRRRRRRRRRRRRRRR",
  215. "W R W",
  216. "W R W",
  217. "W H R H W",
  218. "W R W",
  219. "W R W",
  220. "W R W",
  221. "W R W",
  222. "W R W",
  223. "WWWWWWWRWWWWWWWW"
  224. ]
  225.  
  226. field = ["W" * (winWidth/50), #16 Tiles Across
  227. " R ",
  228. " M R ",
  229. " R ",
  230. " M R ",
  231. " R ",
  232. " R ",
  233. " R ",
  234. " R ",
  235. "RRRRRRRRRRRRRRRR",
  236. " M ",
  237. " M ",
  238. " ",
  239. " M ",
  240. " ",
  241. ]
  242.  
  243. fieldUp = [" R ",
  244. " R ",
  245. " R ",
  246. " RRRRRRRRRRRRRRRRRRRRRRRRRRRRRR",
  247. " R ",
  248. " R ",
  249. " R ",
  250. " R ",
  251. " R ",
  252. " R ",
  253. " R ",
  254. " R ",
  255. " R ",
  256. " R ",
  257. " R ",
  258.  
  259. ]
  260.  
  261. city2 = ["W W", #This still needs to go up and to the right
  262. "W H R H W",
  263. "W R W",
  264. "RRRRRRRRRRRRRRRW",
  265. "W R W",
  266. "W H R H W",
  267. "W H R W",
  268. "W R H W",
  269. "WRRRRRRRRRRRRRRRRRRRRRRRR",
  270. "W R W",
  271. "W R W",
  272. "W H R H W",
  273. "W R W",
  274. "W R W",
  275. "W R W",
  276. "W R W",
  277. "W R W",
  278. "W R W",
  279. "W R W",
  280. "W R W",
  281. "W R W",
  282. "W R W",
  283. "WWWWWWWRWWWWWWWW",
  284. " R ",
  285. " R ",
  286. " R ",
  287. " R ",
  288. " R ",
  289. " R ",
  290. " R ",
  291. " R ",
  292. " R ",
  293. " R ",
  294. " R ",
  295. ]
  296.  
  297.  
  298.  
  299. #This can probably be more efficiently done using a separate file, a function, or some serious nested loops/enumerate
  300. x = y = 0
  301. for row in city1:
  302. for col in row:
  303. pos = [x, y]
  304. if col == "W":
  305. Wall(pos, grey, xoffset, yoffset)
  306. # if col == "P":
  307. # Player(pos, xoffset, yoffset)
  308. if col == "M":
  309. Monster(pos, xoffset, yoffset)
  310. if col == "R": #Road
  311. Wall(pos, brown, xoffset, yoffset)
  312. if col == "H": #House
  313. Wall(pos, dark_red, xoffset, yoffset)
  314. x+= 50
  315. y+= 50
  316. x = 0
  317.  
  318. a = b = 0 #It would probably be ok to reuse x & y, but I'd rather not
  319. fieldPos = 1200
  320. for row in field:
  321. for col in row:
  322. pos = [a + fieldPos, b]
  323. if col == "M":
  324. Monster(pos, xoffset, yoffset)
  325. if col == "R": #Road
  326. Wall(pos, brown, xoffset, yoffset)
  327. a+=50
  328. b+=50
  329. a=0
  330.  
  331.  
  332.  
  333.  
  334. i = j = 0 #This is not displaying properly ... no idea why
  335. city2PosX = 1400
  336. city2PosY = -1500
  337. for row in city2:
  338. for col in row:
  339. pos = [i + city2PosX, j + city2PosY]
  340. if col == "W":
  341. Wall(pos, grey, xoffset, yoffset)
  342. if col == "R":
  343. Wall(pos, brown, xoffset, yoffset)
  344. if col =="H":
  345. Wall(pos, red, xoffset, yoffset)
  346. i+=50
  347. j+=50
  348. i=0
  349.  
  350.  
  351. # def keyHandle(): # I think this is slower though??
  352. # for event in pygame.event.get():
  353. # if event.type == KEYDOWN:
  354. # if event.key == K_k:
  355. # pygame.quit()
  356. # sys.exit()
  357. # if event.key == K_m:
  358. # volumeControl()
  359.  
  360. def pause():
  361. gamePause = True
  362. while gamePause:
  363. for event in pygame.event.get():
  364. if event.type == KEYDOWN:
  365. if event.key == K_k:
  366. pygame.quit()
  367. sys.exit()
  368. if event.key == K_p:
  369. gamePause = False
  370. gameDisplay.fill(black)
  371. font = pygame.font.Font(None, 100)
  372. text = font.render("The Game Is Paused", 1, green)
  373. textpos = text.get_rect()
  374. textpos.centerx = gameDisplay.get_rect().centerx
  375. textpos.centery = gameDisplay.get_rect().centery
  376. gameDisplay.blit(text, textpos)
  377.  
  378. pygame.display.update()
  379.  
  380. def inventory():
  381. messages = []
  382. inventory_active = True
  383. while inventory_active:
  384. for event in pygame.event.get():
  385. if event.type == KEYDOWN:
  386. if event.key == K_k:
  387. pygame.quit()
  388. sys.exit()
  389. if event.key == K_i:
  390. inventory_active = False
  391.  
  392. gameDisplay.fill(black)
  393. pygame.draw.rect(gameDisplay, dark_brown, (75, 50, 650, 500)) #Do this in non-naive way
  394. pygame.draw.rect(gameDisplay, dark_green, (125, 100, 550, 400))
  395.  
  396. messages.append(("Inventory", winWidth / 2.75, 100))
  397. messages.append(("Sword", 150, 200))
  398. messages.append(("Shield", 150, 300))
  399.  
  400. for message in messages:
  401. font = pygame.font.Font(None, 60)
  402. text = font.render(message[0], 1, white)
  403. textpos = text.get_rect()
  404. #textpos.centerx = gameDisplay.get_rect().centerx
  405. textpos.x = message[1]
  406. textpos.y = message[2]
  407. gameDisplay.blit(text, textpos)
  408.  
  409. pygame.display.update()
  410.  
  411. def gameLoop():
  412. global xoffset, yoffset, xchange, ychange
  413. run = True
  414. while run:
  415. gameDisplay.fill(black)
  416. drawBackground(gameDisplay, bg_img, bg_rect)
  417.  
  418. # keyHandle()
  419. for event in pygame.event.get():
  420. if event.type == KEYDOWN:
  421. if event.key == K_k:
  422. pygame.quit()
  423. sys.exit()
  424. if event.key == K_m:
  425. volumeControl()
  426. if event.key == K_LEFT: #Setup so that each of these rotates the image
  427. xoffset = 5
  428. xchange = -2
  429. if event.key == K_RIGHT:
  430. xoffset = -5
  431. xchange = 2
  432. if event.key == K_UP:
  433. yoffset = 5
  434. ychange = -2
  435. if event.key == K_DOWN:
  436. yoffset = -5
  437. ychange = 2
  438. if event.key == K_SPACE:
  439. if xchange == 0:
  440. xchange += 0
  441. if xchange > 0:
  442. xchange += 10
  443. xoffset -= 8
  444. if xchange < 0:
  445. xchange -= 10
  446. xoffset += 4
  447. if ychange == 0:
  448. ychange += 0
  449. if ychange < 0:
  450. ychange -= 10
  451. yoffset += 4
  452. if ychange > 0:
  453. ychange += 10
  454. yoffset -= 4
  455.  
  456. if event.key == K_p:
  457. pause()
  458. if event.key == K_i:
  459. inventory()
  460.  
  461. if event.type == KEYUP:
  462. if event.key == K_LEFT:
  463. xoffset = 0
  464. xchange = 0
  465. elif event.key == K_RIGHT:
  466. xoffset = 0
  467. xchange = 0
  468. elif event.key == K_UP:
  469. yoffset = 0
  470. ychange = 0
  471. elif event.key == K_DOWN:
  472. yoffset = 0
  473. ychange = 0
  474. if event.key == K_SPACE:
  475. if xchange == 0: #technically unnecessary
  476. xchange = 0
  477. if xchange > 0:
  478. xchange -= 10
  479. xoffset += 8
  480. if xchange < 0:
  481. xchange += 10
  482. xoffset -= 4
  483. if ychange == 0:
  484. ychange += 0
  485. if ychange < 0:
  486. ychange += 10
  487. yoffset -= 4
  488. if ychange > 0:
  489. ychange -= 10
  490. yoffset += 4
  491.  
  492. # playersList.update()
  493. # wallsList.update()
  494. # monstersList.update()
  495.  
  496. #Why don't these work?!?!
  497. # playersList.draw(gameDisplay)
  498. # wallsList.draw(gameDisplay)
  499. # monstersList.draw(gameDisplay)
  500.  
  501. for wall in wallsList:
  502. wall.pos[0] += xoffset
  503. wall.pos[1] += yoffset
  504. wall.draw()
  505. for player in playersList:
  506. player.pos[0] += xchange
  507. player.pos[1] += ychange
  508. player.draw()
  509. for monster in monstersList:
  510. monster.pos[0] += xoffset
  511. monster.pos[1] += yoffset
  512. monster.draw()
  513.  
  514. gameDisplay.blit(healthbar_img, (30, 20))
  515.  
  516. # playerx += xchange
  517. # playery += ychange
  518.  
  519. clock.tick(30)
  520.  
  521. pygame.display.update()
  522.  
  523. if __name__ == "__main__":
  524. intro()
  525. # gameLoop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement