Advertisement
Guest User

Untitled

a guest
Nov 20th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.55 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. from constantes import *
  5. from def_dados import *
  6. from math import *
  7.  
  8. M_LARG_INI=38
  9.  
  10. def distancia(x1, y1, x2, y2):
  11. return sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)
  12.  
  13. def colidem(per, ini):
  14. raio1 = M_LARG_INI
  15. raio2 = M_LARG_INI
  16. d = distancia(per.x, per.y, ini.x, ini.y)
  17. if d <= raio1 + raio2:
  18. return True
  19. #else
  20. return False
  21.  
  22. def mover_perso(per):
  23. '''
  24. função responsavel por mover o personagem na tela
  25. :param per: jogo.Personagem
  26. :return: Personagem
  27. '''
  28. posicao_x = per.x + per.dx
  29. posicao_y = per.y + per.dy
  30. if posicao_x > L1_LIMITE_DIREITO or posicao_x < L1_LIMITE_ESQUERDO:
  31. return Personagem(per.x, per.y, per.dx, per.dy, per.direcao)
  32. if posicao_y < L1_LIMITE_CIMA or posicao_y > L1_LIMITE_BAIXO:
  33. return Personagem(per.x, per.y, per.dx, per.dy, per.direcao)
  34. return Personagem(posicao_x, posicao_y, per.dx, per.dy, per.direcao)
  35.  
  36. def desenha_game_over():
  37. texto_game_over = texto("GAME OVER", Fonte("comicsans", 50), Cor("red"))
  38. colocar_imagem(texto_game_over, tela, LARGURA//2, ALTURA//2)
  39.  
  40. def mover_tiro(tir):
  41. '''
  42. funçao responsavel por mover os tiros na tela
  43. :param tir: jogo.Tiro
  44. :return: Tiro
  45. '''
  46. if tir.direcao == 1:
  47. novo = tir.y - VEL_TIRO
  48. return Tiro(tir.x, novo, tir.direcao)
  49. if tir.direcao == 2:
  50. novo = tir.x - VEL_TIRO
  51. return Tiro(novo, tir.y, tir.direcao)
  52. if tir.direcao == 3:
  53. novo = tir.y + VEL_TIRO
  54. return Tiro(tir.x, novo, tir.direcao)
  55. if tir.direcao == 4:
  56. novo = tir.x + VEL_TIRO
  57. return Tiro(novo, tir.y, tir.direcao)
  58. return tir
  59.  
  60. def mover_tiros(tir):
  61. return [mover_tiro(tiro) for tiro in tir]
  62.  
  63. def mover_jogo(jogo):
  64. '''
  65. função que é chamada no 'big bang' a cada tick
  66. é responsavel por chamar as outras funçoes
  67. :param jogo: Jogo
  68. :return: Jogo
  69. '''
  70. if (colidem(jogo.Personagem, jogo.inimigo)):
  71. return Jogo(jogo.Personagem, jogo.Tiro, True, jogo.inimigo)
  72. else:
  73. per=mover_perso(jogo.Personagem)
  74. tir=mover_tiros(jogo.Tiro)
  75. return Jogo(per, tir, jogo.game_over, jogo.inimigo)
  76.  
  77. def desenha_pers(per):
  78. '''
  79. funçao responsavel por desenhar o perosnagem e suas direçoes
  80. :param per: jogo.Personagen
  81. :return: Jogo
  82. '''
  83. colocar_imagem(IMG_LAYOUT_1,tela,LARGURA//2,ALTURA//2)
  84. if per.direcao == 1:
  85. colocar_imagem(PERSONAGEM_UP, tela, per.x, per.y)
  86. elif per.direcao == 2:
  87. colocar_imagem(PERSONAGEM_LEFT, tela, per.x, per.y)
  88. elif per.direcao == 3:
  89. colocar_imagem(PERSONAGEM_DOWN, tela, per.x, per.y)
  90. elif per.direcao == 4:
  91. colocar_imagem(PERSONAGEM_RIGHT, tela, per.x, per.y)
  92. else:
  93. colocar_imagem(PERSONAGEM_DOWN,tela,per.x,per.y)
  94.  
  95.  
  96. def desenha_tiro(tir):
  97. '''
  98. responsavel por desenhar o tiro e suas direçoes
  99. :param tir: jogo.Tiro
  100. :return: tela(Imagem)
  101. '''
  102. if tir.direcao == 1:
  103. colocar_imagem(TIRO_UP, tela, tir.x, tir.y)
  104. if tir.direcao == 2:
  105. colocar_imagem(TIRO_LEFT, tela, tir.x, tir.y)
  106. if tir.direcao == 3:
  107. colocar_imagem(TIRO_DOWN, tela, tir.x, tir.y)
  108. if tir.direcao == 4:
  109. colocar_imagem(TIRO_RIGHT, tela, tir.x, tir.y)
  110.  
  111. def desenha_tiros(tir):
  112. for tiro in tir:
  113. desenha_tiro(tiro)
  114.  
  115. def desenha_inimigo(ini):
  116. colocar_imagem(INIMIGO, tela, ini.x, ini.y)
  117.  
  118. def desenha_jogo(jogo):
  119. '''
  120. funçao que é chamada no 'big bang'
  121. é responsavel por chamar as funçoes de desenhar
  122. :param jogo: Jogo
  123. :return: tela(imagem)
  124. '''
  125. if jogo.game_over == True:
  126. desenha_game_over()
  127. else:
  128. desenha_pers(jogo.Personagem)
  129. desenha_inimigo(jogo.inimigo)
  130. desenha_tiros(jogo.Tiro)
  131.  
  132. '''
  133. trata_tecla: Personagem, Tecla -> Personagem
  134. Conforme aperta as teclas de movimento muda o dx e dy do personagem'''
  135.  
  136. def trata_tecla_pers(per, tecla):
  137. if tecla == pg.K_w:
  138. return Personagem(per.x, per.y, 0, -VEL_PERSONAGEM, 1)
  139. if tecla == pg.K_a:
  140. return Personagem(per.x, per.y, -VEL_PERSONAGEM, 0, 2)
  141. if tecla == pg.K_s:
  142. return Personagem(per.x, per.y, 0, VEL_PERSONAGEM, 3)
  143. if tecla == pg.K_d:
  144. return Personagem(per.x, per.y, VEL_PERSONAGEM, 0, 4)
  145. return per
  146.  
  147. def trata_tecla_tiro(jog, tecla):
  148. '''
  149. responsavel por atirar, quando tecla == pg.K_SPACE
  150. :param jog: jogo
  151. :param tecla: pg.<tecla>
  152. :return: Tiro
  153. '''
  154. if tecla == pg.K_SPACE:
  155. tiro_x=jog.Personagem.x
  156. tiro_y=jog.Personagem.y
  157. jog.Tiro.append(Tiro(tiro_x, tiro_y, jog.Personagem.direcao))
  158. return jog.Tiro
  159. #else
  160.  
  161. return jog.Tiro
  162.  
  163. def trata_tecla_jogo(jogo, tecla):
  164. '''
  165. funçao que é chamada no 'big bang' por quando_tecla
  166. é reponsavel por chamar as funçoes baseadas em teclas
  167. :param jogo: Jogo
  168. :param tecla: pg.<tecla>
  169. :return: Jogo
  170. '''
  171. per = trata_tecla_pers(jogo.Personagem, tecla)
  172. tir = trata_tecla_tiro(jogo, tecla)
  173. return Jogo(per, tir, jogo.game_over, jogo.inimigo)
  174.  
  175.  
  176. def trata_solta_per(per, tecla):
  177. '''
  178. funçao responsavel por parar o personagem quando o jogador solta a tecla
  179. :param per: jogo.Personagem
  180. :param tecla: pg.<tecla>
  181. :return: Personagem
  182. '''
  183. if tecla == pg.K_w:
  184. return Personagem(per.x, per.y, per.dx, 0, per.direcao)
  185. if tecla == pg.K_a:
  186. return Personagem(per.x, per.y, 0, per.dy, per.direcao)
  187. if tecla == pg.K_s:
  188. return Personagem(per.x, per.y, per.dx, 0, per.direcao)
  189. if tecla == pg.K_d:
  190. return Personagem(per.x, per.y, 0, per.dy, per.direcao)
  191. return per
  192.  
  193. def trata_solta_tiro(tiro, tecla):
  194. '''
  195. função responsavel por poha nenuhma...
  196. :param tiro: jogo.Tiro
  197. :param tecla: pg.<tecla>
  198. :return: Tiro(a mesma merda)
  199. '''
  200. if tecla==pg.K_SPACE:
  201. return tiro
  202. return tiro
  203.  
  204. def trata_tecla_solta_jogo(jogo, tecla):
  205. '''
  206. função que é chamada no 'big bang' em quando_solta_tecla
  207. responsavel por chamar as funçoes de solta tecla
  208. :param jogo: Jogo
  209. :param tecla: pg.<tecla>
  210. :return: Jogo
  211. '''
  212. per=trata_solta_per(jogo.Personagem, tecla)
  213. tir=trata_solta_tiro(jogo.Tiro, tecla)
  214. return Jogo(per, tir, jogo.game_over, jogo.inimigo)
  215.  
  216.  
  217.  
  218. //////////////////////////////////////////////////////////////
  219.  
  220.  
  221. #!/usr/bin/env python
  222. # -*- coding: utf-8 -*-
  223.  
  224. from htdp_pt_br.universe import *
  225.  
  226.  
  227. '''# Preparacao da Tela'''
  228. (LARGURA, ALTURA) = (700, 700)
  229. tela = criar_tela_base(LARGURA, ALTURA)
  230.  
  231.  
  232. '''Imagens'''
  233.  
  234. #layouts
  235. IMG_LAYOUT_1 = carregar_imagem('./Imagens/layout1.png')
  236. IMG_LAYOUT_1 = definir_dimensoes(IMG_LAYOUT_1,LARGURA,ALTURA)
  237.  
  238. #personagem
  239. LARGURA_PERSONAGEM = 55
  240. ALTURA_PERSONAGEM = 80
  241.  
  242. M_LARGURA_PERSONAGEM = LARGURA_PERSONAGEM//2
  243. M_ALTURA_PERSONAGEM = ALTURA_PERSONAGEM//2
  244.  
  245. PERSONAGEM_BASE = carregar_imagem('./Imagens/fantasma_lado.png')
  246. PERSONAGEM_BASE = definir_dimensoes(PERSONAGEM_BASE, LARGURA_PERSONAGEM, ALTURA_PERSONAGEM)
  247.  
  248. PERSONAGEM_LEFT = PERSONAGEM_BASE
  249.  
  250. PERSONAGEM_RIGHT = PERSONAGEM_BASE
  251.  
  252. PERSONAGEM_UP = carregar_imagem('./Imagens/fantasma_costas.png')
  253. PERSONAGEM_UP = definir_dimensoes(PERSONAGEM_UP, LARGURA_PERSONAGEM, ALTURA_PERSONAGEM)
  254.  
  255. PERSONAGEM_DOWN = carregar_imagem('./Imagens/fantasma_frente.png')
  256. PERSONAGEM_DOWN = definir_dimensoes(PERSONAGEM_DOWN, LARGURA_PERSONAGEM, ALTURA_PERSONAGEM)
  257.  
  258.  
  259. #inimigo
  260. INIMIGO = carregar_imagem('./Imagens/passaralho.png')
  261. INIMIGO = definir_dimensoes(INIMIGO, 80, 80)
  262. INIMIGO_RIGHT = INIMIGO
  263. INIMIGO_LEFT = INIMIGO
  264.  
  265. #tiro
  266. TIRO = carregar_imagem('./Imagens/tiro.png')
  267. TIRO = definir_dimensoes(TIRO,60,14)
  268. TIRO_LEFT = TIRO
  269. TIRO_RIGHT = TIRO
  270. TIRO_UP = girar(TIRO,90)
  271. TIRO_DOWN = girar(TIRO,-90)
  272.  
  273.  
  274. '''Outras constantes'''
  275. #layout 1
  276. L1_LIMITE_MEIO_ESQ = 250 - M_LARGURA_PERSONAGEM
  277. L1_LIMITE_MEIO_DIR = 460 + M_LARGURA_PERSONAGEM
  278. L1_LIMITE_MEIO_CIMA = 250 - M_ALTURA_PERSONAGEM
  279. L1_LIMITE_MEIO_BAIXO = 460 + M_ALTURA_PERSONAGEM
  280.  
  281. L1_LIMITE_ESQUERDO = 55 + M_LARGURA_PERSONAGEM
  282. L1_LIMITE_DIREITO = LARGURA - 55 - M_LARGURA_PERSONAGEM
  283. L1_LIMITE_CIMA = 55 + M_ALTURA_PERSONAGEM
  284. L1_LIMITE_BAIXO = ALTURA - 55 - M_ALTURA_PERSONAGEM
  285.  
  286.  
  287. FREQUENCIA = 50
  288. VEL_PERSONAGEM = 5
  289. VEL_TIRO = 10
  290.  
  291. ///////////////////////////////////////////////////////////////
  292.  
  293. #!/usr/bin/env python
  294. # -*- coding: utf-8 -*-
  295.  
  296. from funcoes import *
  297. from constantes import *
  298. from def_dados import *
  299.  
  300. def main(inic):
  301. big_bang(inic,
  302. tela=tela,
  303. frequencia=FREQUENCIA,
  304. a_cada_tick=mover_jogo,
  305. desenhar=desenha_jogo,
  306. quando_tecla=trata_tecla_jogo,
  307. quando_solta_tecla=trata_tecla_solta_jogo,
  308. modo_debug=True)
  309.  
  310. main(Jogo(Personagem(100, 100, 0, 0, 0), [], False, Inimigo(350, 100)))
  311.  
  312. ///////////////////////////////////////////////////////////////////
  313.  
  314. #!/usr/bin/env python
  315. # -*- coding: utf-8 -*-
  316.  
  317. from htdp_pt_br.universe import *
  318.  
  319. ''' Personagem:
  320. x e y = posição do personagem na tela
  321. dx e dy = a Variação de x e y
  322. posi = LEFT / RIGHT / UP / DOWN (direção)
  323. '''
  324. Personagem = definir_estrutura("Personagem", "x, y, dx, dy, direcao")
  325.  
  326. '''Tiro:
  327. x e y = posição do tiro na tela
  328. direcao = LEFT / RIGHT / UP / DOWN (direção)
  329. '''
  330. Tiro = definir_estrutura("Tiro", "x, y, direcao")
  331.  
  332. Inimigo = definir_estrutura("Inimigo", "x,y")
  333. '''Jogo:
  334. contem as estruturas Personagem e Tiro
  335. '''
  336. Jogo = definir_estrutura("Jogo","Personagem, Tiro, game_over, inimigo")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement