Python - buscaminas

 
Vista:
sin imagen de perfil

buscaminas

Publicado por Erick (3 intervenciones) el 15/04/2016 04:14:14
Buenas, debo hacer un buscaminas recurso en python, alguien me podría mandar una función para que el buscavidas funcione, ósea un ejemplo de como seria que va , o que formula debería hacer.
ES RECURSIVAMENTE..




GRACIAS
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 2.239
Plata
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

buscaminas

Publicado por xve (1646 intervenciones) el 15/04/2016 08:09:25
Hola Erick, haber si este te sirve:
http://pastebin.com/6GuncsNA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#!/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()
    try:
        MinSweep(int(raw_input("¿Columnas?: ")), int(raw_input("¿Filas?: ")), int(raw_input("¿Minas?: ")))
    except:
        print("Error al introducir los datos")
        raw_input()
        main()
 
main()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar