gyorgyf@5: #!/usr/bin/env python gyorgyf@5: # encoding: utf-8 gyorgyf@5: """ gyorgyf@5: visclient.py gyorgyf@5: gyorgyf@5: Created by George Fazekas on 2012-06-17. gyorgyf@5: Copyright (c) 2012 . All rights reserved. gyorgyf@5: """ gyorgyf@5: gyorgyf@12: import sys,os,math,time,copy gyorgyf@5: import pygame as pg gyorgyf@5: from pygame.locals import * gyorgyf@5: import httplib as ht gyorgyf@5: gyorgyf@5: import gradients gyorgyf@5: from gradients import genericFxyGradient gyorgyf@5: gyorgyf@27: from threading import Thread gyorgyf@27: from random import random gyorgyf@27: gyorgyf@5: # from pytagcloud import create_tag_image, make_tags gyorgyf@5: # from pytagcloud.lang.counter import get_tag_counts gyorgyf@5: gyorgyf@5: # YOUR_TEXT = "A tag cloud is a visual representation for text data, typically\ gyorgyf@5: # used to depict keyword metadata on websites, or to visualize free form text." gyorgyf@5: # gyorgyf@5: # tags = make_tags(get_tag_counts(YOUR_TEXT), maxsize=120) gyorgyf@5: # gyorgyf@5: # create_tag_image(tags, 'cloud_large.png', size=(900, 600), fontname='Lobster') gyorgyf@5: gyorgyf@12: scol = (0,255,0,255) gyorgyf@12: ecol = (0,0,0,255) gyorgyf@12: gyorgyf@12: # X,Y=1140,900 gyorgyf@27: # X,Y = 600,400 gyorgyf@27: X,Y = 800,600 gyorgyf@27: gyorgyf@27: NBLOBS = 18 gyorgyf@22: BLOBSIZE = 25 gyorgyf@14: G=110 gyorgyf@22: FADE = 15 gyorgyf@27: DIST = 0.1 # blob equivalence tolerance gyorgyf@27: FRAMERATE = 60 gyorgyf@27: gyorgyf@27: # Connection: gyorgyf@27: # IP = "192.168.2.184:8030" gyorgyf@27: IP = "138.37.95.215" gyorgyf@27: HTTP_TIMEOUT = 3 gyorgyf@27: SERVER_UPDATE_INTERVAL = 0.8 gyorgyf@27: gyorgyf@27: class Indicator(object): gyorgyf@27: gyorgyf@27: off_color = pg.Color(110,0,0) gyorgyf@27: on_color = pg.Color(0,120,0) gyorgyf@27: gyorgyf@27: def __init__(self,bg,pos): gyorgyf@27: self.visible = True gyorgyf@27: self.ison = True gyorgyf@27: self.x,self.y = pos gyorgyf@27: self.xs = int(self.x * X) gyorgyf@27: self.ys = int(Y - (self.y * Y)) gyorgyf@27: self.c = self.off_color gyorgyf@27: self.size = 6 gyorgyf@27: self.bg = bg gyorgyf@27: gyorgyf@27: def reinit(self,bg): gyorgyf@27: self.bg = bg gyorgyf@27: self.xs = int(self.x * X) gyorgyf@27: self.ys = int(Y - (self.y * Y)) gyorgyf@27: gyorgyf@27: def draw(self): gyorgyf@27: if self.visible : gyorgyf@27: pg.draw.circle(self.bg, self.c, (self.xs,self.ys),self.size,0) gyorgyf@27: gyorgyf@27: def toggle(self): gyorgyf@27: if self.ison == True : gyorgyf@27: self.off() gyorgyf@27: else : gyorgyf@27: self.on() gyorgyf@27: return self gyorgyf@27: gyorgyf@27: def on(self): gyorgyf@27: self.c = self.on_color gyorgyf@27: self.ison = True gyorgyf@27: return self gyorgyf@27: gyorgyf@27: def off(self): gyorgyf@27: self.c = self.off_color gyorgyf@27: self.ison = False gyorgyf@27: return self gyorgyf@27: gyorgyf@12: gyorgyf@12: class Blob(object): gyorgyf@12: gyorgyf@22: def __init__(self,bg,x,y,color=(255,255,255),mood=None,fade=FADE): gyorgyf@12: self.x = x gyorgyf@12: self.y = y gyorgyf@12: self.xs = x * X gyorgyf@12: self.ys = Y - (y * Y) gyorgyf@12: self.bg = bg gyorgyf@14: self.size = BLOBSIZE gyorgyf@12: self.time = time.time() gyorgyf@12: self.alpha = 255 gyorgyf@12: self.c = color gyorgyf@14: self.count = 1 gyorgyf@12: self.visible = True gyorgyf@22: self.FADE = fade gyorgyf@12: if mood and mood.color : gyorgyf@12: self.c = mood.color gyorgyf@12: gyorgyf@12: def __cmp__(self,other): gyorgyf@12: d = math.sqrt( math.pow((self.x-other.x),2) + math.pow((self.y-other.y),2) ) gyorgyf@27: if d < DIST : gyorgyf@12: return 0 gyorgyf@12: else : gyorgyf@12: return -1 gyorgyf@12: gyorgyf@12: def draw(self): gyorgyf@27: if not self.visible : return gyorgyf@14: d=int(self.size) gyorgyf@14: self.bg.blit(gradients.radial(self.size, (self.c[0],self.c[1],self.c[2],self.alpha), (0,0,0,self.alpha)), (self.xs-d,self.ys-d)) gyorgyf@22: self.alpha = 255 - int(self.age()*self.FADE) gyorgyf@12: if self.alpha < 5 : gyorgyf@12: self.alpha = 1 gyorgyf@12: self.visible = False gyorgyf@12: gyorgyf@12: def age(self): gyorgyf@12: return time.time() - self.time gyorgyf@12: gyorgyf@12: def increment(self,count): gyorgyf@21: self.time = time.time() gyorgyf@14: self.count = count gyorgyf@14: self.size = int(BLOBSIZE * int(self.count/1.5)) gyorgyf@12: gyorgyf@12: def get_distance(self,x,y): gyorgyf@12: return math.sqrt( math.pow((self.x-x),2) + math.pow((self.y-y),2) ) gyorgyf@22: gyorgyf@22: def fade(self,fade): gyorgyf@22: if not fade : self.alpha = 255 gyorgyf@22: self.FADE = fade gyorgyf@22: gyorgyf@22: def reset_time(self): gyorgyf@22: self.time = time.time() gyorgyf@12: gyorgyf@12: gyorgyf@12: gyorgyf@12: gyorgyf@12: class Mood(): gyorgyf@12: def __init__(self,word,x,y): gyorgyf@12: self.word = word gyorgyf@12: self.x = float(x) gyorgyf@12: self.y = float(y) gyorgyf@12: self.color = [] gyorgyf@12: gyorgyf@12: def get_distance(self,x,y): gyorgyf@12: return math.sqrt( math.pow((self.x-x),2) + math.pow((self.y-y),2) ) gyorgyf@12: gyorgyf@12: gyorgyf@12: gyorgyf@12: class VisualClient(object): gyorgyf@27: '''Main visualisation client.''' gyorgyf@12: gyorgyf@12: def __init__(self): gyorgyf@12: # self.conn = ht.HTTPConnection("192.168.2.184:8030") gyorgyf@27: # self.conn = ht.HTTPConnection("138.37.95.215") gyorgyf@12: gyorgyf@12: pg.init() gyorgyf@12: gyorgyf@12: # fontObj = pg.font.Font("freesansbold.ttf",18) gyorgyf@12: white = ( 255, 255, 255) gyorgyf@12: black = ( 0,0,0) gyorgyf@12: gyorgyf@12: self.fpsClock = pg.time.Clock() gyorgyf@12: self.screen = pg.display.set_mode((X, Y)) gyorgyf@12: pg.display.set_caption('Mood Conductor') gyorgyf@12: self.bg = pg.Surface(self.screen.get_size()) gyorgyf@12: self.bg = self.bg.convert() gyorgyf@12: self.bg.fill((0,0,0)) gyorgyf@27: pg.display.set_gamma(100.0) gyorgyf@12: gyorgyf@12: gyorgyf@12: self.scol = (0,255,0,255) gyorgyf@12: self.ecol = (0,0,0,255) gyorgyf@12: coordstxt = "test" gyorgyf@12: gyorgyf@12: self.blobs = [] gyorgyf@12: self.moods = [] gyorgyf@12: self.read_mood_data() gyorgyf@12: gyorgyf@22: self.FADE = FADE gyorgyf@22: gyorgyf@27: self.indicators = { gyorgyf@27: "conn":Indicator(self.bg,(0.98,0.02)), gyorgyf@27: "update":Indicator(self.bg,(0.96,0.02)), gyorgyf@27: "data":Indicator(self.bg,(0.94,0.02)), gyorgyf@27: "receive":Indicator(self.bg,(0.92,0.02))} gyorgyf@27: gyorgyf@27: self.thread = None gyorgyf@27: self.running = False gyorgyf@27: self.fullscreen = False gyorgyf@27: self.init_reconnect = False gyorgyf@12: pass gyorgyf@12: gyorgyf@27: gyorgyf@12: def read_mood_data(self): gyorgyf@27: '''Read the mood position and color information form csv file.''' gyorgyf@12: with open('moods.csv') as mf: gyorgyf@12: data = mf.readlines()[1:] gyorgyf@12: for line in data : gyorgyf@12: l = line.split(',') gyorgyf@14: mood = Mood(l[0],l[1],l[2]) gyorgyf@12: self.moods.append(mood) gyorgyf@22: with open('colors.txt') as ff: gyorgyf@22: data = ff.readlines()[1:] gyorgyf@22: data = map(lambda x: x.split(','),data) gyorgyf@12: for mood in self.moods : gyorgyf@22: d = cd = sys.float_info.max gyorgyf@12: for colors in data : gyorgyf@22: d = mood.get_distance(float(colors[0]),float(colors[1])) gyorgyf@22: if d < cd : gyorgyf@22: cd = d gyorgyf@22: mood.color = tuple(map(lambda x: int(pow(math.atan((float(x)/7.0)),12.5)),(colors[2],colors[3],colors[4]))) gyorgyf@27: # mood.color = tuple(map(lambda x: int(x),(colors[2],colors[3],colors[4]))) gyorgyf@27: return True gyorgyf@27: gyorgyf@22: gyorgyf@27: def start_update_thread(self): gyorgyf@27: '''Start the thread that reads data from the server.''' gyorgyf@27: self.running = True gyorgyf@27: self.thread = Thread(target = self.update_thread) gyorgyf@27: self.thread.daemon = True gyorgyf@27: self.thread.start() gyorgyf@12: gyorgyf@27: def stop_update_thread(self): gyorgyf@27: '''Stop the thread and allow some time fot the connections to close.''' gyorgyf@27: self.running = False gyorgyf@27: try : gyorgyf@27: self.thread.join(2) gyorgyf@27: except : gyorgyf@27: print "No update thread to join." gyorgyf@27: gyorgyf@27: def update_thread(self): gyorgyf@27: '''The server update thread''' gyorgyf@27: while self.running : gyorgyf@27: try : gyorgyf@27: self.update() gyorgyf@27: # self.indicators["update"].visible = True gyorgyf@27: except Exception, e: gyorgyf@27: if str(e).strip() : print "Exception: ", str(e), type(e), len(str(e).strip()) gyorgyf@27: self.indicators["conn"].off() gyorgyf@27: # self.indicators["update"].visible = False gyorgyf@27: time.sleep(SERVER_UPDATE_INTERVAL) gyorgyf@27: gyorgyf@12: gyorgyf@12: def update(self): gyorgyf@27: '''Update the blob list from the server. This should be in a thread.''' gyorgyf@27: gyorgyf@27: # indicate connection health by toggling an indictor gyorgyf@27: self.indicators["update"].toggle() gyorgyf@12: gyorgyf@12: # delete invisibles gyorgyf@12: for blob in self.blobs : gyorgyf@12: if not blob.visible : gyorgyf@12: self.blobs.remove(blob) gyorgyf@12: gyorgyf@12: # get new coordinates from the server gyorgyf@12: self.conn.putrequest("GET","/moodconductor/result", skip_host=True) gyorgyf@12: self.conn.putheader("Host", "www.isophonics.net") gyorgyf@12: self.conn.endheaders() gyorgyf@12: res = self.conn.getresponse() gyorgyf@12: data = res.read() gyorgyf@27: data = eval(data) gyorgyf@12: if not data : gyorgyf@12: self.conn.close() gyorgyf@27: self.indicators["data"].toggle() gyorgyf@12: return False gyorgyf@12: for d in data : gyorgyf@14: # coordstxt = "x:%s y:%s c:%s" %d gyorgyf@27: x,y,count = d gyorgyf@27: self.add_blob(x,y,count) gyorgyf@27: self.indicators["receive"].toggle() gyorgyf@12: self.conn.close() gyorgyf@21: self.blobs = self.blobs[:NBLOBS] gyorgyf@12: return True gyorgyf@27: gyorgyf@27: gyorgyf@27: def add_blob(self,x,y,count=1): gyorgyf@27: '''Insert a blob to the list of blobs''' gyorgyf@27: # find mood correxponding to x,y gyorgyf@27: cmood = None gyorgyf@27: d = cd = sys.float_info.max gyorgyf@27: for mood in self.moods : gyorgyf@27: d = mood.get_distance(x,y) gyorgyf@27: if d < cd : gyorgyf@27: cd = d gyorgyf@27: cmood = mood gyorgyf@27: # create new blob or increase click count on existing one gyorgyf@27: new = Blob(self.bg,x,y,mood=cmood,fade=self.FADE) gyorgyf@27: if not new in self.blobs : gyorgyf@27: self.blobs.insert(0,new) gyorgyf@27: elif count > self.blobs[self.blobs.index(new)].count: gyorgyf@27: self.blobs[self.blobs.index(new)].increment(count) gyorgyf@27: pass gyorgyf@12: gyorgyf@12: gyorgyf@12: def draw(self): gyorgyf@27: self.bg.fill((0,0,0)) gyorgyf@12: # self.bg.blit(gradients.radial(19, self.scol, self.ecol), (rect_x,rect_y)) gyorgyf@12: l = copy.copy(self.blobs) gyorgyf@12: l.reverse() gyorgyf@12: for blob in l : gyorgyf@12: blob.draw() gyorgyf@12: gyorgyf@14: # axis gyorgyf@14: pg.draw.line(self.bg, (G,G,G), (int(X/2.0),0),(int(X/2.0),Y), 1) gyorgyf@14: pg.draw.line(self.bg, (G,G,G), (0,int(Y/2.0)),(X,int(Y/2.0)), 1) gyorgyf@14: gyorgyf@27: # indicators gyorgyf@27: for i in self.indicators.itervalues() : gyorgyf@27: i.draw() gyorgyf@27: gyorgyf@27: def read_keys(self): gyorgyf@27: '''Read keys''' gyorgyf@27: for event in pg.event.get() : gyorgyf@27: # Quit (event) gyorgyf@27: if event.type == QUIT: gyorgyf@27: self.quit() gyorgyf@27: elif event.type == KEYDOWN : gyorgyf@27: # Post Quit: Esc, q gyorgyf@27: if event.key == K_ESCAPE or event.key == K_q : gyorgyf@27: pg.event.post(pg.event.Event(QUIT)) gyorgyf@27: # Reset: Space gyorgyf@27: elif event.key == K_SPACE : gyorgyf@27: self.blobs = [] gyorgyf@27: # Random : r gyorgyf@27: elif event.key == K_r : gyorgyf@27: self.add_blob(random(),random(),count=5) gyorgyf@27: # Connection : c gyorgyf@27: elif event.key == K_c : gyorgyf@27: self.init_reconnect = True gyorgyf@27: self.indicators["conn"].off() gyorgyf@27: # Fullscreen: f gyorgyf@27: elif event.key == K_f : gyorgyf@27: # pg.display.toggle_fullscreen() gyorgyf@27: self.toggle_screen_mode() gyorgyf@27: # Toggle fade: s gyorgyf@27: elif event.key == K_s : gyorgyf@27: if self.FADE : gyorgyf@27: print "fade off" gyorgyf@27: self.indicators["conn"].off() gyorgyf@27: self.FADE = 0 gyorgyf@27: for blob in self.blobs : gyorgyf@27: blob.fade(0) gyorgyf@27: else: gyorgyf@27: print "fade on" gyorgyf@27: self.indicators["conn"].on() gyorgyf@27: self.FADE = 15 gyorgyf@27: for blob in self.blobs : gyorgyf@27: blob.fade(15) gyorgyf@27: blob.reset_time() gyorgyf@27: pass gyorgyf@27: gyorgyf@27: def toggle_screen_mode(self): gyorgyf@27: '''Go back and forth between full screen mode.''' gyorgyf@27: if self.fullscreen == False: gyorgyf@27: globals()['_X'] = globals()['X'] gyorgyf@27: globals()['_Y'] = globals()['Y'] gyorgyf@27: globals()['X'] = 1440 gyorgyf@27: globals()['Y'] = 900 gyorgyf@27: self.screen = pg.display.set_mode((X, Y)) gyorgyf@27: self.fullscreen = True gyorgyf@27: self.bg = pg.Surface(self.screen.get_size()) gyorgyf@27: self.bg = self.bg.convert() gyorgyf@27: self.bg.fill((0,0,0)) gyorgyf@27: for i in self.indicators.itervalues() : gyorgyf@27: i.reinit(self.bg) gyorgyf@27: i.draw() gyorgyf@27: else : gyorgyf@27: globals()['X'] = globals()['_X'] gyorgyf@27: globals()['Y'] = globals()['_Y'] gyorgyf@27: self.screen = pg.display.set_mode((X, Y)) gyorgyf@27: self.fullscreen = False gyorgyf@27: self.bg = pg.Surface(self.screen.get_size()) gyorgyf@27: self.bg = self.bg.convert() gyorgyf@27: self.bg.fill((0,0,0)) gyorgyf@27: for i in self.indicators.itervalues() : gyorgyf@27: i.reinit(self.bg) gyorgyf@27: i.draw() gyorgyf@27: pg.display.toggle_fullscreen() gyorgyf@27: gyorgyf@14: gyorgyf@12: gyorgyf@12: def run(self): gyorgyf@12: gyorgyf@27: # setup connection gyorgyf@27: self.connect() gyorgyf@27: gyorgyf@12: # main loop gyorgyf@12: while True : gyorgyf@12: # pg.draw.circle(screen, pg.Color(255,0,0), (300,50),20,0) gyorgyf@12: # screen.blit(gradients.radial(99, scol, ecol), (401, 1)) gyorgyf@12: gyorgyf@27: self.read_keys() gyorgyf@12: gyorgyf@12: # Draw gyorgyf@12: self.draw() gyorgyf@12: gyorgyf@12: # update display gyorgyf@12: self.screen.blit(self.bg, (0, 0)) gyorgyf@12: pg.display.flip() gyorgyf@27: self.fpsClock.tick(FRAMERATE) gyorgyf@27: gyorgyf@27: if self.init_reconnect: gyorgyf@27: self.reconnect() gyorgyf@27: gyorgyf@27: return True gyorgyf@27: gyorgyf@27: gyorgyf@27: def connect(self,retry = 5): gyorgyf@27: '''Connect to the server and test connection.''' gyorgyf@27: if not retry : gyorgyf@27: print "Server unreachable" gyorgyf@27: pg.quit() gyorgyf@27: raise SystemExit gyorgyf@27: if retry < 5 : gyorgyf@27: time.sleep(3) gyorgyf@27: try : gyorgyf@27: self.conn = ht.HTTPConnection(IP,timeout=HTTP_TIMEOUT) gyorgyf@27: # self.start_update_thread() gyorgyf@27: self.indicators["conn"].on() gyorgyf@27: except : gyorgyf@27: self.indicators["conn"].off() gyorgyf@27: self.connect(retry = retry-1) gyorgyf@27: gyorgyf@27: try: gyorgyf@27: self.conn.putrequest("GET","/moodconductor/index.html", skip_host=True) gyorgyf@27: self.conn.putheader("Host", "www.isophonics.net") gyorgyf@27: self.conn.endheaders() gyorgyf@27: res = self.conn.getresponse() gyorgyf@27: if res.status == 200 : gyorgyf@27: self.indicators["conn"].on() gyorgyf@27: else : gyorgyf@27: print "Server response:", res.status, res.reason gyorgyf@27: self.indicators["conn"].off() gyorgyf@27: if not hasattr(self,"noretry") and raw_input("Go offline? ") in ['y',''] : gyorgyf@27: return False gyorgyf@27: else : gyorgyf@27: self.noretry = None gyorgyf@27: self.connect(retry = retry-1) gyorgyf@27: except : gyorgyf@27: print "Exception while testing connection." gyorgyf@27: self.indicators["conn"].off() gyorgyf@27: # comment out in offline mode gyorgyf@27: if not hasattr(self,"noretry") and raw_input("Go offline? ") in ['y',''] : gyorgyf@27: return False gyorgyf@27: else : gyorgyf@27: self.noretry = None gyorgyf@27: self.connect(retry = retry-1) gyorgyf@27: self.start_update_thread() gyorgyf@27: return True gyorgyf@27: gyorgyf@27: gyorgyf@27: gyorgyf@27: def reconnect(self): gyorgyf@27: '''Called when c is pressed.''' gyorgyf@27: self.init_reconnect = False gyorgyf@27: # self.indicators["conn"].off().draw() gyorgyf@27: # self.screen.blit(self.bg, (0, 0)) gyorgyf@27: # pg.display.flip() gyorgyf@27: gyorgyf@27: self.stop_update_thread() gyorgyf@27: time.sleep(1) gyorgyf@27: try : gyorgyf@27: self.conn.close() gyorgyf@27: except : gyorgyf@27: self.indicators["conn"].off() gyorgyf@27: try : gyorgyf@27: self.conn = ht.HTTPConnection(IP,timeout=HTTP_TIMEOUT) gyorgyf@27: self.conn.connect() gyorgyf@27: self.indicators["conn"].on() gyorgyf@27: print "Reconnected." gyorgyf@27: except : gyorgyf@27: self.indicators["conn"].off() gyorgyf@27: print "Error while reconnecting." gyorgyf@27: self.start_update_thread() gyorgyf@27: gyorgyf@27: gyorgyf@27: def quit(self): gyorgyf@27: print "Quitting.." gyorgyf@27: self.indicators["conn"].off() gyorgyf@27: self.stop_update_thread() gyorgyf@27: self.conn.close() gyorgyf@27: pg.quit() gyorgyf@27: sys.exit() gyorgyf@27: gyorgyf@27: gyorgyf@27: gyorgyf@5: gyorgyf@5: gyorgyf@5: def main(): gyorgyf@5: gyorgyf@12: v = VisualClient() gyorgyf@12: v.run() gyorgyf@5: gyorgyf@12: # conn = ht.HTTPConnection("192.168.2.184:8030") gyorgyf@12: # gyorgyf@12: # pg.init() gyorgyf@12: # fontObj = pg.font.Font("freesansbold.ttf",18) gyorgyf@12: # gyorgyf@12: # white = ( 255, 255, 255) gyorgyf@12: # black = ( 0,0,0) gyorgyf@12: # fpsClock = pg.time.Clock() gyorgyf@12: # screen = pg.display.set_mode((1024, 768)) gyorgyf@12: # rect_x,rect_y=50,50 gyorgyf@12: # rect_xp,rect_yp=50,50 gyorgyf@12: # rect_change_x,rect_change_y=5,5 gyorgyf@12: # counter = 0 gyorgyf@12: # scol = (0,255,0,255) gyorgyf@12: # # ecol = (100,0,50,255) gyorgyf@12: # ecol = (0,0,0,255) gyorgyf@12: # coordstxt = "test" gyorgyf@12: # gyorgyf@12: # while True : gyorgyf@12: # pg.draw.circle(screen, pg.Color(255,0,0), (300,50),20,0) gyorgyf@12: # # screen.blit(gradients.radial(99, scol, ecol), (401, 1)) gyorgyf@12: # gyorgyf@12: # for event in pg.event.get() : gyorgyf@12: # if event.type == QUIT: gyorgyf@12: # conn.close() gyorgyf@12: # pg.quit() gyorgyf@12: # sys.exit() gyorgyf@12: # elif event.type == KEYDOWN : gyorgyf@12: # if event.key == K_ESCAPE : gyorgyf@12: # pg.event.post(pg.event.Event(QUIT)) gyorgyf@12: # gyorgyf@12: # # put text gyorgyf@12: # # txtObj = fontObj.render(coordstxt,True,pg.Color(254,254,254)) gyorgyf@12: # # rectObj = txtObj.get_rect() gyorgyf@12: # # rectObj.topleft = (10,20) gyorgyf@12: # # # rectObj.fill(pg.Color(254,254,254)) gyorgyf@12: # # screen.blit(txtObj,rectObj) gyorgyf@12: # gyorgyf@12: # gyorgyf@12: # # Draw the rectangle gyorgyf@12: # # pg.draw.rect(screen,black,[rect_xp,rect_yp,50,50]) gyorgyf@12: # screen.blit(gradients.radial(19, ecol, ecol), (rect_xp,rect_yp)) gyorgyf@12: # gyorgyf@12: # rect_xp,rect_yp = rect_x,rect_y gyorgyf@12: # # pg.draw.rect(screen,white,[rect_x,rect_y,50,50]) gyorgyf@12: # screen.blit(gradients.radial(19, scol, ecol), (rect_x,rect_y)) gyorgyf@12: # gyorgyf@12: # gyorgyf@12: # # Move the rectangle starting point gyorgyf@12: # # rect_x += rect_change_x gyorgyf@12: # # rect_y += rect_change_y gyorgyf@12: # counter += 1 gyorgyf@12: # if counter % 12 : gyorgyf@12: # counter = 0 gyorgyf@12: # try : gyorgyf@12: # conn.request("GET","/moodconductor/result") gyorgyf@12: # res = conn.getresponse() gyorgyf@12: # data = eval(res.read()) gyorgyf@12: # coordstxt = "x:%s y:%s" %data gyorgyf@12: # rect_x = data[0] * 300 gyorgyf@12: # rect_y = data[1] * 1000 gyorgyf@12: # conn.close() gyorgyf@12: # except : gyorgyf@12: # pass gyorgyf@12: # gyorgyf@12: # gyorgyf@12: # gyorgyf@12: # # Bounce the ball if needed gyorgyf@12: # if rect_y > 450 or rect_y < 0: gyorgyf@12: # rect_change_y = rect_change_y * -1 gyorgyf@12: # if rect_x > 650 or rect_x < 0: gyorgyf@12: # rect_change_x = rect_change_x * -1 gyorgyf@12: # gyorgyf@12: # # pg.display.update() gyorgyf@12: # pg.display.flip() gyorgyf@12: # fpsClock.tick(50) gyorgyf@12: # gyorgyf@12: # gyorgyf@12: # # if raw_input("quit?") in ['y'] : gyorgyf@12: # # pg.quit() gyorgyf@12: # gyorgyf@12: # pass gyorgyf@5: gyorgyf@5: gyorgyf@5: if __name__ == '__main__': gyorgyf@5: pass gyorgyf@5: main() gyorgyf@5: