Прикреплённый файл «sort_show.py»
Загрузка 1 #!/usr/bin/python
2 # coding: utf8
3 '''
4 Отображение операций над списком с помощью PyGame
5 '''
6
7 import pygame, random, time
8 import sort_count
9 from math import *
10
11 Bars,Gap,Sleep=3/4.,2,0.1
12
13 def Init(size=(1024,768),sleep=0.1):
14 global screen, cstart, back, Sleep
15 pygame.init()
16 sort_count.Init()
17 screen=pygame.display.set_mode(size)
18 cstart=random.randrange(360)
19 back=pygame.Color("black") # чтобы каждый раз гамма начиналась с нового цвета
20 Sleep=sleep
21
22 def Update(p):
23 global Min, Max, W, H
24 Min,Max=min(p),max(p)
25 W,H=screen.get_width()-2*Gap,screen.get_height()-2*Gap
26
27 def Fill(p):
28 Update(p)
29 screen.fill(back)
30 for i in xrange(len(p)):
31 col=pygame.Color("black")
32 col.hsva=(int((cstart+359*(p[i]-Min)/(Max-Min))%360),100,100,100)
33 hi=Bars*p[i]/float(Max-Min) # высота столбца
34 screen.fill(col,(Gap+i*W/len(p), H*(1-hi), W/len(p)-Gap, Gap+H*hi))
35
36 def Arc(p,i,j,color,fill=True):
37 if fill: Fill(p)
38 if i>j: i,j=j,i
39 elif j==i: return
40 col=pygame.Color(color)
41 hi,hj=H*(1-Bars*p[i]/float(Max-Min))-4*Gap,H*(1-Bars*p[j]/float(Max-Min))-4*Gap
42 xi,xj=Gap+(i+0.5)*W/len(p),Gap+(j+0.5)*W/len(p)
43 pygame.draw.arc(screen,col,(xi,2*Gap,xj-xi,2*H*(1-Bars)),0,pi,Gap)
44 pygame.draw.circle(screen,col,(int(xi),int(hi)),2*Gap)
45 pygame.draw.circle(screen,col,(int(xj),int(hj)),2*Gap)
46 pygame.draw.line(screen,col,(xi,H*(1-Bars)-2*Gap),(xi,hi),Gap)
47 pygame.draw.line(screen,col,(xj,H*(1-Bars)-2*Gap),(xj,hj),Gap)
48
49 def Cmp(p,i,j):
50 Arc(p,i,j,"yellowgreen")
51 Show()
52 return sort_count.Cmp(p,i,j)
53
54 def Swap(p,i,j):
55 Arc(p,i,j,"tomato")
56 Show()
57 e1,e2=sort_count.Read(p,i),sort_count.Read(p,j)
58 sort_count.Write(p,i,e2)
59 sort_count.Write(p,j,e1)
60 time.sleep(Sleep)
61
62 def Swapn(p,I,J):
63 Fill(p)
64 for i,j in zip(I,J):
65 Arc(p,i,j,"orange",False)
66 Show()
67 els=[sort_count.Read(p,i) for i in I]
68 [sort_count.Write(p,J[i],els[i]) for i in xrange(len(els))]
69 time.sleep(Sleep)
70
71 def GT(p,i,j):
72 return Cmp(p,i,j)>0
73
74 def Show():
75 pygame.display.flip()
76 time.sleep(Sleep)
77
78 def Wait():
79 pygame.event.get()
80 while True:
81 pygame.display.flip()
82 event = pygame.event.wait()
83 if event.type in (pygame.QUIT, pygame.KEYUP):
84 return
Прикреплённые файлы
Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.- [получить | показать] (2011-09-26 11:35:27, 2.2 KB) [[attachment:sort.py]]
- [получить | показать] (2011-09-26 11:35:27, 0.8 KB) [[attachment:sort_count.py]]
- [получить | показать] (2011-09-26 11:35:27, 2.3 KB) [[attachment:sort_show.py]]
Вам нельзя прикреплять файлы к этой странице.