/duckrehunt/DuckLib.py

https://github.com/vranki/wiishooter
Python | 426 lines | 307 code | 96 blank | 23 comment | 58 complexity | fd40693d9555b1f5dbb0f1cdb55882fb MD5 | raw file
  1. """
  2. Copyright 2011 Michael Bachmann
  3. This program is distributed under the terms of the GNU
  4. General Public License
  5. """
  6. import pygame, random
  7. pygame.init()
  8. #Load in images
  9. #<<<<<<< HEAD
  10. dogImg = [pygame.image.load("DogIdle.gif"),
  11. pygame.image.load("DogDuck.gif")]
  12. duckImg = [[pygame.image.load("DuckUD1.gif"),
  13. pygame.image.load("DuckUD2.gif"),
  14. pygame.image.load("DuckUD3.gif")],
  15. [pygame.image.load("DuckF1.gif"),
  16. pygame.image.load("DuckF2.gif"),
  17. pygame.image.load("DuckF3.gif")],
  18. [pygame.image.load("DuckShot.gif")],
  19. [pygame.image.load("DuckFall.gif"),
  20. pygame.transform.flip(pygame.image.load("DuckFall.gif"), True, False)]]
  21. #=======
  22. dogImg = [pygame.image.load("DogIdle.gif"),
  23. pygame.image.load("DogDuck.gif")]
  24. duckImg = [[pygame.image.load("DuckUD1.gif"),
  25. pygame.image.load("DuckUD2.gif"),
  26. pygame.image.load("DuckUD3.gif")],
  27. [pygame.image.load("DuckF1.gif"),
  28. pygame.image.load("DuckF2.gif"),
  29. pygame.image.load("DuckF3.gif")],
  30. [pygame.image.load("DuckShot.gif")],
  31. [pygame.image.load("DuckFall.gif"),
  32. pygame.transform.flip(pygame.image.load("DuckFall.gif"), True, False)]]
  33. #>>>>>>> 807f2a1445c56b1e479d2d67e67c99226717903b
  34. negaDuckImg = [[pygame.image.load("DarkwingSp.gif")],
  35. [pygame.image.load("DarkwingFlap.gif"),
  36. pygame.image.load("DarkwingFlap2.gif")]]
  37. #Load in Sound
  38. gunshot = pygame.mixer.Sound("gun.wav")
  39. quack = pygame.mixer.Sound("Quack.ogg")
  40. dSprites = pygame.sprite.Group()
  41. healthBars = pygame.sprite.Group()
  42. flash = pygame.sprite.Group()
  43. score = 0
  44. class NegaDuck(pygame.sprite.Sprite):
  45. def __init__(self, dogHand):
  46. pygame.sprite.Sprite.__init__(self)
  47. self.image = negaDuckImg[0][0]
  48. self.image = self.image.convert()
  49. self.image.set_colorkey((0,0,255))
  50. self.rect = self.image.get_rect()
  51. self.rect.center = (dogHand.rect.center)
  52. self.rect.centerx += 60
  53. self.changeDelay = 0
  54. self.dog = False
  55. self.enemy = True
  56. #Death Animation Vars
  57. self.isDead = False
  58. self.deadDelay = 10
  59. #Normal Animation Vars
  60. self.anim = []
  61. self.animDelay = 15
  62. self.frame = 0
  63. self.pause = 0
  64. while 1:
  65. self.dx = random.randrange(-4,4)
  66. self.dy = random.randrange(-4,4)
  67. if not (self.dx,self.dy) == (0,0):
  68. break
  69. self.setAnim()
  70. def update(self):
  71. if not self.isDead:
  72. self.rect.centerx += self.dx
  73. self.rect.centery += self.dy
  74. self.changeDir()
  75. self.animate()
  76. else:
  77. self.anidead()
  78. def anidead(self):
  79. self.rect.centery += 3
  80. self.pause += 1
  81. if self.pause < 5:
  82. self.image = duckImg[2][0]
  83. self.image.set_colorkey((0,0,255))
  84. elif self.pause >= self.deadDelay:
  85. self.frame += 1
  86. self.pause = 5
  87. if self.frame >= len(self.anim):
  88. self.frame = 0
  89. self.image = self.anim[self.frame]
  90. self.image.set_colorkey((0,0,255))
  91. def animate(self):
  92. self.pause +=1
  93. if self.pause >= self.animDelay:
  94. self.frame +=1
  95. #print self.frame
  96. self.pause = 0
  97. if self.frame >= len(self.anim):
  98. self.frame = 0
  99. self.image = self.anim[self.frame]
  100. if self.dx < 0:
  101. self.image = pygame.transform.flip(self.image, True, False)
  102. self.image.set_colorkey((0,0,255))
  103. def changeDir(self):
  104. if self.rect.left < 0:
  105. while 1:
  106. self.dx = random.randrange(0,4)
  107. self.dy = random.randrange(-4,4)
  108. self.rect.left = 0
  109. if (self.dx,self.dy) != (0,0):
  110. break
  111. if self.rect.right > 640:
  112. while 1:
  113. self.dx = random.randrange(-4,0)
  114. self.dy = random.randrange(-4,4)
  115. self.rect.right = 640
  116. if (self.dx,self.dy) != (0,0):
  117. break
  118. if self.rect.top < 0:
  119. while 1:
  120. self.dx = random.randrange(-4,4)
  121. self.dy = random.randrange(0,4)
  122. self.rect.top = 0
  123. if (self.dx,self.dy) != (0,0):
  124. break
  125. if self.rect.bottom > 301:
  126. while 1:
  127. self.dx = random.randrange(-4,4)
  128. self.dy = random.randrange(-4,0)
  129. self.rect.bottom = 301
  130. if (self.dx,self.dy) != (0,0):
  131. break
  132. self.setAnim()
  133. def setAnim(self):
  134. if self.isDead:
  135. self.anim = negaDuckImg[0]
  136. else:
  137. self.anim = negaDuckImg[1]
  138. class Duck(pygame.sprite.Sprite):
  139. def __init__(self, dogHand):
  140. pygame.sprite.Sprite.__init__(self)
  141. self.image = duckImg[2][0]
  142. self.image = self.image.convert()
  143. self.image.set_colorkey((136,216,0))
  144. self.rect = self.image.get_rect()
  145. self.rect.center = (dogHand.rect.center)
  146. self.rect.centerx += 60
  147. self.changeDelay = 0
  148. self.dog = False
  149. self.enemy = False
  150. #Death Animation Vars
  151. self.isDead = False
  152. self.deadDelay = 10
  153. #Normal Animation Vars
  154. self.anim = []
  155. self.animDelay = 15
  156. self.frame = 0
  157. self.pause = 0
  158. self.dirChanges = 0
  159. while True:
  160. self.dx = random.randrange(-4,4)
  161. self.dy = random.randrange(-4,4)
  162. if not (self.dx,self.dy) == (0,0):
  163. break
  164. self.setAnim()
  165. def update(self):
  166. if not self.isDead:
  167. self.rect.centerx += self.dx
  168. self.rect.centery += self.dy
  169. self.changeDir()
  170. self.animate()
  171. else:
  172. self.anidead()
  173. def anidead(self):
  174. self.rect.centery += 3
  175. self.pause += 1
  176. if self.pause < 5:
  177. self.image = duckImg[2][0]
  178. self.image.set_colorkey((136,216,0))
  179. elif self.pause >= self.deadDelay:
  180. self.frame += 1
  181. self.pause = 5
  182. if self.frame >= len(self.anim):
  183. self.frame = 0
  184. self.image = self.anim[self.frame]
  185. self.image.set_colorkey((136,216,0))
  186. def animate(self):
  187. self.pause +=1
  188. if self.pause >= self.animDelay:
  189. self.frame +=1
  190. #print self.frame
  191. self.pause = 0
  192. if self.frame >= len(self.anim):
  193. self.frame = 0
  194. self.image = self.anim[self.frame]
  195. if self.dx < 0:
  196. self.image = pygame.transform.flip(self.image, True, False)
  197. self.image.set_colorkey((136,216,0))
  198. def isOut(self):
  199. return self.rect.right < 0 or self.rect.left < 640 or \
  200. self.rect.bottom < 0
  201. def changeDir(self):
  202. if self.rect.bottom > 301:
  203. self.dirChanges += 1
  204. while 1:
  205. self.dx = random.randrange(-4,4)
  206. self.dy = random.randrange(-4,0)
  207. self.rect.bottom = 301
  208. if (self.dx,self.dy) != (0,0):
  209. break
  210. if self.dirChanges > 0:
  211. return
  212. if self.rect.left < 0:
  213. self.dirChanges += 1
  214. while 1:
  215. self.dx = random.randrange(0,4)
  216. self.dy = random.randrange(-4,4)
  217. self.rect.left = 0
  218. if (self.dx,self.dy) != (0,0):
  219. break
  220. if self.rect.right > 640:
  221. self.dirChanges += 1
  222. while 1:
  223. self.dx = random.randrange(-4,0)
  224. self.dy = random.randrange(-4,4)
  225. self.rect.right = 640
  226. if (self.dx,self.dy) != (0,0):
  227. break
  228. if self.rect.top < 0:
  229. self.dirChanges += 1
  230. while 1:
  231. self.dx = random.randrange(-4,4)
  232. self.dy = random.randrange(0,4)
  233. self.rect.top = 0
  234. if (self.dx,self.dy) != (0,0):
  235. break
  236. self.setAnim()
  237. def setAnim(self):
  238. if self.dy == 0:
  239. self.anim = duckImg[1]
  240. else:
  241. self.anim = duckImg[0]
  242. if self.isDead:
  243. self.anim = duckImg[3]
  244. class Dog(pygame.sprite.Sprite):
  245. def __init__(self):
  246. pygame.sprite.Sprite.__init__(self)
  247. self.image = dogImg[1]
  248. self.image = self.image.convert()
  249. self.image.set_colorkey((0,0,255))
  250. self.rect = self.image.get_rect()
  251. self.rect.center = (random.randrange(45,595),440)
  252. self.spawn = True
  253. self.release = False
  254. self.retreat = False
  255. self.dog = True
  256. self.enemy = False
  257. self.releaseSpeed = 2
  258. self.negaCounter = 0
  259. global score
  260. #hack
  261. def isOut(self):
  262. return False
  263. def update(self):
  264. global score
  265. self.releaseSpeed = 5
  266. if self.spawn:
  267. self.rect.centery -= self.releaseSpeed
  268. if self.rect.top <= 200:
  269. self.spawn = False
  270. self.release = True
  271. self.retreat = False
  272. self.image = dogImg[0]
  273. self.image.set_colorkey((0,0,255))
  274. elif self.release:
  275. #self.negaCounter += 1
  276. #if len(dSprites.sprites()) > 6 and self.negaCounter >= 6:
  277. # dSprites.add(NegaDuck(self))
  278. # self.negaCounter = 0
  279. #else:
  280. dSprites.add(Duck(self))
  281. quack.play()
  282. self.spawn = False
  283. self.release = False
  284. self.retreat = True
  285. elif self.retreat:
  286. self.rect.centery += self.releaseSpeed
  287. if self.rect.top > 320:
  288. self.spawn = True
  289. self.retreat = False
  290. self.release = False
  291. self.reset()
  292. def reset(self):
  293. self.rect.center = (random.randrange(45,595),440)
  294. self.spawn = True
  295. self.image = dogImg[1]
  296. self.image.set_colorkey((0,0,255))
  297. class setPiece(pygame.sprite.Sprite):
  298. def __init__(self, image, topleft, layer):
  299. pygame.sprite.Sprite.__init__(self)
  300. self.image = image
  301. self.image = self.image.convert()
  302. self.image.set_colorkey( ( 0 , 0 , 255) )
  303. self.rect = self.image.get_rect()
  304. self.rect.topleft = topleft
  305. self.layer = layer
  306. def update(self):
  307. pass
  308. class Crosshair(pygame.sprite.Sprite):
  309. def __init__(self, gun):
  310. pygame.sprite.Sprite.__init__(self)
  311. self.image = pygame.image.load("Crosshair.gif")
  312. self.image = self.image.convert()
  313. self.rect = self.image.get_rect()
  314. self.rect.center, trigger = gun.get_pos()
  315. self.gun = gun
  316. def update(self):
  317. self.rect.center, trigger = self.gun.get_pos()
  318. class Flash(pygame.sprite.Sprite):
  319. def __init__(self, gun):
  320. pygame.sprite.Sprite.__init__(self)
  321. self.image = pygame.image.load("Gunshot.gif")
  322. self.image = self.image.convert()
  323. self.rect = self.image.get_rect()
  324. self.rect.center, trigger = gun.get_pos()
  325. self.pause = 0
  326. def update(self):
  327. self.pause += 1
  328. if self.pause >= 5:
  329. flash.remove(self)