1

I'm trying to make a minesweeper with python. Now I'm trying to insert 10 mines into the lists randomly. Please help me to figure it out!

import random
import numpy as np
from random import randint

#assign a value of mines and create 8 x 8 empty array.
mines = 1000
arr1 = np.empty((8,8))

#insert 10 mines into random lists.
z = 1

if z < 11 :
    np.append(arr1, np.array(random.randint[mines]))
    z = z + 1
Mateen Ulhaq
  • 24,552
  • 19
  • 101
  • 135
이지민
  • 21
  • 1

3 Answers3

1

since you have a total of 64 places

get a random int in 0,63(total 64)

and figure out the x and y

import random
import numpy as np
from random import randint

#assign a value of mines and create 8 x 8 empty array.
mines = 1000
arr1 = np.empty((8,8))
print(arr1)

minesRemaining = 10
while minesRemaining > 0:
    r = randint (0,63)
    i = r//8
    j = r%8
    if arr1[i][j]!=1000:
        arr1[i][j]=1000
        minesRemaining-=1
print(arr1)
[[2.2588207e-316 0.0000000e+000 0.0000000e+000 0.0000000e+000
  0.0000000e+000 0.0000000e+000 0.0000000e+000 0.0000000e+000]
 [0.0000000e+000 0.0000000e+000 0.0000000e+000 0.0000000e+000
  0.0000000e+000 0.0000000e+000 0.0000000e+000 0.0000000e+000]
 [0.0000000e+000 0.0000000e+000 0.0000000e+000 0.0000000e+000
  0.0000000e+000 0.0000000e+000 0.0000000e+000 0.0000000e+000]
 [0.0000000e+000 0.0000000e+000 0.0000000e+000 0.0000000e+000
  0.0000000e+000 0.0000000e+000 0.0000000e+000 0.0000000e+000]
 [0.0000000e+000 0.0000000e+000 0.0000000e+000 0.0000000e+000
  0.0000000e+000 0.0000000e+000 0.0000000e+000 0.0000000e+000]
 [0.0000000e+000 0.0000000e+000 0.0000000e+000 0.0000000e+000
  0.0000000e+000 0.0000000e+000 0.0000000e+000 0.0000000e+000]
 [0.0000000e+000 0.0000000e+000 0.0000000e+000 0.0000000e+000
  0.0000000e+000 0.0000000e+000 0.0000000e+000 0.0000000e+000]
 [0.0000000e+000 0.0000000e+000 0.0000000e+000 0.0000000e+000
  0.0000000e+000 0.0000000e+000 0.0000000e+000 0.0000000e+000]]
[[1000.    0.    0.    0.    0.    0.    0.    0.]
 [   0.    0.    0. 1000.    0.    0.    0.    0.]
 [1000. 1000.    0.    0.    0.    0.    0.    0.]
 [   0. 1000.    0.    0.    0.    0.    0.    0.]
 [   0.    0.    0.    0.    0.    0. 1000.    0.]
 [   0.    0.    0. 1000.    0.    0.    0.    0.]
 [   0.    0.    0.    0. 1000.    0.    0.    0.]
 [1000.    0.    0.    0. 1000.    0.    0.    0.]]
Kuldeep Singh Sidhu
  • 3,748
  • 2
  • 12
  • 22
1

This will generate a minefield:

grid = np.zeros((8, 8), dtype=np.bool)
mask = np.random.choice(grid.size, 10, replace=False)
grid.reshape(-1)[mask] = True

One example output:

>>> grid
array([[False, False, False, False, False,  True, False,  True],
       [False, False, False, False, False, False,  True, False],
       [False,  True, False, False, False, False, False, False],
       [False,  True, False, False, False, False, False, False],
       [False, False, False, False, False, False,  True, False],
       [False, False, False, False, False, False, False, False],
       [False, False, False, False, False, False,  True, False],
       [False,  True,  True, False, False, False,  True, False]])
Mateen Ulhaq
  • 24,552
  • 19
  • 101
  • 135
1
foo = np.array(list(range(64))
bar = numpy.random.choice(foo, 10)
baz = np.zeros(64)
baz[bar] = 1000
baaz = reshape((8, 8))
Igor Rivin
  • 4,632
  • 2
  • 23
  • 35