#!/usr/pgrad/gary/bin/sun4d/pythontk from Tkinter import * from dat import * import play, string, sys def createmenus(menubar,menus): for name, items in menus: b = Menubutton(menubar, {'text': name, Pack: {'side': 'left','padx': '2m'}}) b.menu = Menu(b) for item,cmd in items: b.menu.add('command', {'label': item, 'command' : cmd}) b['menu'] = b.menu class Screen(Frame): def gameoverdialog(self,message): dialog = Toplevel() choice = self.tk.call("tk_dialog", dialog, "Game over man", message,"questhead", "0", "Try again", "lie down and die") if choice == '0': return sys.exit() def message(self,text): dialog = Toplevel() self.tk.call("tk_dialog", dialog, "message", text, "", "0", "OK") def enterword(self, event): self.draw.delete(self.rubberbandLine) word = event.widget.get() event.widget.delete(0,len(word)) sx,sy = self.startx/squaresize, self.starty/squaresize ex,ey = self.endx/squaresize, self.endy/squaresize self.trymove(string.lower(word), sx,sy,ex,ey) def refresh_score(self,hscore, cscore): self.SCORE['text'] = 'SCORE '+hscore + ',' + cscore def mouseDown(self, event): self.startx = self.draw.canvasx(event.x, self.grid) self.starty = self.draw.canvasy(event.y, self.grid) def mouseMotion(self, event): self.endx = self.draw.canvasx(event.x, self.grid) self.endy = self.draw.canvasy(event.y, self.grid) dx = self.endx - self.startx dy = self.endy - self.starty if abs(dx) > abs(dy): self.endy = self.starty else: self.endx = self.startx if (self.startx != event.x) and (self.starty != event.y) : self.draw.delete(self.rubberbandLine) self.rubberbandLine = self.draw.create_line( self.startx, self.starty, self.endx, self.endy, {'width':3}) self.update_idletasks() def showmove(self, newletters): for x,y,c in newletters: self.draw.create_bitmap(x*squaresize, y*squaresize, {"bitmap":'@bitmap/'+c, 'foreground':'black', 'background': 'ivory'} ) self.showgrid() def showgrid(self): for x in range(boardsquares+1): d = squaresize/2 self.draw.create_line(d,x*squaresize+d,boardsize-d,x*squaresize+d) self.draw.create_line(x*squaresize+d,d, x*squaresize+d,boardsize-d) def reset(self): for x in range(boardsquares): for y in range(boardsquares): self.draw.create_bitmap((x+1)*squaresize, (y+1) *squaresize, self.specialdict[special[x][y]]) self.showgrid() def refresh_rack(self, rackstr): for b in self.rackbitmaps: self.RACK.delete(b) x,y = squaresize, squaresize for c in rackstr: self.rackbitmaps.append(self.RACK.create_bitmap(x, y, {"bitmap":'@bitmap/'+c})) x = x + squaresize def rackmouseDown(self, event): self.racklastx = event.x self.racklasty = event.y def rackmouseMove(self, event): if event.widget.find_withtag("current"): self.RACK.move("current", event.x - self.racklastx, event.y - self.racklasty) self.racklastx = event.x self.racklasty = event.y def createWidgets(self,menus,trymove): self.trymove = trymove top = {'side': 'top', 'fill': 'x'} bottom = {'side': 'bottom'} self.MBAR = Frame(self, {'relief': 'raised', 'bd': 2,Pack:top}) createmenus(self.MBAR,menus) self.SCORE = Label(self, {'text': 'SCRABBLE: score 0 0', Pack:top}) self.RACK =Canvas(self, {"width" : `squaresize*10`, "height" : `squaresize*2`,'bd':2,Pack:top}) self.rackbitmaps=[] Widget.bind(self.RACK, "<1>", self.rackmouseDown) Widget.bind(self.RACK, "", self.rackmouseMove) self.ENTER = Entry (self, {'bd': 2, 'relief':'raised', Pack:top}) self.draw = Canvas(self, {"width" : `boardsize`, "height" : `boardsize`,Pack:bottom}) self.ENTER.bind('', self.enterword) self.grid = squaresize if self.winfo_depth() == 1: self.specialdict = bwspecial else: self.specialdict = colorspecial self.ENTER.focus() self.reset() def __init__(self, menus, trymove, master=None): Frame.__init__(self, master) Pack.config(self) self.createWidgets(menus, trymove) self.rubberbandLine = None self.startx = self.starty = self.endx = self.endy = 0 Widget.bind(self.draw, "", self.mouseDown) Widget.bind(self.draw, "", self.mouseMotion)