Hi, Sorry if this sends twice. I am using python 3.4.3 on windows 7 64bit.
I'm using John M. Zelle graphics module. Graphics module: http://mcsp.wartburg.edu/zelle/python/graphics/graphics/graphics.html I am trying to create user movable blocks that can only move in one direction at a time. The arrow keys are used to move left or right. Currently while moving left, pressing the right arrow key will change the blocks direction and vice versa. I'm trying to get the block to continue moving in only one direction determined by the arrow keys, i.e. pressing right should not move the blocks right if they already moving left. How can I fix my code to do this? I expected adding True/False variables (moveLEFT, moveRIGHT) would allow me to disable one key press while another is in action, unfortunately has not worked. I hope its OK that I attached files as they are long. --> blockgame.py import graphics import game_functions import time def handleKeys(event): global direction global moveLEFT global moveRIGHT print('Key pressed', event.keysym, event.keycode) if event.keysym == 'Left': direction = 'Left' moveLEFT = True moveRIGHT = False elif event.keysym == 'Right': direction = 'Right' moveLEFT = False moveRIGHT = True elif event.keysym == 'q': win.close() def game(): global direction global square global moveLEFT global moveRIGHT block = game_functions.GameBlock(WIN_WIDTH//2, WIN_HEIGHT//2, BLOCK_SIZE, BLOCK_SIZE, 'Red', None, None, 0) block.draw(win) square.append(block) block = game_functions.GameBlock(WIN_WIDTH//2, WIN_HEIGHT//2, BLOCK_SIZE, BLOCK_SIZE, 'Red', None, None, 0) block.draw(win) square.append(block) speed = 0.1 playing = True while playing: # Move squares for k in range(len(square)-1, 0, -1): moveX = square[k-1].getCentreX() - square[k].getCentreX() moveY = square[k-1].getCentreY() - square[k].getCentreY() square[k].move(moveX, moveY) # Update pos if moveLEFT == True and moveRIGHT == False: square[0].move(-20, 0) if moveRIGHT and moveLEFT == False: square[0].move(20, 0) time.sleep(speed) moveLEFT = False moveRIGHT = False WIN_WIDTH = 500 WIN_HEIGHT = 500 BLOCK_SIZE = 20 direction = "" square = [] win = graphics.GraphWin("Snake", WIN_WIDTH, WIN_HEIGHT) win.setBackground("white") win.bind_all('<Key>', handleKeys) game() win.mainloop() win.getMouse() win.close() --> game_functions.py import graphics class GameBlock(): def __init__(self, dx, dy, width, height, colour, imageName, blockType, points): self.centreX = dx self.centreY = dy self.width = width self.height = height self.colour = colour self.imageName = imageName self.blockType = blockType self.points = points self.scrollSpeed = 10 self.block = graphics.Rectangle(graphics.Point(self.centreX-self.width//2, self.centreY-self.height//2), graphics.Point(self.centreX+self.width//2, self.centreY+self.height//2)) self.block.setFill(colour) if not(imageName == None): self.image = graphics.Image(graphics.Point(dx,dy), imageName) else: self.image = None def getCentreX(self): return self.centreX def getCentreY(self): return self.centreY def move(self, dx, dy): self.centreX = self.centreX + dx self.centreY = self.centreY + dy self.block.move(dx,dy) if not(self.image == None): self.image.move(dx,dy) def draw(self, canvas): if self.image == None: self.block.draw(canvas) else: self.image.draw(canvas) __________________________ I will greatly appreciate any help! Kind Regards _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor