Igra memorije 3. deo – Pygame

Dobro došli u treći po redu tutorijal za pravljenje igre memorije.
Nastavljamo sa funkcijom koja vraća koordinate na tabli onog polja kojem pripada prosledjena tačka, ako ni jednom ne pripada onda vraća tupl (None, None).

1
2
3
4
5
6
7
8
9
10
11
12
13
def get_box_at_pixel(x, y):
  ''' 
    Returns the row and column of the box at (x, y).
  '''
  for boxx in xrange(BOARDWIDTH):
    for boxy in xrange(BOARDHEIGHT):
      left, top = left_top_coords_of_box(boxx, boxy)
      box_rect = pygame.Rect(left, top, BOXSIZE, BOXSIZE)
      
      if box_rect.collidepoint(x, y):
        return (boxx, boxy)

  return (None, None)

Za svako polje u tabli se pravi njegov Rect objekat i za svaki taj Rect se poziva metoda collidepoint(x, y) koja vraća True ako se tačka na tim koordinatama nalazi unutar tog pravougaonika, ako se nadje takav onda se vrate njegove koordinate na tabli, ako ne onda se vrati tupl (None, None).


Prelazimo na metodu nam iscrtava oblike na ekran u zadatim bojama.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
def draw_icon(shape, color, boxx, boxy):
  ''' 
    Draws the colored shape at (boxx, boxy).
  '''
  quarter = int(BOXSIZE * .25)
  half = int(BOXSIZE * .5)

  # Get pixel coords from box coords.
  left, top = left_top_coords_of_box(boxx, boxy)

  # Draw the shapes.
  if shape == DONUT:
    pygame.draw.circle(screen, color, (left + half, top + half), half - 5)
    pygame.draw.circle(screen, BGCOLOR, (left + half, top + half), quarter - 5)
  elif shape == SQUARE:
    pygame.draw.rect(screen, color, (left + quarter, top + quarter, \
                                     BOXSIZE - half, BOXSIZE - half))
                     
  elif shape == DIAMOND:
    pygame.draw.polygon(screen, color, ((left + half, top), \
                                        (left + BOXSIZE - 1, top + half), \
                                        (left + half, top + BOXSIZE - 1), \
                                        (left, top + half)))
  elif shape == LINES:
    for i in xrange(0, BOXSIZE, 5):
      pygame.draw.aaline(screen, color, (left, top + i), (left + i, top))
      pygame.draw.aaline(screen, color, (left + i, top + BOXSIZE - 1), \
                                        (left + BOXSIZE - 1, top + i))
  elif shape == OVAL:
    pygame.draw.ellipse(screen, color, (left, top + quarter, BOXSIZE, half))

Nema ništa komplikovano, pomoću funkcije left_top_coords_of_box se nadju koordinate gde treba da se nacrta taj oblik i ona u zavisnosti od toga koji je crtaju se različite stvari na ekran, zadate boje naravno.


1
2
3
4
5
def get_shape_and_color(board, boxx, boxy):
  ''' 
    Return the (shape, color) tuple of the (boxx, boxy) spot on the board.
  '''
  return board[boxx][boxy][0], board[boxx][boxy][1]

Ova funkcija nam samo vraća (shape, color) odredjenog polja na tabli.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def draw_box_covers(board, boxes, coverage):
  ''' 
    Draws the shapes and the covers if needed.
  '''
  for box in boxes:
    left, top = left_top_coords_of_box(box[0], box[1])
    pygame.draw.rect(screen, BGCOLOR, (left, top, BOXSIZE, BOXSIZE))
    shape, color = get_shape_and_color(board, box[0], box[1])
    draw_icon(shape, color, box[0], box[1])
    
    if coverage > 0:
      pygame.draw.rect(screen, BOXCOLOR, (left, top + BOXSIZE - coverage, BOXSIZE, coverage))
      
  pygame.display.update()
  clock.tick(FPS)

Parametar boxes je lista tuplova sa koordinatama na tabli polja koje želimo da prekrijemo a coverage označava kolko da se prekriju (pošto kad se klinke na polje ne otkrije se odmah nego taj pokrivač ‘sklizne’ na dole, zato je i (left, top + BOXSIZE – coverage, BOXSIZE, coverage) Rect tako napravljen da nestaje od gore. Shvatićete šta tačno radi kad igra bude gotova ako već niste.



To bi bilo to za danas. Par funkcija da malo mozgate nad njima. Nastavljamo sledeći put.
Uživajte i nastavite da učite sa nama.

Nikola Lukić

Programiranjem sam počeo da se bavim u srednjoj školi. Uz pomoć tutorijala sa neta i raznih knjiga stekao sam znanja o pravljenju igara i programiranju. Od tada pišem tutorijale kojim želim da prenesem znanje onima koji žele da steknu programerske veštine.

memorije

Igra memorije 2. deo – Pygame

pre 1 godina

memorije

Igra memorije 4. deo – Pygame

pre 1 godina

Ostavite odgovor

Vaša adresa e-pošte neće biti objavljena. Neophodna polja su označena *

Možete koristiti ove HTML oznake i atribute: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>