Прикреплённый файл «drawer3.py»
Загрузка 1 #!/usr/bin/env python
2 # -*- coding: UTF-8 -*-
3 '''
4 Рисовальщик: программа , котороая читает из файла и отображает
5 0. Размер картинки (первая строка файла)
6 <ширина> <высота>
7 1. Линии, окружности, прямогуольники с цветом и шириной
8 color <R,G,B>
9 width <ширина>
10 line <начало> <конец>
11 cicrle <центр> <радиус>
12 rect <угол1> <угол3>
13 2. Ломаные и многоугольники
14 lines <точка1> <точка2> ...
15 polygon <точка1> <точка2> ...
16 3. Заливка одноцветной области
17 fill <откуда> <тип> [<показывать ли?>]
18 '''
19
20 from math import *
21 import sys
22
23 import pygame
24 pygame.init()
25
26 def int1(s):
27 'Разбить строку на слова, пребразовать все элементы, кроме первого, в целые'
28 if s.startswith('#'): return s,[] # комментарий
29 l=s.split(' ')
30 return [l[0].lower()]+[int(e) for e in l[1:]]
31
32 def pairs(s):
33 'Разбить список на пары'
34 return [s[i:i+2] for i in range(0,len(s),2)]
35
36 def testdot(surf, dot, Fil):
37 'Проверить, ннужно ли закрашивать точку dot при цвете фона Fil'
38 return surf.get_rect().collidepoint(dot) and surf.get_at(dot) == Fil
39
40 def fillsurface(surf, col, dot, depth = False, debug = False):
41 '''Перекрасить все точки surface, непосредственно доступные
42 от точки dot, в цвет col'''
43 dif = ((-1,0),(0,1),(1,0),(0,-1)) # соседние точки
44
45 def fillwidth(surf, queue, Col, Fil, dot, debug):
46 'Если это нужно, закрасить каждую точку и добавить все их соседние в очередь'
47 queue2=[]
48 while queue:
49 d = queue.pop()
50 if testdot(surf, d, Fil):
51 surf.set_at(d,Col)
52 queue2.extend([(d[0]+dif[i][0],d[1]+dif[i][1]) for i in xrange(len(dif))])
53 return queue2
54
55 def filldepth(surf, queue, Col, Fil, dot, debug):
56 'Если это нужно, закрасить точку и добавить 4 соседние в очередь'
57 d = queue.pop()
58 if testdot(surf, d, Fil):
59 surf.set_at(d,Col)
60 queue.extend([(d[0]+dif[i][0],d[1]+dif[i][1]) for i in xrange(len(dif))])
61 return queue
62
63 Col=pygame.Color(*col)
64 Plane=surf.get_rect()
65 surf.lock()
66 fill = depth and filldepth or fillwidth
67 if surf.get_at(dot) != Col:
68 Fil = surf.get_at(dot)
69 queue = [dot] # точки, которые, возможно, надо закрасить
70 while queue:
71 queue = fill(surf, queue, Col, Fil, dot, debug)
72 if debug: pygame.display.flip()
73 surf.unlock()
74
75 # как ввести имя файла?
76 f = file(sys.argv[1],"r")
77 fig = [int1(l) for l in f.readlines()]
78 print fig
79 W,H = int(fig[0][0]),int(fig[0][1])
80 width,color = 1, (255,25,255)
81 screen = pygame.display.set_mode((W,H))
82
83 for l in fig[1:]:
84 print l
85 if not l[0] or l[0].startswith('#'):
86 pass
87 elif l[0] == 'width': width = l[1]
88 elif l[0] == 'color': color = l[1:]
89 elif l[0] == 'line': pygame.draw.line(screen, color, l[1:3], l[3:5], width)
90 elif l[0] == 'rect': pygame.draw.rect(screen, color, l[1:5], width)
91 elif l[0] == 'circle': pygame.draw.circle(screen, color, l[1:3], l[3], width)
92 elif l[0] == 'lines': pygame.draw.lines(screen, color, False, pairs(l[1:]), width)
93 elif l[0] == 'poly': pygame.draw.lines(screen, color, True, pairs(l[1:]), width)
94 elif l[0] == 'fill': fillsurface(screen, color, l[1:3], False, False)
95 else: print >> sys.stderr, "Warning: unknown '%s' figure"%l[0]
96 pygame.display.flip() # для медленного красивого отображения
97
98 print "END"
99 while pygame.event.wait().type != pygame.QUIT:
100 pass
Прикреплённые файлы
Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.- [получить | показать] (2011-09-26 11:35:21, 5.0 KB) [[attachment:drawer2.py]]
- [получить | показать] (2011-09-26 11:35:21, 3.9 KB) [[attachment:drawer3.py]]
- [получить | показать] (2011-09-26 11:35:21, 0.4 KB) [[attachment:figure2]]
Вам нельзя прикреплять файлы к этой странице.