Hello again Hope you are all well. I'm trying to make a "match 3" game, where you have a square grid and have to put 3 matching shapes in a row. I need a function that tells me if the game is playable, ie. it is possible to match 3 shapes by only swapping 2 adjacent shapes. I have looked at the co-ordinates and got a list of the "offset co-ordinates" needed for the above.
I have a list of coordinates and a list of "lemons" and I want to see if *any* lemon coordinate is in the list of coordinates. I tried this: if any(((x+1, y+1), (x-1, y+2),(x-2, y+1),(x-1, y-1 ))) in fruit_type: return True Thinking that if *any* of the tuples is in fruit_type(a list of tuples), then it should return True. However, it always equates to False. If I iterate through the tuples and see if any are in fruit_type, it returns True (when it should). I have tried many print statements to make sure what is happening, and also to make sure that I am comparing type<tuples>. I just wondered what it is that I'm misunderstanding, or what I've done wrong. Here is the whole programme for completeness: #!usr/bin/env python import random class Gem(object): def __init__(self, x, y, fruit): self.x = x self.y = y self.fruit = fruit gems = [] x, y = 0, 0 fruits = ["lemon", "banana", "apple", "pineapple", "mango"] for gem in range(81): gems.append(Gem(x, y, random.choice(fruits))) x += 1 if x >= 9: x = 0 y += 1 def game_on(fruits): for fruit in fruits: fruit_type = [(gem.x, gem.y) for gem in gems if gem.fruit == fruit] for x, y in fruit_type: if (x-1, y+1) in fruit_type: if any(((x+1, y+1), (x-1, y+2),(x-2, y+1),(x-1, y-1 ))) in fruit_type: return True elif (x-1, y-1) in fruit_type: if any(((x+1, y-1), (x-2, y-1),(x-1, y+1),(x-1, y-2))) in fruit_type: return True elif (x+1, y+1) in fruit_type: if any(((x+2, y+1), (x+1, y-1),(x+1, y+2),(x-1, y+1))) in fruit_type: return True elif (x+1, y-1) in fruit_type: if any(((x+1, y+1), (x+1, y-2),(x+2, y-1),(x-1, y-1))) in fruit_type: return True elif (x-2, y+1) in fruit_type: if (x-1, y+1) in fruit_type: return True elif (x-2, y-1) in fruit_type: if (x-1, y-1) in fruit_type: return True elif (x-1, y-2) in fruit_type: if (x-1, y-1) in fruit_type: return True elif (x+1, y-2) in fruit_type: if (x+1, y-1) in fruit_type: return True return False print game_on(fruits) And here;s a typical printout: mango [(3, 0), (0, 1), (3, 1), (5, 1), (6, 1), (8, 1), (1, 2), (2, 2), (5, 2), (1, 4), (4, 4), (6, 4), (2, 5), (4, 5), (5, 5), (2, 6), (3, 6), (3, 8)] <type 'tuple'># fruit_type and type(fruit_type[2]) got (3, 1), and (2, 2) (4, 2), (2, 3), (1, 2), (2, 0).If any of these are in fruit type, we have a match (1, 2) <type 'tuple'> It's in.# this is from iterating over the tuples and making sure they are type tuple. We have a match. ##many more matches found### False # the return from the function Thanks a lot Col _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor