2011-09-14 19 views
4

:) これは私の最初の質問です。私の英語はそれほど良くないので、私と一緒に裸にしてください。Pygameでrectグリッドを作成する

私は、pygameでクリック可能な8x8グリッドを作成する必要があります。さて、私の元のコードでは、私ははるかに多くの長方形をしていると私はこのような何かをする方法が必要

#!/usr/bin/python2 
#------------------------------------------------------------------------------- 
# Imports & Inits 
import pygame, sys 
from pygame.locals import * 
pygame.init() 
#------------------------------------------------------------------------------- 
# Settings 
WIDTH = 105 
HEIGHT = 105 
FPS = 60 
#------------------------------------------------------------------------------- 
# Screen Setup 
WINDOW = pygame.display.set_mode([WIDTH,HEIGHT]) 
CAPTION = pygame.display.set_caption('Test') 
SCREEN = pygame.display.get_surface() 
TRANSPARENT = pygame.Surface([WIDTH,HEIGHT]) 
TRANSPARENT.set_alpha(255) 
TRANSPARENT.fill((255,255,255)) 
#------------------------------------------------------------------------------- 
# Misc stuff 
rect1 = pygame.draw.rect(SCREEN, (255, 255, 255), (0,0, 50, 50)) 
rect2 = pygame.draw.rect(SCREEN, (255, 255, 255), (0,55, 50, 50)) 
rect3 = pygame.draw.rect(SCREEN, (255, 255, 255), (55,0, 50, 50)) 
rect4 = pygame.draw.rect(SCREEN, (255, 255, 255), (55,55, 50, 50)) 

... 

#------------------------------------------------------------------------------- 
# Refresh Display 
pygame.display.flip() 
#------------------------------------------------------------------------------- 
# Main Loop 
while True: 
    pos = pygame.mouse.get_pos() 
    mouse = pygame.draw.circle(TRANSPARENT, (0, 0, 0), pos , 0) 
    # Event Detection--------------- 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      sys.exit() 
     elif event.type == MOUSEBUTTONDOWN: 
      if rect1.contains(mouse): 
       rect1 = pygame.draw.rect(SCREEN, (155, 155, 155), (0,0, 50, 50)) 
       pygame.display.flip() 

明らか
for i in rectangles: 
    if i hasbeenclickedon: 
      change color 

、私の解決策を は、今私はこのような何かを持っていますはるかに静的です。 これはどうすれば実現できますか?

答えて

4

あなたのソリューションは確かに少し面倒ですが、私が最初に意図したとおりに、あなたがそれらを反復処理することができます

rectangles = (rect1, rect2, ...) 

を言うと思います。

pos = pygame.mouse.get_pos() 
for rect in rectangles: 
    if rect.collidepoint(pos): 
     changecolor(rect) 

よう

するTry STHはもちろん、changecolorメソッドを実装する必要があると思います。

一般的には、changecolorというメソッドを定義するクリック可能なフィールドのクラスを作成することをおすすめします。

+0

母は、今あなたがそれを指摘していること、それはとても明らかです。 ありがとうございます。 :) –

+0

ようこそ。 Btw。実際には64個の四角形を描画していることがわかりましたので、それらをループで描画し、それらを同時に「四角形」リストに追加することを強くお勧めします。 –

+0

あなたが助けてくれるとあなたはもっと役に立った答えを期待していない場合、答えを受け入れることができます。 ;) –

0

シンプルな「人間の色:

Color("red") 
Color(255,255,255) 
Color("#fefefe") 

用途:

import pygame 
# This makes event handling, rect, and colors simpler. 
# Now you can refer to `Sprite` or `Rect()` vs `pygame.sprite.Sprite` or `pygame.Rect()` 
from pygame.locals import * 
from pygame import Color, Rect, Surface 

pygame.draw.rect(screen, Color("blue"), Rect(10,10,200,200), width=0) 
pygame.draw.rect(screen, Color("darkred"), Rect(210,210,400,400), width=0) 
関連する問題