123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341 |
- import pyglet
- import math
- from pyglet import shapes
- import random
- import time
- class _Particale():
- def __init__(self,x,y,xvel,yvel,radius,color):
- self.x = x
- self.y = y
- self.xvel = xvel
- self.yvel = yvel
- self.radius = radius
- self.color = color
- self.time = time.time()
- self.start = time.time()
- self.start2 = random.randint(1,20)/10.
- if self.start2 > 1.8:
- self.start2 += random.randint(1,20)/10.
- self.colors = [(255,255,0),(255,210,0),(255,90,0)]
- self.color = random.choice(self.colors)
- def draw(self,win):
- if time.time() > self.time+0.05:
- self.x += self.xvel
- self.y += self.yvel
- self.time = time.time()
- if self.start+self.start2 < time.time():
- self.radius -= 0.1
- #if time.time() > self.time+0.2:
- #pygame.draw.circle(win, color, (int(self.x),int(self.y)),self.radius)
- color = self.color
- x= round(self.x)
- y= round(self.y)
- r = round(self.radius)
- if len(color) == 3:
- color = list(color)
- color.append(0)
- #pygame.gfxdraw.filled_circle(win, x,y ,r,color )#[0,0,255])
- #pygame.gfxdraw.aacircle(win, x,y ,r,color )#[0,0,255])
- r = round(r)
- #img3 = img2.copy()
- #img3 = colorize(img2, color ) #(0, 0, 255,15) )
- #img3 = colorize(img2,(255, 120, 255,15) )
- #img3 = colorize(img2,color )
- #img3 = pygame.transform.scale(img3, (r, r))
- #player_rect3 = img3.get_rect(center=(x,y))
- #window.blit(img3, player_rect3)
- if r > 0:
- batch1 = pyglet.graphics.Batch()
- circle = shapes.Circle(x,y, r+5, color=(50, 225, 30), batch=batch1)
- batch1.draw()
- #print("ok")
- return [x,0,y,0,color]
- class Particales():
- def __init__(self):
- self.data = []
- def add(self,x,y):
- for z in range(random.randint(1,1)):
- s = 10
- xvel = random.randint(0,s) -(s/2)
- yvel = random.randint(0,s) -(s/2)
- r = random.randint(1,2)
- p = _Particale(x ,y ,xvel ,yvel,r,(255,255,255))
- self.data.append(p)
- def draw(self,win=None):
- rem = []
- for p in self.data:
- p.draw(win)
- if p.radius <= 0:
- rem.append(p)
- for p in rem:
- self.data.remove(p)
- particales = Particales()
- class Planet():
- def __init__(self,x,y,ang=0):
- self._pos_center = (x,y)
- self._quadrant = 0
-
- self._ang = ang
- self._ang_dir = 1
- self._r = 2 #
- self._orbit = 60 # orbit,umlaufbahn
- self._color_org = [255,255,0]
- self._color = [0,255,0]
- self._x=0
- self._y=0
- self._ix = 0
- self._iy = 0
- def rotate(self):
- q = 0
- if self._ang_dir:
- self._ang += 2 # degree
- else:
- self._ang -= 1 # degree
- if self._ang >= 360:
- self._ang = 0 #self._ang -360
- elif self._ang < 0:
- self._ang = 360
- ang = self._ang
- self._quadrant = ang//90
- ang -= self._quadrant * 90
-
-
- self._ix = math.sin(math.radians(ang))*self._orbit
- self._iy = math.sqrt(self._orbit**2 - self._ix**2)
-
- y = self._iy
- x = self._ix
- if self._quadrant == 1:
- self._iy = -x
- self._ix = y
- elif self._quadrant == 2:
- self._iy = -y
- self._ix = -x
- elif self._quadrant == 3:
- self._iy = x
- self._ix = -y
- def draw(self,x,y):
- self._pos_center = (x,y)
- self.rotate()
- self._x = int(self._pos_center[0] + self._ix)
- self._y = int(self._pos_center[1] + self._iy)
- if self._ang > 300:
- f = (self._ang -300) / 60
- f = 1-f
- rgb = self._color_org # = [255,255,0]
- self._color = [ int(rgb[0]*f) , int(rgb[1]*f) ,int(rgb[2]*f) ]
- elif self._ang < 60:
- f = self._ang / 60
- rgb = self._color_org # = [255,255,0]
- self._color = [ int(rgb[0]*f) , int(rgb[1]*f) ,int(rgb[2]*f) ]
- #print("ang {} {} {:3} {:3} {}".format( self._ang,self._quadrant,self._x,self._y,self._color))
- #print(self,"Q:",int(self._quadrant),self._ang)
- return (self._x,self._y,self._color)
- class Animation():
- def __init__(self,x=20,y=20,speed=1,_dir=1):
- self.pos_x=x
- self.pos_x_dir = 1
- self.pos_y=y
- self.pos_y_dir = 1
- self.r = 7
- self.r_dir = 1
- self.speed = speed
- self.ang = 0
- self.ix=0
- self.iy=0
- self.planetes = []
- a = 360
- d = 3
- for i in range(d+1):
- i=i+1
- p = Flow(self.pos_x,self.pos_y,ang=a/d*i)
- p._ang_dir = _dir
- self.planetes.append(p)
- def rotate(self):
- self.ix = math.sin(math.radians(0))*self.r
- self.iy = math.sqrt(self.r**2 - self.ix**2)
- self.ang+=1
- if self.ang >= 360:
- self.ang = 0
-
- def draw(self,color=[255,255,255,255]):
- self.rotate()
- #pixel_array = pygame.PixelArray(window)
- pixel_array = {}
- self.color = [255,255,255,255] #pygame.Color(color[0],color[1],color[2],color[3])
-
- x=self.pos_x
- y=self.pos_y
- for i,planet in enumerate(self.planetes):
- px,py,pcolor = planet.draw(x,y)
- k = "{}.{}:{},{}:{}".format(i,px,px+10,py,py+10)
- pixel_array[k] = (px,px,py,py , pcolor )
- if self.pos_x > 300:
- self.pos_x_dir = 0
- if self.pos_x <= self.speed:
- self.pos_x_dir = 1
- if self.pos_x_dir:
- self.pos_x += self.speed
- else:
- self.pos_x -= self.speed
- if self.r > 20:
- self.r_dir = 0
- if self.r <=7:
- self.r_dir = 1
- if self.r_dir:
- self.r+=1
- else:
- self.r-=1
- return pixel_array
- class Gobo1():
- def __init__(self,x=20,y=20,speed=1,_dir=1):
- self.pos_x=x
- self.pos_x_dir = 1
- self.pos_y=y
- self.pos_y_dir = 1
- self.r = 17
- self.r_dir = 1
- self.speed = speed
- self.ang = 0
- self.ix=0
- self.iy=0
- self.planetes = []
- a = 360
- d = 3
- for i in range(d+1):
- i=i+1
- p = Planet(self.pos_x,self.pos_y,ang=a/d*i)
- p._ang_dir = _dir
- self.planetes.append(p)
- def rotate(self):
- self.ix = math.sin(math.radians(0))*self.r
- self.iy = math.sqrt(self.r**2 - self.ix**2)
- self.ang+=1
- if self.ang >= 360:
- self.ang = 0
-
- def draw(self,color=[255,255,255]):
- self.rotate()
- #pixel_array = pygame.PixelArray(window)
- pixel_array = {}
- self.color = [255,255,255,255] #pygame.Color(color[0],color[1],color[2])
-
- x=self.pos_x
- y=self.pos_y
- for i,planet in enumerate(self.planetes):
- px,py,pcolor = planet.draw(x,y)
- k = "{}.{}:{},{}:{}".format(i,px,px+10,py,py+10)
- pixel_array[k] = (px,px,py,py , pcolor )
- if self.pos_x > 1600:
- self.pos_x_dir = 0
- if self.pos_x <= self.speed:
- self.pos_x_dir = 1
- if self.pos_x_dir:
- self.pos_x += self.speed
- else:
- self.pos_x -= self.speed
- if self.r > 20:
- self.r_dir = 0
- if self.r <=7:
- self.r_dir = 1
- if self.r_dir:
- self.r+=1
- else:
- self.r-=1
- return pixel_array
- def display_get_width():
- display = pyglet.canvas.get_display()
- screen = display.get_default_screen()
- return screen.width
- def display_get_height():
- display = pyglet.canvas.get_display()
- screen = display.get_default_screen()
- return screen.height
- sw = display_get_width()
- sh = display_get_height()
- print(sw, sh)
- window = pyglet.window.Window(sw//2,sh//2)
- gobo1 = Gobo1()
- def loop(event=None):
- #print(event)
- batch = pyglet.graphics.Batch()
- x = 100
- y = 100
- rectangle = shapes.BorderedRectangle(x, y, y+100, y+100, border=1, color=(255, 255, 255), border_color=(100, 100, 100), batch=batch)
- rectangle2 = shapes.BorderedRectangle(x, y , x+100,y+100, border=1, color=(255, 255, 255), border_color=(100, 100, 100), batch=batch)
- circle = shapes.Circle(x,y, 100, color=(50, 225, 30), batch=batch)
- window.clear()
- batch.draw()
- batch1 = pyglet.graphics.Batch()
- d1 = gobo1.draw()
- for k in d1:
- i = d1[k]
- #print("i",i)
- x=i[0] +200
- y=i[2] +200
- circle = shapes.Circle(x,y, 10, color=(50, 225, 30), batch=batch1)
-
- particales.add(x,y)
- batch1.draw()
- particales.draw()
- #print("ok")
- @window.event
- def on_draw():
- loop()
- pyglet.clock.schedule_interval(loop, 0.001)
- pyglet.app.run()
|