Foros del Web » Programando para Internet » Python »

Buscaminas megabasico

Estas en el tema de Buscaminas megabasico en el foro de Python en Foros del Web. Bueno, estaba desarrollando un ejercicio, que trataba de realizar un buscaminas bien basico, y como veran en el codigo, bastante molesto y con 0 jugabilidad ...
  #1 (permalink)  
Antiguo 04/10/2011, 20:04
 
Fecha de Ingreso: septiembre-2011
Mensajes: 42
Antigüedad: 13 años, 2 meses
Puntos: 3
Buscaminas megabasico

Bueno, estaba desarrollando un ejercicio, que trataba de realizar un buscaminas bien basico, y como veran en el codigo, bastante molesto y con 0 jugabilidad jaja, pero la idea era poner en practica las matrices.

Si pudieran revisarlo, y decirme que tal les parece la forma en que lo desarrolle, y si se les viene otras formas de hacerlo, o proponerme como reto algo que le falte al que hize. Pero repito, con codigos basicos...

Código Python:
Ver original
  1. from random import randrange
  2. def cuenta (x,y):
  3.     suma = 0
  4.     for a in range (x-1,x+2):
  5.         for b in range (y-1,y+2):
  6.             if a>=0 and a<=l_matriz-1 and b>=0 and b<=l_matriz-1:
  7.                 if matriz[a][b]=="*":
  8.                     suma = suma + 1
  9.     return suma
  10. def print_matriz (a):
  11.     print "\n"
  12.     for x in a:
  13.         for y in x:
  14.             print y," ",
  15.         print "\n"
  16. print "Reglas:"
  17. print "     Ganas"
  18. print "         a) Si descubres la posicion de todas las minas"
  19. print "     Pierdes:"
  20. print "         a) Si pisas una mina"
  21. print "         b) Si fallas al indicar la posicion de una mina"
  22. print "Configuracion:"
  23. l_matriz = input (" 1- Ingresa largo:    ")
  24. minas = input ("    2- Ingresa cantidad de minas:   ")
  25.  
  26. #Crear matriz oculta
  27. matriz = []
  28. for A in range (l_matriz):
  29.     matriz2 = []
  30.     for B in range (l_matriz):
  31.         matriz2.append (0)
  32.     matriz.append (matriz2)
  33. #Crear matriz visible
  34. matriz2 = []
  35. for A in range (l_matriz):
  36.     matriz3 = []
  37.     for B in range (l_matriz):
  38.         matriz3.append ("#")
  39.     matriz2.append (matriz3)
  40. #Rellenar matriz con minas
  41. suma = 0
  42. while suma!=minas:
  43.     random1 = randrange(0,l_matriz)
  44.     random2 = randrange(0,l_matriz)
  45.     if matriz[random1][random2] != '*':
  46.         matriz[random1][random2] = '*'
  47.         suma = suma + 1
  48. #Conteo de minas
  49. for C in range (l_matriz):
  50.     for D in range (l_matriz):
  51.         e = cuenta(C,D)
  52.         if matriz[C][D]!="*":
  53.             matriz[C][D]=e
  54. #Desarrollo del juego
  55. suma = 0
  56. while suma!=minas:
  57.     print "\n"
  58.     print "---------------------------------------------------------------------"
  59.     z = raw_input ("Escribe MINA en caso que encuentres una o en caso contrario presiona Enter  ")
  60.     if z=="MINA":
  61.         print "Ingresa coordenadas de un lugar con minas"
  62.         y2 = input ("   Ingresa coordenada x:  ") -1
  63.         x2 = input ("   Ingresa coordenada y:  ") -1
  64.         if matriz[x2][y2]=="*":
  65.             suma = suma + 1
  66.             matriz2[x2][y2]="*"
  67.             if suma==minas:
  68.                 print_matriz (matriz2)
  69.                 print "Felicidades. Has ganado"
  70.                 break
  71.         else:
  72.             print_matriz (matriz)
  73.             print "Has perdido"
  74.             break
  75.     print "Ingrese coordenadas de un lugar sin minas"
  76.     y = input ("    Ingresa coordenada x:   ") -1
  77.     x = input ("    Ingresa coordenada y:   ") -1
  78.     if matriz[x][y]!="*":
  79.         matriz2[x][y]=matriz[x][y]
  80.     else:
  81.         print_matriz (matriz)
  82.         print "Has perdido"
  83.         break
  84.     print_matriz (matriz2)
  85.     print "Aun te quedan",minas-suma,"minas por descubrir"
  86. print "\n"
  87. asdf = input ("Apreta un boton para cerrar")

Exitos!
__________________
"Porque nada se...
quiero saberlo todo"
  #2 (permalink)  
Antiguo 05/10/2011, 07:36
3nr1c
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Buscaminas megabasico

El programa en sí no está mal desarrollado (acabo de jugar un par de partidas y gané) y, sin demasiado esfuerzo (sólo algunos gráficos) y con la ayuda de una librería gráfica podrías hacerlo bastante más jugable.

Saludos
  #3 (permalink)  
Antiguo 05/10/2011, 08:55
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Buscaminas megabasico

Código Python:
Ver original
  1. #Buscaminas.py
  2. from random import sample
  3. from itertools import product
  4.  
  5. def makeMap(rows, cols, char):
  6.     map = [[char] * cols for _ in xrange(rows)]
  7.     return map
  8.  
  9. def makeMines(mines, rows, cols):
  10.     return sample(list(product(range(rows), range(cols))), mines)
  11.  
  12. def putMines(map, minePoints):
  13.     for x, y in minePoints:
  14.         map[x][y] = '*'
  15.  
  16. def isInsideMap(rows, cols, i, j):
  17.     return (i >= 0 and i < rows) and (j >= 0 and j < cols)
  18.  
  19. def makeNumbers(map, rows, cols):
  20.     def change(map, i, j, rows, cols):
  21.         if isInsideMap(rows, cols, i, j) and map[i][j] != '*':
  22.             if not map[i][j].isdigit():
  23.                 map[i][j] = '1'
  24.             else:
  25.                 map[i][j] = str(int(map[i][j]) + 1)
  26.            
  27.     for i in xrange(rows):
  28.         for j in xrange(cols):
  29.             if map[i][j] == '*':
  30.                 for x, y in product([0, 1, -1], [0, 1, -1]):
  31.                     if x or y:
  32.                         change(map, i+x, j+y, rows, cols)
  33.  
  34. def printMap(map):
  35.     for row in map:
  36.         print ''.join(row)
  37.        
  38. def floodFill(map, rows, cols, i, j, target, replace):
  39.     if (not isInsideMap(rows, cols, i, j)) or map[i][j] != target:
  40.         return
  41.     map[i][j] = replace
  42.     floodFill(map, rows, cols, i+1, j, target, replace)
  43.     floodFill(map, rows, cols, i, j+1, target, replace)
  44.     floodFill(map, rows, cols, i-1, j, target, replace)
  45.     floodFill(map, rows, cols, i, j-1, target, replace)
  46.    
  47. def copyChars(map1, map2, rows, cols, char):
  48.     for i in xrange(rows):
  49.         for j in xrange(cols):
  50.             if map1[i][j] == char:
  51.                 map2[i][j] = char
  52.                
  53. def replaceChars(map, rows, cols, target, replace):
  54.     for i in xrange(rows):
  55.         for j in xrange(cols):
  56.             if map[i][j] == target:
  57.                 map[i][j] = replace
  58.                
  59. def isWin(map, mapPlayer, rows, cols):
  60.     m = '\n'.join(''.join(row) for row in map)
  61.     n = '\n'.join(''.join(row) for row in mapPlayer)
  62.     m = m.replace("*", "X")
  63.     n = n.replace(".", "X")
  64.     return m == n

Código Python:
Ver original
  1. from buscaminas import *
  2.  
  3. rows = 2
  4. cols = 2
  5. mines = 1
  6.  
  7. map = makeMap(rows, cols, '.')
  8. playerMap = makeMap(rows, cols, '.')
  9.  
  10. minePoints = makeMines(mines, rows, cols)
  11. putMines(map, minePoints)
  12.  
  13. makeNumbers(map, rows, cols)
  14.  
  15. while True:
  16.     printMap(playerMap)
  17.     print "Dame un punto"
  18.     x = int(raw_input()) - 1
  19.     y = int(raw_input()) - 1
  20.    
  21.     if not isInsideMap(rows, cols, x, y):
  22.         continue
  23.    
  24.     if map[x][y] == '*':
  25.         replaceChars(map, rows, cols, '.', '#')
  26.         printMap(map)
  27.         print "Perdiste"
  28.         break
  29.     elif map[x][y] == '.':
  30.         floodFill(map, rows, cols, x, y, '.', '#')
  31.         copyChars(map, playerMap, rows, cols, '#')
  32.     else:
  33.         playerMap[x][y] = map[x][y]
  34.        
  35.     if isWin(map, playerMap, rows, cols):
  36.         printMap(map)
  37.         print "Ganaste"
  38.         break

Hace tiempo que ya había hecho un buscaminas pero nunca lo termine, cuando vi tu post me puse a terminarlo.

Etiquetas: formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 16:32.