2016-05-08 2 views
0

Я изучаю pygame, создавая некоторые основные игры, в следующем, я пытаюсь сделать головоломку памяти, где есть 4 формы с 4 цветами, скрытыми за черными картами/обложками, пользователь должен щелкнуть по одной черной карте/чтобы выявить фигуру позади нее и должен соответствовать ей с другой формой с тем же цветом, гадая.Как удалить конкретный файл pygame.draw?

код я пришел с до сих пор для этих карт

import pygame as pg 
import sys 
import random 

window_wth = 720 
window_hgt = 360 
window_resolution = window_wth, window_hgt 

fps = 15 

card_wth = 72 
card_hgt = 92 
gap_x = 77 
gap_y = 97 

c1 = (random.randrange(255), random.randrange(255), random.randrange(255)) 
c2 = (random.randrange(255), random.randrange(255), random.randrange(255)) 
c3 = (random.randrange(255), random.randrange(255), random.randrange(255)) 
c4 = (random.randrange(255), random.randrange(255), random.randrange(255)) 

bkg_colour = (30, 30, 30) 
pg.display.set_caption("Game") 
main_display = pg.display.set_mode(window_resolution) 
pos_x = int((window_wth % gap_x)/2) 
pos_y = int((window_hgt % gap_y)/2) 


def list_draw_rct(tt_pos_x, tt_pos_y): 
    rect_areas1 = [] 
    for x in range(tt_pos_x, window_wth - gap_x, gap_x): 
     for y in range(tt_pos_y, window_hgt - gap_y, gap_y): 
      colour = (random.randrange(255), random.randrange(255), random.randrange(255)) 
      rect_area1 = pg.Rect(x, y, card_wth, card_hgt) 
      rect_areas1.append(rect_area1) 
    # print(rect_areas1) 
    return rect_areas1 


def main(): 
    global fps_clock, main_display 
    fps_clock = pg.time.Clock() 

    while True: 
     for event in pg.event.get(): 

      if event.type == pg.KEYDOWN and event.key == pg.K_s: 
       for i in range(len(list_draw_rct(pos_x, pos_y))): 
        colour = (random.randrange(255), random.randrange(255), random.randrange(255)) 
        pg.draw.rect(main_display, colour, list_draw_rct(pos_x, pos_y)[i], 5) 
        pg.display.update(list_draw_rct(pos_x, pos_y)[:5] + list_draw_rct(pos_x,pos_y)[(6):]) 
        fps_clock.tick(fps) 


      if event.type == pg.QUIT: 
       sys.exit() 


if __name__ == '__main__': 
    main() 

Здесь я жёстко удаление 5-й элемент

if event.type == pg.KEYDOWN and event.key == pg.K_s: 
       for i in range(len(list_draw_rct(pos_x, pos_y))): 
        colour = (random.randrange(255), random.randrange(255), random.randrange(255)) 
        pg.draw.rect(main_display, colour, list_draw_rct(pos_x, pos_y)[i], 5) 
        pg.display.update(list_draw_rct(pos_x, pos_y)[:5] + list_draw_rct(pos_x,pos_y)[(6):]) 
        fps_clock.tick(fps) 

Но я не знаю, как сделать это с пользовательский ввод.

+0

Попробуйте придумать способ сделать это самостоятельно, используя Google, чтобы ответить любые общие вопросы. Затем, если у вас возникнут какие-либо проблемы, вы можете задать здесь более конкретный вопрос. –

ответ

0

Я создал класс карты, а затем дал каждой карте прямоугольник и цвет при создании. Затем я проверяю на кнопку мыши нажать и затем получить поз мыши и сделать rect.collidepoint (Pos) проверить и удалить карту:

import pygame as pg 
import sys 
import random 

window_wth = 720 
window_hgt = 360 
window_resolution = window_wth, window_hgt 

fps = 15 

card_wth = 72 
card_hgt = 92 
gap_x = 77 
gap_y = 97 

c1 = (random.randrange(255), random.randrange(255), random.randrange(255)) 
c2 = (random.randrange(255), random.randrange(255), random.randrange(255)) 
c3 = (random.randrange(255), random.randrange(255), random.randrange(255)) 
c4 = (random.randrange(255), random.randrange(255), random.randrange(255)) 

bkg_colour = (30, 30, 30) 
pg.display.set_caption("Game") 
main_display = pg.display.set_mode(window_resolution) 
background = pg.Surface(window_resolution) 

pos_x = int((window_wth % gap_x)/2) 
pos_y = int((window_hgt % gap_y)/2) 

global cards 

class Card(object): 
    def __init__(self, xpos, ypos, colour): 
     super(Card, self).__init__() 

     self.colour = colour 
     self.xpos = xpos 
     self.ypos = ypos 
     self.width = 72 
     self.height = 92 
     self.rect = pg.Rect((xpos, ypos, self.width, self.height)) 

def make_cards(tt_pos_x, tt_pos_y): 
    global cards 
    cards = [] 
    for x in range(tt_pos_x, window_wth - gap_x, gap_x): 
     for y in range(tt_pos_y, window_hgt - gap_y, gap_y): 
      colour = (random.randrange(255), random.randrange(255), random.randrange(255)) 
      card = Card(x, y, colour) 
      cards.append(card) 
    return cards 

def main(): 
    global fps_clock, main_display, cards 
    fps_clock = pg.time.Clock() 

    while True: 


     if pg.mouse.get_pressed()[0]: 
      print "mouse button pressed" 
      pos = pg.mouse.get_pos() 
      for card in cards: 
       if card.rect.collidepoint(pos): 
        cards.remove(card) 

     for event in pg.event.get(): 
      if event.type == pg.QUIT: 
       sys.exit() 

     fps_clock.tick(fps) 
     update() 

def update(): 
    global cards 
    background.fill((0,0,0)) 
    for card in cards: 
     pg.draw.rect(background, card.colour, card.rect, 5) 

    main_display.blit(background, (0,0)) 
    pg.display.update() 

if __name__ == '__main__': 
    global cards 
    cards = make_cards(pos_x, pos_y) 
    pg.display.update() 
    main() 
+0

Спасибо, что работает безупречно! Похоже, я слишком много думал в коробке, никогда не думал о том, чтобы рисовать всю вещь на pg.Surface и blit ~ ing на main_display без этого щелкнутого элемента. –

Смежные вопросы