Advertisement
Guest User

fifteen

a guest
Jan 6th, 2016
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.78 KB | None | 0 0
  1. # Dora Jambor, dorajambor@gmail.com
  2. # January, 2016
  3. # Implementation of the game fifteen in Python
  4.  
  5. import time, pdb
  6. from Tkinter import *
  7.  
  8. # ---------- parameters ----------
  9. # Dimensions
  10. min_dim = 3
  11. max_dim = 9
  12.  
  13. # Board elements
  14. d = 0
  15. board = []
  16. counter = 0
  17.  
  18. # Location of blank space
  19. blankx = 0
  20. blanky = 0
  21.  
  22. # ---------- functions ----------
  23. def greet():
  24.     print 'This is the Game of Fifteen!'
  25.  
  26. def dim():
  27.     global min_dim, max_dim, d
  28.     d = int(raw_input('Insert the dimension of the board: '))
  29.     while True:
  30.         if d >=min_dim and d <= max_dim:
  31.             break
  32.         d = int(raw_input('Try again: '))
  33.     return d    
  34.    
  35. # Initialize the board
  36. '''
  37. This fills up the two-dimensional board[][] list with numbers ascending
  38. from the inputted dimension to 1
  39. '''
  40. def setup():
  41.     numbers = d * d - 1
  42.     global board, blankx, blanky, game_running
  43.     blankx = d - 1
  44.     blanky = d - 1
  45.     board = []
  46.    
  47.     # Fill board with stringvars
  48.     var_text = StringVar()
  49.     for i in range(d):
  50.         row = []
  51.         for j in range(d):
  52.             row.append(var_text.get())
  53.             var_text.set(numbers)
  54.             numbers -= 1
  55.             if numbers == 0:
  56.                 var_text.set(' ')
  57.         board.append(row)
  58.    
  59.     for j, row in enumerate(board):
  60.         buttons_row = []
  61.         for i, string_var in enumerate(row):
  62.             b = tk.Label(root, textvariable=string_var)
  63.             b.grid(row=j, column=i)
  64.             buttons_row.append(b)
  65.         buttons.append(buttons_row)
  66.            
  67.  
  68. # Play the game
  69. '''
  70. A function called by Tkinter that allows the user to interact with the game board
  71. and play the game by moving the tiles.
  72. '''  
  73. def play(i,j):
  74.     global blankx, blanky, game_running
  75.     if game_running:
  76.         if (blankx, blanky) in [(i+1,j),(i-1,j),(i,j+1),(i,j-1)]:
  77.             board[blanky][blankx] = board[j][i]
  78.             board[j][i] = ' '
  79.             buttons[blanky][blankx]['text'] = buttons[j][i]['text']
  80.             buttons[j][i]['text'] = '   '
  81.             blanky = j
  82.             blankx = i
  83.            
  84.             if won():
  85.                 # lable is now visible
  86.                 label.lift()
  87.                 game_running = False
  88.     else:
  89.         setup()
  90.         game_running = True
  91.         # label is now invisible
  92.         label.lower()
  93.                                                                        
  94. def won():
  95.     number = 0
  96.  
  97.     for j, row in enumerate(board):
  98.         for i, char in enumerate(row,1):
  99.             number += 1
  100.             if number == d * d and char == ' ':
  101.                 return True
  102.             elif str(char) != str(number):
  103.                 return False
  104.     return True
  105.  
  106.  
  107. # ---------- main ----------
  108. root = Tk()
  109. root.config(bg = 'black', borderwidth=4)
  110. root.wm_title("Game of Fifteen")
  111.  
  112. # Frame for the board game
  113. frame = Frame(root)
  114. frame.config(bg='black')
  115. frame.grid(row=0, column=0)
  116.  
  117. # label for winning
  118. label = Button(root, text="You won!", fg="pink",font=("Helvetica",15), comman=setup)
  119. label.config(bg='black')
  120. label.grid(row=0, column=0, ipadx=5, ipady=5)
  121.  
  122.  
  123. greet()
  124. d = dim()
  125. init()
  126. buttons = []
  127.  
  128. for j, row in enumerate(board):
  129.     buttons_row = []
  130.     for i, char in enumerate(row):
  131.         v = StringVar()
  132.         v = board[j][i]
  133.         b = Label(frame, textvariable=v, bg='pink', font=("Helvetica", 30))      
  134.         if board[j][i]== d * d:
  135.             b = Label(frame, textvariable = '   ', bg='pink',font=("Helvetica", 30))
  136.         b.grid(row=j, column=i,sticky="nsew", padx=4, pady=4)
  137.         b.bind('<Button-1>',lambda e, i=i,j=j:play(i,j))
  138.         buttons_row.append(b)
  139.     buttons.append(buttons_row)
  140.    
  141. setup()    # start over
  142. game_running = True
  143. root.mainloop()    # start engine
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement