import pygame, sys,os, random
from pygame.locals import *
from random import *

pygame.init()
#if not pygame.font: 	print 'Warning, fonts disabled'
#if not pygame.mixer: 	print 'Warning, sound disabled'

width = 400
height = 400

white = (255,255,255)
black = (0,0,0)
red = (255,0,0)
color_key = (255,51,102)
bg = (153,153,255)

screen = pygame.display.set_mode((width, height))
clock = pygame.time.Clock()
pygame.display.set_caption('square')
pygame.mouse.set_visible(1)

#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

def build(fraction,color):
	w,h = width*fraction,height*fraction
	image = pygame.Surface([int(w), int(h)])
	image.fill(color_key)
	image.set_colorkey(color_key)
	pygame.draw.rect(image, black, pygame.Rect(int(width*0.01),int(height*0.01),int(w*0.9), int(h*0.9)))
	pygame.draw.rect(image, color, pygame.Rect(0,0,int(w-width*0.01), int(h-height*0.01)))
	return image

#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

class square(pygame.sprite.Sprite):
	def __init__(self, xpos, ypos, color, fraction):
		pygame.sprite.Sprite.__init__(self)
		self.image = build(fraction,color)
		self.rect = self.image.get_rect().move(xpos,ypos)
		self.color = color
		self.chosen = None
		self.vector = None

	def update(self):
		if self.chosen == True:
			self.tmp = self.image.copy()
			tmp_x, tmp_y = int(self.rect.w * 0.4), int(self.rect.h * 0.4)
			tmp_w ,tmp_h = int(self.rect.w * 0.2), int(self.rect.h * 0.2)
			tmp_rect = pygame.Rect(tmp_x, tmp_y,tmp_w ,tmp_h)
			pygame.draw.rect(self.image,black,tmp_rect)
			self.chosen = None
		elif self.chosen == False:
			self.chosen = None
			self.image = self.tmp
			
		#move to a relative position
		if self.vector != None:
			destx,desty = self.vector
			if (destx,desty) == (self.rect.x,self.rect.y):
				self.vector = None
			else:
				if destx < self.rect.x:
					self.rect.x -= 1
				elif destx > self.rect.x:
					self.rect.x += 1
				if desty < self.rect.y:
					self.rect.y -= 1
				elif desty > self.rect.y:
					self.rect.y += 1

	def draw(self):
		pass
		
class mouse(pygame.sprite.Sprite):
	def __init__(self,color):
		pygame.sprite.Sprite.__init__(self)
		self.rect = pygame.Rect((0,0), (2, 2))
		self.image = pygame.Surface([1, 1])
		self.button = pygame.mouse.get_pressed()
		self.color = color
	
	def update(self,(w,h)):
		#grouping selection
		if self.button == True:
			x,y = self.pos
			if x < w:	self.rect.x, self.rect.w = x, w-x
			else:		self.rect.x, self.rect.w = w, x-w
			if y < h:	self.rect.y, self.rect.h = y, h-y
			else:		self.rect.y, self.rect.h = h, y-h
			self.image = pygame.Surface([self.rect.w, self.rect.h])
			self.image.set_colorkey((0,0,0))
			pygame.draw.rect(self.image, (102,51,153), self.image.get_rect(), 3)
		
	def down(self,pos):
		self.button = True
		self.pos = pos
	
	def up(self,pos):
		self.button = False
		self.pos = self.rect.center
		self.rect.x, self.rect.y, self.rect.w, self.rect.h = 0,0,1,1
		self.image = pygame.Surface([0, 0])


#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
mice = mouse(white)
grp = pygame.sprite.RenderUpdates()
for rien in range(30):
	fraction = randint(4,10)* 0.01
	grp.add(square(randint(0,int(width-(width*fraction))),randint(0,int(height-(height*fraction))),choice((white,red)),fraction))

selection = []

while True :
	clock.tick(60)

	for event in pygame.event.get():
    		if event.type == QUIT:
        		sys.exit(0)
        	elif event.type == ACTIVEEVENT : 
        		pass
    		elif event.type == MOUSEBUTTONDOWN:
    			if len(selection) > 0:
    				#(xa,ya),(xb,yb) = mice.pos, event.pos
    				#xc,yc = xb-xa,yb-ya
    				xc,yc = event.pos[0] - mice.pos[0],event.pos[1] - mice.pos[1]
    				for one in selection:
    					one.chosen = False
    					one.vector = (one.rect.x + xc, one.rect.y + yc)
    				selection = []
    			else:
    				mice.down(event.pos)
		elif event.type == MOUSEBUTTONUP:
			for one in pygame.sprite.spritecollide(mice, grp, False):
				if one.color == mice.color:
    					one.chosen = True
    					selection.append(one)
			mice.up(event.pos)
		elif event.type == MOUSEMOTION: 
			mice.update(event.pos)

 	screen.fill(bg)

	grp.update()
	grp.draw(screen)
	
	screen.blit(mice.image,mice.rect)

	pygame.display.flip()



