﻿

# pacman

a guest
Dec 12th, 2019
105
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. ###PACMAAAANNN###
2.
3. #Para cada funcion que creemos vamos a crear un test que la pruebe
4.
5. import numpy as np
6. import random as rn
7. import time
8.
9. def mis_vecinos(coord_centro):
10. arriba = (coord_centro[0]-1,coord_centro[1])
11. derecha = (coord_centro[0],coord_centro[1]+1)
12. abajo = (coord_centro[0]+1,coord_centro[1])
13. izquierda = (coord_centro[0],coord_centro[1]-1)
16.
17.
18. def crear_tablero(filas,columnas):
19. tablero = (np.repeat(0,(filas+2)*(columnas+2))).reshape(filas+2,columnas+2)
20. n_filas = tablero.shape[0]
21. n_columnas = tablero.shape[1]
22. for fila in range(0,n_filas):
23. tablero[(fila,0)] = 1
24. tablero[(fila,n_columnas-1)] = 1
25. for columna in range(0,n_columnas):
26. tablero[(0,columna)] = 1
27. tablero[(n_filas-1,columna)] = 1
28. return tablero
29.
30. def contar(tablero,numero):
31. n_fila = tablero.shape[0]
32. n_columna = tablero.shape[1]
34. for i in range(1,n_fila-1):
35. for j in range(1,n_columna-1):
40.
41. def rellenar_tablero(tablero):
42. n_filas = tablero.shape[0]
43. n_columnas = tablero.shape[1]
44. for columna in range(2,int((n_columnas-1)/2)):
45. tablero[(2,columna)] = 1
46. for columna in range(int((n_columnas-1)/2)+2,n_columnas-2):
47. tablero[(2,columna)] = 1
48. for columna in range(2,int((n_columnas-1)/2)):
49. tablero[(n_filas-3,columna)] = 1
50. for columna in range(int((n_columnas-1)/2)+2,n_columnas-2):
51. tablero[(n_filas-3,columna)] = 1
52. for columna in range(1,n_columnas-2):
53. tablero[(4,columna)] = 1
54. for columna in range(2,n_columnas-1):
55. tablero[(n_filas-5,columna)] = 1
56. for fila in range(5,6):
57. tablero[(fila,3)] = 1
58. tablero[(fila,8)] = 1
59. for fila in range(7,n_filas-5):
60. tablero[(fila,3)] = 1
61. tablero[(fila,8)] = 1
62. for fila in range(5,16):
63. tablero[(fila,13)] = 1
64. for fila in range(9,13):
65. for columna in range(16,21):
66. tablero[(fila,columna)] = 1
67.
70. vecinos = mis_vecinos(coord_centro)
76.
77. def posiciones_iniciales(tablero):
78. pacman = 6
79. septo = 7
80. octo = 8
81. nona = 9
82. tablero[(15,18)] = pacman
83. tablero[(13,5)] = septo
84. tablero[(14,5)] = octo
85. tablero[(15,5)] = nona
86.
87. def buscar_pacman(tablero):
88. filas = tablero.shape[0]
89. columnas = tablero.shape[1]
90. pacman = 6
91. for i in range(0,filas-1):
92. for j in range(0,columnas-1):
96.
97. def buscar_fantasmas(tablero):
98. septo = 7
99. octo = 8
100. nona = 9
101. posiciones = []
102. filas = tablero.shape[0]
103. columnas = tablero.shape[1]
104. for i in range(1,filas-2):
105. for j in range(1,columnas-2):
107. if len(posiciones) == 0 and tablero[coordenada_actual] == septo:
109. if len(posiciones) == 1 and tablero[coordenada_actual] == octo:
111. if len(posiciones) == 2 and tablero[coordenada_actual] == nona:
113. return posiciones
114.
115. def mover_pacman(tablero,direccion, meme=0):
116. pacman = 6
117. posicion_actual = buscar_pacman(tablero)
118. vecinos = mis_vecinos(posicion_actual)
119. if direccion == 'W' and tablero[vecinos[0]] != 1:
120. if tablero[vecinos[0]] == 7 or tablero[vecinos[0]] == 8 or tablero[vecinos[0]] == 9:
121. tablero[posicion_actual] = 0
122. return 'GAME OVER'
123. else:
124. tablero[posicion_actual] = 0
125. x = posicion_actual[0] - 1
126. y = posicion_actual[1]
127. tablero[(x,y)] = pacman
128. elif direccion == 'S' and tablero[vecinos[1]] != 1:
129. if tablero[vecinos[1]] == 7 or tablero[vecinos[1]] == 8 or tablero[vecinos[1]] == 9:
130. tablero[posicion_actual] = 0
131. return 'GAME OVER'
132. else:
133. tablero[posicion_actual] = 0
134. x = posicion_actual[0] + 1
135. y = posicion_actual[1]
136. tablero[(x,y)] = pacman
137. elif direccion == 'A' and tablero[vecinos[2]] != 1:
138. if tablero[vecinos[2]] == 7 or tablero[vecinos[2]] == 8 or tablero[vecinos[2]] == 9:
139. tablero[posicion_actual] = 0
140. return 'GAME OVER'
141. else:
142. tablero[posicion_actual] = 0
143. x = posicion_actual[0]
144. y = posicion_actual[1] - 1
145. tablero[(x,y)] = pacman
146. elif direccion == 'D' and tablero[vecinos[3]] != 1:
147. if tablero[vecinos[3]] == 7 or tablero[vecinos[3]] == 8 or tablero[vecinos[3]] == 9:
148. tablero[posicion_actual] = 0
149. return 'GAME OVER'
150. else:
151. tablero[posicion_actual] = 0
152. x = posicion_actual[0]
153. y = posicion_actual[1] + 1
154. tablero[(x,y)] = pacman
155.
156. def mover_septo(tablero):
157. septo = 7
159. posicion_actual = buscar_fantasmas(tablero)[0]
160. vecinos = mis_vecinos(posicion_actual)
163. if abs(dist_x) > abs(dist_y):
164. if dist_x < 0 and tablero[vecinos[1]] != 1:
165. tablero[posicion_actual] = 0
166. x = posicion_actual[0] + 1
167. y = posicion_actual[1]
168. tablero[(x,y)] = septo
169. if dist_x < 0 and tablero[vecinos[1]] == 6:
170. tablero[posicion_actual] = 0
171. x = posicion_actual[0] + 1
172. y = posicion_actual[1]
173. tablero[(x,y)] = septo
174. return 'GAME OVER'
175. if dist_x > 0 and tablero[vecinos[0]] != 1:
176. tablero[posicion_actual] = 0
177. x = posicion_actual[0] - 1
178. y = posicion_actual[1]
179. tablero[(x,y)] = septo
180. if dist_x > 0 and tablero[vecinos[0]] == 6:
181. tablero[posicion_actual] = 0
182. x = posicion_actual[0] - 1
183. y = posicion_actual[1]
184. tablero[(x,y)] = septo
185. return 'GAME OVER'
186. if abs(dist_x) < abs(dist_y):
187. if dist_y < 0 and tablero[vecinos[3]] != 1:
188. tablero[posicion_actual] = 0
189. x = posicion_actual[0]
190. y = posicion_actual[1] + 1
191. tablero[(x,y)] = septo
192. if dist_y < 0 and tablero[vecinos[3]] == 6:
193. tablero[posicion_actual] = 0
194. x = posicion_actual[0]
195. y = posicion_actual[1] + 1
196. tablero[(x,y)] = septo
197. return 'GAME OVER'
198. if dist_y > 0 and tablero[vecinos[2]] != 1:
199. tablero[posicion_actual] = 0
200. x = posicion_actual[0]
201. y = posicion_actual[1] - 1
202. tablero[(x,y)] = septo
203. if dist_y > 0 and tablero[vecinos[2]] == 6:
204. tablero[posicion_actual] = 0
205. x = posicion_actual[0]
206. y = posicion_actual[1] - 1
207. tablero[(x,y)] = septo
208. return 'GAME OVER'
209.
210. def mover_fantasmas(tablero):
211. mover_septo(tablero)
212.
213.
214. def graficar(tablero):
215. for i in range(tablero.shape[0]):
216. for j in range(tablero.shape[1]):
217. if tablero[(i,j)] == 0:
218. print(chr(0x00002003),end=" ")
219. if tablero[(i,j)]==1:
220. print(chr(0x00002B1B),end=" ")
221. if tablero[(i,j)]==2:
222. print(chr(0x000026AB),end=" ")
223. if tablero[(i,j)]==6:
224. print(chr(0x0001F617),end=" ")
225. if tablero[(i,j)]==7 or tablero[(i,j)]==8 or tablero[(i,j)]==9:
226. print(chr(0x0001F47B),end=" ")
227. print()
228. print()
229.
230. def jugar():
231. tablero = crear_tablero(20, 20)
232. rellenar_tablero(tablero)
233. posiciones_iniciales(tablero)
234. wasd = ['S','S','A','A','A','A','A','A','A','A','W','W','W','W','W','W','W','W','W','W','W','A','A','A','A','S','A','A','S']
235. i = 0
236. while i < len(wasd):
237. time.sleep(0.3)
238. graficar(tablero)
239. mover_pacman(tablero, wasd[i])
240. time.sleep(0.3)
241. graficar(tablero)
242. if mover_pacman(tablero, wasd[i]) != None:
243. return 'GAME OVER'
244. mover_fantasmas(tablero)
245. time.sleep(0.3)
246. graficar(tablero)
247. if mover_fantasmas(tablero) != None:
248. return 'GAME OVER'
249. i = i + 1
250.
251. #%%
252.
253. def test_mis_vecinos():
254. c = (1,1)
255. vecinos = mis_vecinos(c)
257. assert len(vecinos) == 4
260.
261. test_mis_vecinos()
262.
263. def test_crear_tablero():
264. filas = 15
265. columnas = 10
266. tablero = crear_tablero(filas, columnas)
267. assert tablero.shape[0] == filas + 2
268. assert tablero.shape[1] == columnas + 2
269. for fila in range(0,filas+2):
270. assert tablero[(fila,0)] == 1
271. assert tablero[(fila,columnas+1)] == 1
272. for columna in range(0,columnas+2):
273. assert tablero[(0,columna)] == 1
274. assert tablero[(filas+1,columna)] == 1
275. for fila in range(1,filas+1):
276. for columna in range(1,columnas+1):
277. c = (fila,columna)
278. assert tablero[(c)] == 0
279.
280. test_crear_tablero()
281.
282. def test_contar():
283. tablero = np.repeat(1,16).reshape(4,4)
284. tablero[(1,1)] = 0
286. assert contar(tablero, 1) == valor_esperado
287.
288. test_contar()
289.
290. def test_rellenar_tablero():
291. tablero = crear_tablero(20,20)
292. n_filas = tablero.shape[0]
293. n_columnas = tablero.shape[1]
294. cant_0 = contar(tablero, 0)
295. cant_1 = contar(tablero, 1)
296. rellenar_tablero(tablero)
297. for columna in range(2,int((n_columnas-1)/2)):
298. assert tablero[(2,columna)] == 1
299. for columna in range(int((n_columnas-1)/2)+2,n_columnas-2):
300. assert tablero[(2,columna)] == 1
301. for columna in range(2,int((n_columnas-1)/2)):
302. assert tablero[(n_filas-3,columna)] == 1
303. for columna in range(int((n_columnas-1)/2)+2,n_columnas-2):
304. assert tablero[(n_filas-3,columna)] == 1
305. for columna in range(1,n_columnas-2):
306. assert tablero[(4,columna)] == 1
307. for columna in range(2,n_columnas-1):
308. assert tablero[(n_filas-5,columna)] == 1
309. for fila in range(5,6):
310. assert tablero[(fila,3)] == 1
311. assert tablero[(fila,8)] == 1
312. for fila in range(7,n_filas-5):
313. assert tablero[(fila,3)] == 1
314. assert tablero[(fila,8)] == 1
315. for fila in range(5,16):
316. assert tablero[(fila,13)] == 1
317. for fila in range(9,13):
318. for columna in range(16,21):
319. assert tablero[(fila,columna)] == 1
320. assert cant_0 == (n_filas-2)*(n_columnas-2) - cant_1
321.
322. test_rellenar_tablero()
323.
325. prueba0 = np.repeat(0,9).reshape(3,3)
326. prueba0[(0,1)] = 1
329. prueba1 = np.repeat(0,9).reshape(3,3)
332.
334.
335. def test_posiciones_iniciales():
336. tablero = crear_tablero(20, 20)
337. rellenar_tablero(tablero)
338. posiciones_iniciales(tablero)
339. pacman = 6
340. septo = 7
341. octo = 8
342. nona = 9
343. assert tablero[(15,18)] == pacman
344. assert tablero[(13,5)] == septo
345. assert tablero[(14,5)] == octo
346. assert tablero[(15,5)] == nona
347.
348. test_posiciones_iniciales()
349.
350. def test_buscar_pacman():
351. tablero = crear_tablero(20, 20)
352. rellenar_tablero(tablero)
353. posiciones_iniciales(tablero)
356.
357. test_buscar_pacman()
358.
359. def test_buscar_fantasmas():
360. tablero = crear_tablero(20, 20)
361. rellenar_tablero(tablero)
362. posiciones_iniciales(tablero)
365.
366. test_buscar_fantasmas()
367.
368. def test_mover_pacman():
369. tablero = crear_tablero(20, 20)
370. rellenar_tablero(tablero)
371. posiciones_iniciales(tablero)
372. mover_pacman(tablero, 'W')
373. mover_pacman(tablero, 'W')
374. mover_pacman(tablero, 'W')