[Tutor] 15 puzzle

Maritza Rodriguez maritza_rodz@hotmail.com
Tue, 08 May 2001 16:18:05 -0500


Thank you for responding.  I am confused, though.  I understand the first 
part about adding a new method to check the table against the solution.  
"Solution = ..." : this of,course goes under the class, right?  Now we 
define solved(self); that makes sense.  OK when we define 
is_it_really_solved(self), we are simply saying that if the puzzle is solved 
it will return the dialog stated and if it is not solved it will return the 
other dialog stated, right?  The next definition is where I got confused.  
"makebuttons(self,w)"; what is this part of the program saying?  What do you 
mean by blocks and keeping track of the buttons and making commands for 
them?  Are you referring to the number buttons?  What does this do to them?  
Is this the part that moves these buttons?
Please excuse me for asking so many questions.  I am totally new to 
programming, especially python.  Please help.

Maritza


>From: "Michael P. Reilly" <arcege@dsl092-074-184.bos1.dsl.speakeasy.net>
>Reply-To: arcege@speakeasy.net
>To: maritza_rodz@hotmail.com (Maritza Rodriguez)
>CC: tutor@python.org
>Subject: Re: [Tutor] 15 puzzle
>Date: Tue, 8 May 2001 15:58:40 -0400 (EDT)
>
>Maritza Rodriguez wrote
> >
> > This is what I have so far.  The program now exits the program by 
>pressing
> > the "DONE" button, which is great.  But, what I also want that button to 
>do
> > is tell you whether or not you have a solution to the puzzle, just 
>before it
> > exits.  Of course, first I have to figure out how to scramble the 
>buttons in
> > order to have an actual game going.  Any suggestions?
> >
> > Maritza
> >
> > import sys
> > from Tkinter import *
> >
> > def die(event=0):
> >     sys.exit(0)
> >
> > class Puzzle:
> >     def __init__(self,w):
> >         
>names=["1","2","3","4","5","6","7","8","9","10","11","12","13","14",
> >         "15"," "]
> >         n = 0
> >         for i in range(4):
> >             for j in range(4):
> >                 item1=Button(w,text=names[n])
> >                 item1.grid(row=i,column=j,sticky=E+W+N+S)
> >
> >                 item2=Button(w,text=names[n])
> >                 item2.grid(row=i,column=j,sticky=E+W+N+S)
> >
> >                 item3=Button(w,text=names[n])
> >                 item3.grid(row=i,column=j,sticky=E+W+N+S)
> >
> >                 item4=Button(w,text=names[n])
> >                 item4.grid(row=i,column=j,sticky=E+W+N+S)
> >
> >                 item5=Button(w,text=names[n])
> >                 item5.grid(row=i,column=j,sticky=E+W+N+S)
> >
> >                 item6=Button(w,text=names[n])
> >                 item6.grid(row=i,column=j,sticky=E+W+N+S)
> >
> >                 item7=Button(w,text=names[n])
> >                 item7.grid(row=i,column=j,sticky=E+W+N+S)
> >
> >                 item8=Button(w,text=names[n])
> >                 item8.grid(row=i,column=j,sticky=E+W+N+S)
> >
> >                 item9=Button(w,text=names[n])
> >                 item9.grid(row=i,column=j,sticky=E+W+N+S)
> >
> >                 item10=Button(w,text=names[n])
> >                 item10.grid(row=i,column=j,sticky=E+W+N+S)
> >
> >                 item11=Button(w,text=names[n])
> >                 item11.grid(row=i,column=j,sticky=E+W+N+S)
> >
> >                 item12=Button(w,text=names[n])
> >                 item12.grid(row=i,column=j,sticky=E+W+N+S)
> >
> >                 item13=Button(w,text=names[n])
> >                 item13.grid(row=i,column=j,sticky=E+W+N+S)
> >
> >                 item14=Button(w,text=names[n])
> >                 item14.grid(row=i,column=j,sticky=E+W+N+S)
> >
> >                 item15=Button(w,text=names[n])
> >                 item15.grid(row=i,column=j,sticky=E+W+N+S)
> >                 n = n+1
> >
> >
> > 	f = Frame(w)
> >         b1=Button(f,text="SCRAMBLE")
> >         b2=Button(f,text="DONE")
> >         if "DONE":
> >             b2["command"] = die
> >         b1.pack(side=LEFT)
> >         b2.pack(side=RIGHT)
> >         f.grid(row=4,column=0,columnspan=4)
>
>Add a new method to check the table against the "solution".
>
>     solution = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11",
>       "12", "13", "14", "15", " "]
>     # I would even make 'self.names = self.solution[:]' in __init__
>
>     def solved(self):
>         return self.names == self.solution
>
>Then make a method to handle the button presses:
>     def is_it_really_solved(self):
>         import Dialog
>         if self.solved:
>           Dialog.Dialog(self, {'title': 'Congratulations',
>                          'text': 'You solved the puzzle!',
>                          'bitmap': Dialog.DIALOG_ICON,
>                          'default': 0,
>                          'strings': ('Ok',))
>           self.quit()  # stop Tkinter
>         else:
>           Dialog.Dialog(self, {'title': 'Sorry',
>                                'text': 'Keep trying',
>                                'bitmap': Dialog.DIALOG_ICON,
>                                'default': 0,
>                                'strings': ('Ok',))
>[There are better dialog widgets, but this is one I remember without much
>reference material right now... and it works]
>
>Then for the blocks, you just need to keep track of the buttons, and
>make commands for them:
>     def makebuttons(self, w):
>         self.buttons = [None] * 16
>         for i in range(4):
>             for j in range(4):
>                 pos = i + j * 4
>                 name = self.names[pos]
>                 b = Button(w, text=name,
>                     command=lambda self=self, pos=(i, j): 
>self.buttonpress)
>                 self.buttons[pos] = b
>
>     def buttonpress(self, position):
>         (i, j) = pos
>         # find which surrounding button is "blank" and change around
>         # self.names and the text label for the proper buttons in
>         # self.buttons
>         # [Leave this as an exercise for you :)]
>
> >
> > root=Tk()
> >
> >
> > gr=Toplevel(root)
> > gr.title("15-PUZZLE")
> > grc = Puzzle (gr)
> >
> >
> > root.withdraw()
> > root.mainloop()
> >
> >
> > _________________________________________________________________
> > Get your FREE download of MSN Explorer at http://explorer.msn.com
> >
> >
> > _______________________________________________
> > Tutor maillist  -  Tutor@python.org
> > http://mail.python.org/mailman/listinfo/tutor
> >
>
>
>--
>+----------------------------------+-----------------------------------+
>| Michael P. Reilly                | arcege@speakeasy.net              |
>
>_______________________________________________
>Tutor maillist  -  Tutor@python.org
>http://mail.python.org/mailman/listinfo/tutor

_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com