Advertisement
Guest User

Untitled

a guest
Jan 5th, 2020
1,336
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.34 KB | None | 0 0
  1. import pygame as pg
  2. import random
  3.  
  4.  
  5. # Opciones
  6. TAM_VENTANA = 400
  7. TAM_PIXEL = 20
  8. COLOR_FONDO = 255, 255, 255
  9. NEGRO = 0, 0, 0
  10. COLOR_MANZANA = 87,166,57
  11. COLOR_SERPIENTE = 255,69,0
  12. FPS = 10
  13.  
  14.  
  15. # Variables globales
  16. CENTRO= [int(TAM_VENTANA / 2)] * 2
  17. cuadricula = int(TAM_VENTANA / TAM_PIXEL)
  18. posiciones_serpiente = []
  19. contrario = {pg.K_UP: pg.K_DOWN, pg.K_DOWN: pg.K_UP, pg.K_LEFT: pg.K_RIGHT, pg.K_RIGHT: pg.K_LEFT}
  20. pierde = False
  21.  
  22.  
  23. class Manzana:
  24. def __init__(self):
  25. self.tam = TAM_PIXEL
  26. self.img = pg.Surface((TAM_PIXEL, TAM_PIXEL))
  27. self.img.fill(COLOR_MANZANA)
  28. self.mover()
  29.  
  30. def _celdas_libres(self):
  31. for y in range(cuadricula):
  32. for x in range(cuadricula):
  33. pos = [x * TAM_PIXEL, y *TAM_PIXEL]
  34. if pos not in posiciones_serpiente:
  35. yield pos
  36.  
  37. def mover(self):
  38. celdas_libres = list(self._celdas_libres())
  39. self.pos = random.choice(celdas_libres)
  40.  
  41.  
  42. class Serpiente:
  43. def __init__(self):
  44. self.pos = [CENTRO]
  45. self.pixel = pg.Surface((TAM_PIXEL, TAM_PIXEL))
  46. self.pixel.fill(COLOR_SERPIENTE)
  47.  
  48. def mover_cabeza(self, tecla):
  49. if tecla == pg.K_UP:
  50. self.pos[0][1] -= 1 * TAM_PIXEL
  51. elif tecla == pg.K_DOWN:
  52. self.pos[0][1] += 1 * TAM_PIXEL
  53. if tecla == pg.K_RIGHT:
  54. self.pos[0][0] += 1 * TAM_PIXEL
  55. elif tecla == pg.K_LEFT:
  56. self.pos[0][0] -= 1 * TAM_PIXEL
  57. self.pos[0] = self.desborde(self.pos[0])
  58.  
  59. def comprobar_pierde(self):
  60. global pierde
  61. # Se come a si misma
  62. if self.pos[0] in self.pos[1:]:
  63. pierde = True
  64.  
  65. def desborde(self, pos):
  66. suma = 0,0
  67. # Desborde horizontal
  68. if pos[1] < 0:
  69. suma = 0, TAM_VENTANA
  70. elif pos[1] >= TAM_VENTANA:
  71. suma = 0, -(TAM_VENTANA + TAM_PIXEL)
  72. # Desborde vertical
  73. if pos[0] < 0:
  74. suma = TAM_VENTANA, 0
  75. elif pos[0] >= TAM_VENTANA:
  76. suma = -(TAM_VENTANA + TAM_PIXEL), 0
  77.  
  78. pos[0] += suma[0]
  79. pos[1] += suma[1]
  80. return pos
  81.  
  82. def mover(self, tecla):
  83. global posiciones_serpiente
  84. x_ant, y_ant = self.pos[0]
  85. self.mover_cabeza(tecla)
  86. # Mover el cuerpo hacia delante
  87. for pos in self.pos[1:]:
  88. x, y = x_ant, y_ant
  89. x_ant, y_ant = pos[0], pos[1]
  90. pos[0], pos[1] = x, y
  91. self.comprobar_pierde()
  92. posiciones_serpiente = self.pos
  93.  
  94. def crecer(self, posicion_manzana):
  95. self.pos.append(posicion_manzana)
  96.  
  97.  
  98. def main():
  99. pg.init()
  100. ventana = pg.display.set_mode((TAM_VENTANA, TAM_VENTANA))
  101. serpiente = Serpiente()
  102. manzana = Manzana()
  103. pg.display.set_caption('Snake')
  104. fuente_puntos = pg.font.SysFont('arial', 30, bold=True)
  105. fuente_game_over = pg.font.SysFont('arial', 40, bold=True)
  106. run = True
  107. tecla = None
  108. while run:
  109. ventana.fill(COLOR_FONDO)
  110. if pierde:
  111. ventana.fill(NEGRO)
  112. ventana.blit(fuente_game_over.render('GAME OVER', 1, (255,255,255)), (75,125))
  113. for e in pg.event.get():
  114. if e.type == pg.QUIT: run = False
  115. else:
  116. for e in pg.event.get():
  117. if e.type == pg.QUIT: run = False
  118.  
  119. if e.type == pg.KEYDOWN: # Se apreta una tecla
  120. if tecla != contrario[e.key]: # No se puede cambiar de dirección
  121. tecla = e.key
  122. break
  123.  
  124. for pos in serpiente.pos:
  125. ventana.blit(serpiente.pixel, pos)
  126.  
  127. ventana.blit(manzana.img, manzana.pos)
  128.  
  129. puntos = fuente_puntos.render(str(len(serpiente.pos)), 1, (0, 0, 0))
  130. ventana.blit(puntos, (2, 2))
  131.  
  132. # Mover la serpiente
  133. if tecla:
  134. serpiente.mover(tecla)
  135.  
  136. # Aumetar el tamaño si come
  137. if serpiente.pos[0] == manzana.pos:
  138. serpiente.mover(tecla)
  139. serpiente.crecer(manzana.pos)
  140. manzana.mover()
  141.  
  142. # Redibujar
  143. pg.display.flip()
  144. pg.time.Clock().tick(FPS)
  145.  
  146. # Al salir del bucle se cierra
  147. pg.quit()
  148.  
  149. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement