SHARE
TWEET

pacman

a guest Dec 12th, 2019 88 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
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. OK, I Understand
 
Top