2016-05-08 2 views
0

Ich lerne pygame, indem ich ein paar grundlegende Spiele mache, im folgenden versuche ich ein Gedächtnispuzzle zu machen, wo es 4 Formen mit 4 Farben hinter schwarzen Karten/Abdeckungen gibt, der Benutzer muss auf eine schwarze Karte klicken/Abdeckungen, um die Form dahinter zu offenbaren und muss mit anderen Formen mit der gleichen Farbe durch Raten übereinstimmen.Wie entferne ich eine bestimmte pygame.draw bei Klick?

Der Code, den ich mit bisher für diese Karten kam habe

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() 

Hier habe ich hart codiert 5. Element entfernen

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) 

Aber ich weiß nicht, wie das zu tun mit Benutzereingabe.

+0

Versuch einer Art und Weise zu denken, es selbst zu tun, Google mit beantworten irgendwelche allgemeinen Fragen. Wenn Sie auf Probleme stoßen, können Sie hier eine spezifischere Frage stellen. –

Antwort

0

Ich habe eine Kartenklasse erstellt und dann jeder Karte ein Rechteck und Farbe bei der Erstellung gegeben. Dann prüfe ich für Maustaste drücken und dann die Maus pos bekommen und machen einen rect.collidepoint (pos) prüfen und löschen Sie die Karte:

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

Danke, das funktioniert einwandfrei! Scheint so, als ob ich viel zu viel in die Box hineingedacht hätte, nie daran gedacht hätte, das ganze Ding auf die Seite zu malen und den Hintergrund auf main_display ohne dieses angeklickte Element zu blitzen. –