Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Dora Jambor, dorajambor@gmail.com
- # January, 2016
- # Implementation of the game fifteen in Python
- import time, pdb
- from Tkinter import *
- # ---------- parameters ----------
- # Dimensions
- min_dim = 3
- max_dim = 9
- # Board elements
- d = 0
- board = []
- counter = 0
- # Location of blank space
- blankx = 0
- blanky = 0
- # ---------- functions ----------
- def greet():
- print 'This is the Game of Fifteen!'
- def dim():
- global min_dim, max_dim, d
- d = int(raw_input('Insert the dimension of the board: '))
- while True:
- if d >=min_dim and d <= max_dim:
- break
- d = int(raw_input('Try again: '))
- return d
- # Initialize the board
- '''
- This fills up the two-dimensional board[][] list with numbers ascending
- from the inputted dimension to 1
- '''
- def setup():
- numbers = d * d - 1
- global board, blankx, blanky, game_running
- blankx = d - 1
- blanky = d - 1
- board = []
- # Fill board with stringvars
- var_text = StringVar()
- for i in range(d):
- row = []
- for j in range(d):
- row.append(var_text.get())
- var_text.set(numbers)
- numbers -= 1
- if numbers == 0:
- var_text.set(' ')
- board.append(row)
- for j, row in enumerate(board):
- buttons_row = []
- for i, string_var in enumerate(row):
- b = tk.Label(root, textvariable=string_var)
- b.grid(row=j, column=i)
- buttons_row.append(b)
- buttons.append(buttons_row)
- # Play the game
- '''
- A function called by Tkinter that allows the user to interact with the game board
- and play the game by moving the tiles.
- '''
- def play(i,j):
- global blankx, blanky, game_running
- if game_running:
- if (blankx, blanky) in [(i+1,j),(i-1,j),(i,j+1),(i,j-1)]:
- board[blanky][blankx] = board[j][i]
- board[j][i] = ' '
- buttons[blanky][blankx]['text'] = buttons[j][i]['text']
- buttons[j][i]['text'] = ' '
- blanky = j
- blankx = i
- if won():
- # lable is now visible
- label.lift()
- game_running = False
- else:
- setup()
- game_running = True
- # label is now invisible
- label.lower()
- def won():
- number = 0
- for j, row in enumerate(board):
- for i, char in enumerate(row,1):
- number += 1
- if number == d * d and char == ' ':
- return True
- elif str(char) != str(number):
- return False
- return True
- # ---------- main ----------
- root = Tk()
- root.config(bg = 'black', borderwidth=4)
- root.wm_title("Game of Fifteen")
- # Frame for the board game
- frame = Frame(root)
- frame.config(bg='black')
- frame.grid(row=0, column=0)
- # label for winning
- label = Button(root, text="You won!", fg="pink",font=("Helvetica",15), comman=setup)
- label.config(bg='black')
- label.grid(row=0, column=0, ipadx=5, ipady=5)
- greet()
- d = dim()
- init()
- buttons = []
- for j, row in enumerate(board):
- buttons_row = []
- for i, char in enumerate(row):
- v = StringVar()
- v = board[j][i]
- b = Label(frame, textvariable=v, bg='pink', font=("Helvetica", 30))
- if board[j][i]== d * d:
- b = Label(frame, textvariable = ' ', bg='pink',font=("Helvetica", 30))
- b.grid(row=j, column=i,sticky="nsew", padx=4, pady=4)
- b.bind('<Button-1>',lambda e, i=i,j=j:play(i,j))
- buttons_row.append(b)
- buttons.append(buttons_row)
- setup() # start over
- game_running = True
- root.mainloop() # start engine
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement