diff --git a/minesweeper.py b/minesweeper.py index 7adbdf1..6d3eaac 100644 --- a/minesweeper.py +++ b/minesweeper.py @@ -1,5 +1,5 @@ from tkinter import * - +import random # Dummy function for feature implementation tracking def doNothing(feature): print("Feature not Implemented: " + feature) @@ -8,37 +8,119 @@ def doNothing(feature): class Field: board=[] + height = 10 + width = 10 + noOfMines = 15 def __init__(self, base): fieldFrame = Frame(base) fieldFrame.pack(side=BOTTOM) - for row in range(0,15): + for row in range(0,self.height): self.board.append([]) - for column in range(0,20): - self.board[row].append(Box(self.board, fieldFrame, row, column)) + for column in range(0,self.width): + self.board[row].append(Box(self.board, fieldFrame, row, column)) + + self.plantMines() + self.showMines() + def plantMines(self): + while(self.noOfMines>0): + for row in range(0, self.height): + for column in range(0, self.width): + if (random.randint(0, 100) < 2): + if(self.board[row][column].containsMine==False): + self.board[row][column].containsMine = True + self.board[row][column].opened = True + self.noOfMines = self.noOfMines - 1 + def showMines(self): + for row in range(0, self.height): + for column in range(0, self.width): + if(self.board[row][column].containsMine==True): + self.board[row][column].button.config(bg="blue") class Box(Field): opened = False - containsMine = True + containsMine = False flagged = False + nearbyMines = 0 def __init__(self, field, frame, row, column): self.gameField = field self.button = Button(frame, width=2, height=1) + self.button.config(bg="white smoke") + self.button.config(relief=GROOVE) self.row = row self.column = column self.button.grid(row=row, column=column) - self.button.bind("", self.openBox()) - -## Running function on startup - def openBox(self): - self.opened = True - if(self.containsMine==True): - print("Game Over") + self.button.bind("", self.openBox) + #self.button.bind("", self.helper) + self.button.bind("", self.flagBox) + ## TODO: Calculate nearby mines somehow + + def number_mines(self): + total = [] + + #top + if self.row != 0: + if self.column != Field.width - 1: total.append(Field.board[self.row - 1][self.column + 1].containsMine) + total.append(Field.board[self.row - 1][self.column].containsMine) + if self.column != 0: total.append(Field.board[self.row - 1][self.column - 1].containsMine) + + #bottom + if self.row != Field.height - 1: + total.append(Field.board[self.row + 1][self.column].containsMine) + if self.column != Field.width - 1: total.append(Field.board[self.row + 1][self.column + 1].containsMine) + if self.column != 0: total.append(Field.board[self.row + 1][self.column - 1].containsMine) + + #left + if self.column > 0: total.append(Field.board[self.row][self.column - 1].containsMine) + + #right + if self.column < Field.width - 1: total.append(Field.board[self.row][self.column + 1].containsMine) + + print(total) + total = sum(total) + print("Total Number of Mines: {}".format(total)) + return total + + def openBox(self, event): + x = self.number_mines() + print(self.row, self.column) + if(self.flagged==True or self.opened==True): + return 0 + else: + self.opened = True + if(Field.board[self.row][self.column].containsMine==True): + print("Game Over") + elif(not x): + ## open box and scan for nearby boxes to open + print("No nearby mines") + self.button.config(bg="green") + return + else: + x = self.number_mines() + self.button.config(relief=SUNKEN) + self.button.config(text=x) + self.button.config(bg="snow") + self.button.config(state=DISABLED) + return + + def flagBox(self, event): + if(self.opened==True): + return 0 + else: + if(self.flagged==False): + self.flagged = True + self.button.config(bg = "red") + self.button.config(state=DISABLED) + return + elif(self.flagged==True): + self.flagged = False + self.button.config(bg="white smoke") + self.button.config(state=NORMAL) # Create base window @@ -53,6 +135,6 @@ def openBox(self): gameField = Field(base) +gameField.showMines() - -base.mainloop() \ No newline at end of file +base.mainloop()