Guest User

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)
  14. coordenadas_vecinas = [arriba,abajo,izquierda,derecha]
  15. return coordenadas_vecinas
  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]
  33. contador = 0
  34. for i in range(1,n_fila-1):
  35. for j in range(1,n_columna-1):
  36. coordenada_actual = (i,j)
  37. if tablero[coordenada_actual] == numero:
  38. contador = contador + 1
  39. return contador
  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.  
  68. def buscar_adyacente(tablero,coord_centro,objetivo):
  69. adyacente = []
  70. vecinos = mis_vecinos(coord_centro)
  71. for coordenada in vecinos:
  72. if tablero[coordenada] == objetivo:
  73. adyacente.append(coordenada)
  74. return adyacente
  75. return adyacente
  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):
  93. coordenada_actual = (i,j)
  94. if tablero[coordenada_actual] == pacman:
  95. return coordenada_actual
  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):
  106. coordenada_actual = (i,j)
  107. if len(posiciones) == 0 and tablero[coordenada_actual] == septo:
  108. posiciones.append(coordenada_actual)
  109. if len(posiciones) == 1 and tablero[coordenada_actual] == octo:
  110. posiciones.append(coordenada_actual)
  111. if len(posiciones) == 2 and tablero[coordenada_actual] == nona:
  112. posiciones.append(coordenada_actual)
  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
  158. coordenada_pacman = buscar_pacman(tablero)
  159. posicion_actual = buscar_fantasmas(tablero)[0]
  160. vecinos = mis_vecinos(posicion_actual)
  161. dist_x = posicion_actual[0]-coordenada_pacman[0]
  162. dist_y = posicion_actual[1]-coordenada_pacman[1]
  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)
  256. coordenadas_esperadas = [(0,1),(1,2),(2,1),(1,0)]
  257. assert len(vecinos) == 4
  258. for coordenada in coordenadas_esperadas:
  259. assert coordenada in vecinos
  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
  285. valor_esperado = 3
  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.  
  324. def test_buscar_adyacente():
  325. prueba0 = np.repeat(0,9).reshape(3,3)
  326. prueba0[(0,1)] = 1
  327. coordenada_esperada0 = [(0,1)]
  328. assert buscar_adyacente(prueba0, (1,1), 1) == coordenada_esperada0
  329. prueba1 = np.repeat(0,9).reshape(3,3)
  330. coordenada_esperada1 = []
  331. assert buscar_adyacente(prueba1, (1,1), 1) == coordenada_esperada1
  332.  
  333. test_buscar_adyacente()
  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)
  354. posicion_esperada = (15,18)
  355. assert buscar_pacman(tablero) == posicion_esperada
  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)
  363. coordenadas = buscar_fantasmas(tablero)
  364. assert coordenadas == [(13,5),(14,5),(15,5)]
  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')
  375. pos_esperada = (13,18)
  376. pos = buscar_pacman(tablero)
  377. assert pos == pos_esperada
  378.  
  379. test_mover_pacman()
RAW Paste Data