-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMineModel.py
151 lines (141 loc) · 4.18 KB
/
MineModel.py
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
import random
class MineModel:
def __init__(self):
# Start a new game
self.newGame()
# Starts a new game
def newGame(self):
# Holds number of rows and cols
rows = 10
cols = 10
# Each button's contents is set 0
self.grid = [[0]*(cols) for i in range(rows)]
# Counts number of bombs added to the board
bombNum = 0
# Stores bombs adjacent to current button
adj = 0
# Adds 10 bombs to random buttons
while bombNum != 10:
# A random location for one bomb:
i = random.randint(0, rows-1)
j = random.randint(0, cols-1)
# If there's not already a bomb in that spot, add it
if self.grid[i][j] != 'X':
self.grid[i][j] = 'X'
bombNum += 1
# Counts the amount of bombs adjacent to each button
# For every row in the grid
for row in range(rows):
# For every col in the grid
for col in range(cols):
# If there's not a bomb in that spot
if self.grid[row][col] != 'X':
if col == 0:
if row == 0: # First column, first row
# If it's adjacent spots have a bomb
if self.grid[row][col+1] == 'X':
# Increment the adjacent bomb counter
adj+=1
if self.grid[row+1][col+1] == 'X':
adj+=1
if self.grid[row+1][col] == 'X':
adj+=1
elif row == rows-1: # First column, last row
if self.grid[row-1][col] == 'X':
adj+=1
if self.grid[row-1][col+1] == 'X':
adj+=1
if self.grid[row][col+1] == 'X':
adj+=1
else: # First column, rows between 0 and 9
if self.grid[row-1][col] == 'X':
adj+=1
if self.grid[row-1][col+1] == 'X':
adj+=1
if self.grid[row][col+1] == 'X':
adj+=1
if self.grid[row+1][col+1] == 'X':
adj+=1
if self.grid[row+1][col] == 'X':
adj+=1
elif col == rows-1:
if row == 0: # Last column, first row
if self.grid[row+1][col] == 'X':
adj+=1
if self.grid[row+1][col-1] == 'X':
adj+=1
if self.grid[row][col-1] == 'X':
adj+=1
elif row == rows-1: # Last column, last row
if self.grid[row-1][col-1] == 'X':
adj+=1
if self.grid[row-1][col] == 'X':
adj+=1
if self.grid[row][col-1] == 'X':
adj+=1
else: # Last column, rows between 0 and 9
if self.grid[row-1][col-1] == 'X':
adj+=1
if self.grid[row-1][col] == 'X':
adj+=1
if self.grid[row+1][col] == 'X':
adj+=1
if self.grid[row+1][col-1] == 'X':
adj+=1
if self.grid[row][col-1] == 'X':
adj+=1
else:
if row == 0: # Columns between 0 and 9 and first row
if self.grid[row][col+1] == 'X':
adj+=1
if self.grid[row+1][col+1] == 'X':
adj+=1
if self.grid[row+1][col] == 'X':
adj+=1
if self.grid[row+1][col-1] == 'X':
adj+=1
if self.grid[row][col-1] == 'X':
adj+=1
elif row == rows-1: # Columns between 0 and 9 and last row
if self.grid[row-1][col-1] == 'X':
adj+=1
if self.grid[row-1][col] == 'X':
adj+=1
if self.grid[row-1][col+1] == 'X':
adj+=1
if self.grid[row][col+1] == 'X':
adj+=1
if self.grid[row][col-1] == 'X':
adj+=1
else: # Columns between 0 and 9 and rows between 0 and 9
if self.grid[row-1][col-1] == 'X':
adj+=1
if self.grid[row-1][col] == 'X':
adj+=1
if self.grid[row-1][col+1] == 'X':
adj+=1
if self.grid[row][col+1] == 'X':
adj+=1
if self.grid[row+1][col+1] == 'X':
adj+=1
if self.grid[row+1][col] == 'X':
adj+=1
if self.grid[row+1][col-1] == 'X':
adj+=1
if self.grid[row][col-1] == 'X':
adj+=1
# Add adjacent bomb count to the contents of that spot
self.grid[row][col] += adj
# Start over the counter
adj = 0
# Returns what's in the button clicked
def getSquare(self, row, col):
return self.grid[row][col]
# Returns current state of the game
def getGameState(self, count, row, col):
# If a button with a bomb is clicked, return 0
if self.grid[row][col] == 'X':
return 0
# If the max amount of moves made has been hit, return 1
if count == 90:
return 1