• API
• FAQ
• Tools
• Archive
SHARE
TWEET

# Untitled

a guest Jan 5th, 2020 1,037 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
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):
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()
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.
Top