OK.... Would it be ... er... uh... 'proper'... to put the maze in a module, then make the actual movement of the .gif's in a class in a seperate file (module)? I find the code required to build the maze to be quite large, even with the refinenements. For now, at least, I can't figure out how to do the maze in a class, and I want to get the .gif moving in a class because that makes sense. But I'm not sure how to put the .gif ON the maze if they are seperate files.
I will, of course import the maze, but then, how do I put the gif on the maze from the class? Is it even possible? am I asking the right question? T ----- Original Message ----- From: "Alan Gauld" <[EMAIL PROTECTED]> To: <tutor@python.org> Sent: Wednesday, May 09, 2007 1:08 PM Subject: Re: [Tutor] canvas -> CLASSES > > "Teresa Stanton" <[EMAIL PROTECTED]> wrote >> CLASSES: This is where I start getting confused. > > No kidding! :-) > >> put it into a class, and for some reason it all starts to get >> jumbled here, >> which it shouldn't because I write in C++. > > C++ OOP and Python are significantly different and some of > those differences may be at work here. > >> Since I've put it in a class, my design is off because I don't know >> how to >> 'call' it, among other issues. > > You need an instance which you don;t have currently. > >> Do the point definitions of the walls, boxes and T's get >> put inside the function? > > Probably not, probably etter to puut them in a list - as you do - and > pass the list into the method. > >> Right now the function calls itself and I don't think its the best >> way to do it, > > Nor do I, but I'mnot clear exactly what you are doing since > the data is all hard coded inside the function so it looks to me > like you will you will get into a loop... > > Some snippets and comments follow: > >> class Maze(object): >> def __init__(self): >> #initial position of .gif >> self.xp = 100 >> self.yp = 600 > > You don't seem to use selfd.xp/yp anywhere... > In fact since you don't initialize any objects this never even > gets called! > >> def createWall((x0, y0), (x1, y1), colour = 'blue', width = 3): >> """ Create a wall from (x0, y0) to (x1, y1). """ >> canvasOne.create_line(x0, y0, x1, y1, width = width, fill = >> colour) > > You don't have a self parameter in the method. Recall that > self is equivalent to this in C++ but needs to be explicitly > declared in Python methods. > > Also you are declaring parameters to be tuples which I don't > think you can do. You need to name the tuples, something like: > > def createWall(self, pt1,pt2, canvas = None, colour='blue', width=3) > > Also you use the canvasOne global value here which would > be better passed in as am parameter as shown above. > >> outerWall = [(450, 640), (475, 640), (475, 640), >> walls = [outerWall] > > Not sure why the second line is there. > The first is static data which means the method never changes > what it does. You never use the x0,y0, params passed in after > the create line above... > >> for wall in walls: >> for i in range(len(wall)-1): >> createWall(outerWall[i], outerWall[i+1]) > > For each entry draw a kine then come back into this loop > using the same data so we very quickly hit the Python > recursion limit I suspect. > >> topLeftBox = [(130, 105), (130, 125), ... >> secondTopLeftBox = [(160, 215), (160, 225), ... >> ... >> boxes = [topLeftBox, secondTopLeftBox, topRightBox, >> secondTopRightBox] >> >> for box in boxes: >> for i in range(len(box)-1): >> createWall(topLeftBox[i], topLeftBox[i+1]), >> createWall(secondTopLeftBox[i], >> secondTopLeftBox[i+1]), > > Sorry, I have no idea how this is supposed to work. I just got > confused about the mix of topLefts and box versus boxes etc. > > But remember that each call to createWall only uses the arguments > to draw a single line, then the rest uses the same data over again. > > Also to acces createWall you should really be using self.createWall > since createWall is a method of your Maze class. > >> x = 40 >> for i in range(9): >> x += 20 >> canvasOne.create_rectangle(x, 610, x+5, 615, fill = >> 'white') >> >> #left path built north to south >> y = 290 >> for i in range(15): >> y += 20 >> canvasOne.create_rectangle(220, y, 225, y+5, fill = >> 'white') > > > All these bits could be put into a function with the values as > parameters, something like:: > > def buildPath(val1,val2, number, increment, deltax,deltay,orientation, > fill='white') > for i in range(number): > val1 += increment > if orientation = 0: x,y = val1,val2 > else: x,y = val2,val1 > canvas.create_rectangle(x,y,x+deltax,y+deltay,fill) > > >> root = Tk() >> root.title("Background") >> >> canvasOne = Canvas(width = 800, height = 700, bg = 'black') >> createWall(450, 640, 475, 640) >> canvasOne.pack() >> >> root.mainloop() > > > Here yuou call createWall which is a method of Maze but you > don't instantiate Maze. I'd expect so9mething like: > > maze = Maze(x,y) > maze.createWall(....) > > But there's a lot of logic missing between there ared here. > Alsoi if thats all you are doing there is no point of having > a maze class, just write a createWall function. You need > to figure out what a Maze object is for. What are its > responsibilities in the program? What data does it manage? > What actions do you want it top perform? > > Unfortunately from your code I can't work out what you were > expecting of your Maze instances. > > HTH, > > > -- > Alan Gauld > Author of the Learn to Program web site > http://www.freenetpages.co.uk/hp/alan.gauld > > > _______________________________________________ > Tutor maillist - Tutor@python.org > http://mail.python.org/mailman/listinfo/tutor > > _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor