/jogo.py

https://github.com/RodrigoTjader/avanabene · Python · 150 lines · 124 code · 23 blank · 3 comment · 35 complexity · 8e28dd25b1c19ebbbd66285c8d696aca MD5 · raw file

  1. #! /usr/bin/env python
  2. # coding: utf-8
  3. import os, sys, pygame, random, argparse
  4. import animatedactor, object, pessoa, geral, tela as telaa
  5. parser = argparse.ArgumentParser(description='Ananias e Benevides.')
  6. parser.add_argument('--mudo', '-m', dest='mudo', action='store_const',
  7. const=True, default=False, help='Mudo')
  8. parser.add_argument('--colisao', '-c', dest='colisao', action='store_const',
  9. const=True, default=False, help='Caixas de colisão')
  10. parser.add_argument('--fps', '-f', dest='fps', action='store_const',
  11. const=True, default=False, help='Imprimir taxa de quadros')
  12. args = parser.parse_args()
  13. pygame.init()
  14. fonte = pygame.font.Font('unifont-5.1.20080820.pcf', 16)
  15. screen = pygame.display.set_mode(geral.size)
  16. pygame.display.set_caption(geral.titulo)
  17. ananias = animatedactor.AnimatedActor('ananias', (geral.lwidth / 2 - 7, geral.lheight / 2 - 4), [(2, 0, 3, 3)], (pygame.K_LEFT, pygame.K_RIGHT, pygame.K_DOWN, pygame.K_UP), (2, 2, 4, 4), (7, 8))
  18. benevides = animatedactor.AnimatedActor('benevides_guri', (geral.lwidth / 2 + 7, geral.lheight / 2 - 4), [(1, 0, 3, 2)], (pygame.K_a, pygame.K_d, pygame.K_s, pygame.K_w), (2, 2, 4, 4), (5, 7))
  19. try:
  20. if args.mudo:
  21. volume = pygame.mixer.music.get_volume()
  22. pygame.mixer.music.set_volume(0)
  23. else:
  24. volume = 0
  25. pygame.mixer.music.load(os.path.join('music', 'La esperanza.mp3'))
  26. pygame.mixer.music.play(-1)
  27. except:
  28. print 'teste'
  29. pass
  30. tela = [0, 0]
  31. t = telaa.Telas('telas.xml', [ananias, benevides])
  32. titulo = fonte.render(geral.titulo, False, (255, 255, 255))
  33. titulo = pygame.transform.scale(titulo, [int(geral.px / 2. * i) for i in titulo.get_rect()][2:])
  34. splash = pygame.Surface(geral.size)
  35. splash.blit(titulo, [geral.px * i for i in (geral.lwidth / 2 - titulo.get_rect()[2] / geral.px / 2, geral.lheight / 2 - titulo.get_rect()[3] / geral.px / 2)])
  36. splash.set_alpha(255)
  37. screen.blit(splash, (0, 0))
  38. pygame.display.flip()
  39. acabouosplash = False
  40. pygame.time.set_timer(pygame.USEREVENT, 2000)
  41. tempo = pygame.time.Clock()
  42. while True:
  43. events = pygame.event.get()
  44. for event in events:
  45. if event.type == pygame.QUIT \
  46. or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE):
  47. sys.exit()
  48. elif event.type == pygame.USEREVENT:
  49. acabouosplash = True
  50. elif (event.type == pygame.KEYDOWN and event.key == pygame.K_m):
  51. a = pygame.mixer.music.get_volume()
  52. pygame.mixer.music.set_volume(volume)
  53. volume = a
  54. t.input(events)
  55. t[tuple(tela)].input(events)
  56. if not acabouosplash:
  57. continue
  58. t.update(t[tuple(tela)])
  59. t[tuple(tela)].update()
  60. def mudatela(actor, outro):
  61. if not actor.eventtime:
  62. return
  63. if actor.pos[0] + actor.get_rect()[2] < 0:
  64. actor.pos[0] += geral.lsize[0]
  65. outro.pos[0] = actor.pos[0]
  66. if outro.pos[1] > actor.pos[1]:
  67. outro.pos[1] = actor.pos[1] + actor.get_rect()[3]
  68. else:
  69. outro.pos[1] = actor.pos[1] - actor.get_rect()[3]
  70. tela[0] -= 1
  71. outro.set_direction(0)
  72. elif actor.pos[0] >= geral.lsize[0]:
  73. actor.pos[0] -= geral.lsize[0]
  74. outro.pos[0] = actor.pos[0]
  75. if outro.pos[1] > actor.pos[1]:
  76. outro.pos[1] = actor.pos[1] + actor.get_rect()[3]
  77. else:
  78. outro.pos[1] = actor.pos[1] - actor.get_rect()[3]
  79. tela[0] += 1
  80. outro.set_direction(1)
  81. elif actor.pos[1] + actor.get_rect()[3] < 0:
  82. actor.pos[1] += geral.lsize[1]
  83. if outro.pos[0] > actor.pos[0]:
  84. outro.pos[0] = actor.pos[0] + actor.get_rect()[3]
  85. else:
  86. outro.pos[0] = actor.pos[0] - actor.get_rect()[3]
  87. outro.pos[1] = actor.pos[1]
  88. tela[1] -= 1
  89. outro.set_direction(2)
  90. elif actor.pos[1] >= geral.lsize[1]:
  91. actor.pos[1] -= geral.lsize[1]
  92. if outro.pos[0] > actor.pos[0]:
  93. outro.pos[0] = actor.pos[0] + actor.get_rect()[3]
  94. else:
  95. outro.pos[0] = actor.pos[0] - actor.get_rect()[3]
  96. outro.pos[1] = actor.pos[1]
  97. tela[1] += 1
  98. outro.set_direction(3)
  99. else:
  100. return
  101. mudatela(ananias, benevides)
  102. mudatela(benevides, ananias)
  103. t[tuple(tela)].fundo.render(screen)
  104. coisasadesenhar = []
  105. coisasadesenhar += t.coisasadesenhar
  106. coisasadesenhar += t[tuple(tela)].coisasadesenhar
  107. coisasadesenhar.sort(key=lambda x: -x.pos[1])
  108. for coisaadesenhar in coisasadesenhar:
  109. coisaadesenhar.render(screen)
  110. #desenha caixas de colisão
  111. if args.colisao:
  112. for coisa in t.coisasadesenhar + t[tuple(tela)].fundo.coisasacolidir + t[tuple(tela)].coisasacolidir:
  113. for colisao in coisa.colisao:
  114. caixa = [coisa.pos[0] + colisao[0],
  115. geral.lheight - (coisa.pos[1] + colisao[1]),
  116. colisao[2],
  117. colisao[3]]
  118. caixa[1] -= caixa[3]
  119. caixa = [i * geral.px for i in caixa]
  120. pygame.draw.rect(screen, (255, 0, 255), caixa, 1)
  121. if splash.get_alpha() > 0:
  122. splash.set_alpha(max(0, splash.get_alpha() - 255./10))
  123. screen.blit(splash, (0, 0))
  124. pygame.display.flip()
  125. tempo.tick(60)
  126. if args.fps:
  127. print tempo.get_fps()