2016-05-08 32 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

尽量想办法自己做,使用谷歌来回答任何一般问题。那么,如果遇到任何问题,您可以在这里问一个更具体的问题。 –

回答

0

我创建了一个卡片类,然后在创建时为每张卡片指定了一个矩形和颜色。然后我检查鼠标按钮按下,然后让鼠标POS和做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上绘制整个东西,然后在没有被单击元素的情况下在main_display上投影背景。 –