#A simple memory game for greek letters import pygame import random from pygame.locals import * #Size of each card (must match image files) SIZE = 104 #Antall kort i hver retning X = 4 Y = 4 screen = pygame.display.set_mode((SIZE*X,SIZE*Y)) #Defining time (really made it MUCH easier to use the game!!!) clock = pygame.time.Clock() #clock.tick(40) #Card-class class Card: def __init__(self,name, image, x = 0, y = 0): self._name = name self._image = pygame.image.load(image) self._default = pygame.image.load("default.png").convert() self._turnedUp = True self._completed = False self._x = x self._y = y def turn(self): if not self._completed: if self._turnedUp: self._turnedUp = False else: self._turnedUp = True def show(self): if self._turnedUp: screen.blit(self._default, (self._x*SIZE, self._y*SIZE)) else: screen.blit(self._image, (self._x*SIZE, self._y*SIZE)) def __eq__(self, other): if self._name == other._name: return True else: return False def getState(self): return self._turnedUp def complete(self): self._completed = True def isComplete(self): return self._completed class Brett: def __init__(self,x,y,size): self._card_list = [] self._X = x self._Y = y self._SIZE = SIZE self._possible_letters = ["delta.png","sigma_C.png","my.png","alpha.png","lambda.png", "theta.png","omega.png","omega_C.png","rho.png","pi.png"] def fyllBrettet(self): for i in range(self._X): temp = [] for j in range(self._Y): #Legger til alfa-kort. Disse byttes ut senere. temp.append(Card("alfa","alpha.png",i,j)) self._card_list.append(temp) for i in range(self._X): for j in range(self._Y): self._card_list[i][j].show() def fillRandom(self): ranLet = random.sample(self._possible_letters,8) number_of_cards = range(0,self._X*self._Y) coordinates = [] for i in range(self._X): for j in range(self._Y): coordinates.append((i,j)) random.shuffle(coordinates) counter = 0 indeks = 0 for c in coordinates: if counter == 0: self._card_list[c[0]][c[1]] = Card(ranLet[indeks][:-4],ranLet[indeks],c[0],c[1]) counter += 1 elif counter == 1: self._card_list[c[0]][c[1]] = Card(ranLet[indeks][:-4],ranLet[indeks],c[0],c[1]) counter = 0 indeks += 1 def touch(self,x,y): earlier_X = 1 earlier_Y = 1 #print("sending in", x,y) for i in range(self._X): if x in range(i*SIZE,(i+1)*SIZE): #print("x range",i*SIZE,(i+1)*SIZE) for j in range(Y): if y in range(j*SIZE,(j+1)*SIZE): self._card_list[i][j].turn() self._card_list[i][j].show() print("shows the card") return self._card_list[i][j] earlier_Y = j earlier_X = i screen.fill((255,255,255)) brettet = Brett(X,Y,SIZE) brettet.fyllBrettet() brettet.fillRandom() #Fills the screen with white #The underlying list (the board) card_list = [] #Fills the board with one type for i in range(X): temp = [] for j in range(Y): temp.append(Card("alfa","alpha.png",i,j)) card_list.append(temp) letters = ["delta.png","sigma_C.png","my.png","alpha.png","lambda.png", "theta.png","omega.png","omega_C.png","rho.png","pi.png"] ranLet = random.sample(letters,8) opened = [] running = 1 while running: #clock.tick(20) #pygame.time.wait(20) event = pygame.event.poll() if event.type == pygame.QUIT: running = 0 elif event.type == pygame.MOUSEBUTTONDOWN: print("mouse at", event.pos) pygame.draw.circle(screen, (255,0,0), event.pos, 3) new = brettet.touch(*event.pos) print(new) print("is in?", new in opened) isin = False for card in opened: if card is new: isin = True print("isin",isin) if not isin: opened.append(new) print("length", len(opened)) if len(opened) == 3: if opened[0] == opened[1]: opened[0].complete() opened[1].complete() opened[0].turn() opened[1].turn() opened[0].show() opened[1].show() del opened[0] del opened[0] print(opened) print("checks") pygame.display.flip()