Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- #
- # Buscaminas.py
- # Autor: Roberto Díaz Pérez
- import random, os
- def cls():
- """Para limpiar la pantalla, detecta el sistema operativo y usa el
- comando adecuado"""
- if os.name == "nt":
- os.system("cls")
- elif os.name == "posix":
- os.system("clear")
- def matriz(i,j,s):
- """Devuelve una matriz de dimensiones i * j rellena de s"""
- m=[]
- for a in range(i):
- m.append([])
- for b in range(j):
- m[a].append(s)
- return(m)
- def cont(m,b):
- """Cuenta la cantidad de veces que se repite b en la matriz m"""
- c=0
- for a in range(len(m)):
- c=c+m[a].count(b)
- return(c)
- def MinSweep(i,j,mines):
- """Función principal"""
- campo=matriz(i,j,0)
- a=0
- #Este while rellena la matriz de minas "*".
- while cont(campo,"*") < mines:
- campo[random.randint(0,i-1)][random.randint(0,j-1)] = "*"
- a += 1
- #Este if sirve para que si se pusieron más minas que cuadrados
- #disponibles, te lo diga y se reinicie el código.
- if mines > (i*j):
- print("Has puesto más minas que cuadrados disponibles")
- raw_input()
- cls()
- MinSweep(input("¿Columnas?: "), input("¿Filas?: "), input("¿Minas?: "))
- #Esta serie de for pone en cada posición de la matriz que no sea una
- #mina el numero de minas que hay alrededor.
- for x in range(i):
- for y in range(j):
- if campo[x][y] != "*":
- count=0
- for a in [1,0,-1]:
- for b in [1,0,-1]:
- try:
- if campo[x+a][y+b]=="*":
- if (x+a>-1 and y+b > -1):
- count += 1
- except:
- pass
- campo[x][y]=count
- #Se crea la matriz que se le enseña al usuario
- campoShow=matriz(i,j,"#")
- #A partir de este while, es la "interfaz", aquello que se le muestra
- #al usuario.
- while True:
- try:
- printmin(campo,i,j) #Enseña la matriz resuelta, es algo que
- #tuve que hacer para que estuviera en el mismo formato que la
- #matriz campoShow, dado que la función printmin además de imprimir
- #la matriz que se le manda, tambien la modifica.
- minasdesc=cont(campoShow,"* ")
- cls() #Borramos pantalla
- printmin(campoShow,i,j)
- #Si las minas restantes por descubrir, y las descubiertas son
- #iguales y además, no queda ningún "# " en campoShow, se termina
- #el juego
- if mines-minasdesc == 0 and campoShow.count("# ") == 0:
- break
- print("Quedan %i minas" %(mines-minasdesc))
- i1=int(raw_input("Fila: "))
- j1=int(raw_input("Columna: "))
- campoShow=clic(campo,campoShow,i1,j1 ,raw_input("¿Mina? (s/n): ")) #Si el raw_input recibe una "s"
- #hará el efecto del click derecho (marcar que ahí hay una mina), en caso contrario, hace click
- #izquierdo (arriesgarte a ver si hay mina).
- if campoShow[i1-1][j1-1]=="0 ":
- #Si el punto en el que aplicamos la función click, es un 0
- #automáticamente se aplica click alrededor de ese punto.
- for a in [1,0,-1]:
- for b in [1,0,-1]:
- try:
- print((i1+a-1>-1 and j1+b-1 > 0))
- if (i1+a-1>-1 and j1+b-1 > 0):
- campoShow=clic(campo,campoShow,i1+a,j1+b ,"n")
- except:
- pass
- except:
- print("¡Pon bien los datos!")
- raw_input()
- cls()
- printmin(campo,i,j)
- print(""" GANASTE!!!!""")
- raw_input()
- main()
- def clic(campo,campoShow,i=1,j=1,mina="n"):
- """Función que simula un click"""
- i=int(i)-1
- j=int(j)-1
- if mina=="s":
- campoShow[i][j]="*"
- else:
- if campo[i][j] == "*" or campo[i][j] =="* ":
- cls()
- print("BOOM!")
- printmin(campo,len(campo),len(campo[0]))
- raw_input()
- main()
- elif campoShow[i][j] != "0 ":
- campoShow[i][j]=campo[i][j]
- if campoShow[i][j]=="0 ":
- for a in [1,0,-1]:
- for b in [1,0,-1]:
- try:
- if (i+a>-1 and j+b > -1):
- campoShow=clic(campo,campoShow,i+1+a,j+1+b ,"n")
- except:
- pass
- return(campoShow)
- def printmin(campo,i,j):
- """Función que imprime la matriz en un formato agradable para el usuario"""
- campoprint=list(campo)
- x=range(i+1)
- for j in range(i+1):
- x[j]=str(x[j])+" "
- print "".join(x)
- for p in range(len(campoprint)):
- for t in range(len(campoprint[0])):
- if len(str(campoprint[p][t])) == 1:
- campoprint[p][t]=str(campoprint[p][t])+" "
- a=[]
- print str(p+1)+ " " + "".join(campoprint[p])
- def main():
- cls()
- MinSweep(input("¿Columnas?: "), input("¿Filas?: "), input("¿Minas?: "))
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement