Comments 21
Где-то у меня валяется код на Actionscript 3, рендерящий относительно пристойно выглядящий лес, размером строк в двести и 12 килобайт исполняемого кода (SWF). Правда, вместо попиксельной рисовки там честное (почти честное) 3D для каждого дерева в лесу. Ну и работает со скоростью роста настоящего леса. Ссылки попротухали за шесть лет, но перевыложить могу, в принципе.
+7
Напишите публикацию, уверен, многим будет интересно (мне — точно).
+4
Готово: habr.com/post/429256 правда, самого кода там не так много, больше алгоритмов в виде текста.
+5
+1 к просьбе о публикации :)
+2
Под Python 3.6.6, может кому пригодится.
Сам код
import PIL, random
from PIL import Image, ImageDraw
origDimension = 1500
r = lambda: random.randint(50,215)
rc = lambda: (r(), r(), r())
listSym = []
def create_square(border, draw, randColor, element, size):
if (element == int(size/2)):
draw.rectangle(border, randColor)
elif (len(listSym) == element+1):
draw.rectangle(border,listSym.pop())
else:
listSym.append(randColor)
draw.rectangle(border, randColor)
def create_invader(border, draw, size):
x0, y0, x1, y1 = border
squareSize = (x1-x0)/size
randColors = [rc(), rc(), rc(), (0,0,0), (0,0,0), (0,0,0)]
i = 1
for y in range(0, size):
i *= -1
element = 0
for x in range(0, size):
topLeftX = x*squareSize + x0
topLeftY = y*squareSize + y0
botRightX = topLeftX + squareSize
botRightY = topLeftY + squareSize
create_square((topLeftX, topLeftY, botRightX, botRightY), draw, random.choice(randColors), element, size)
if (element == int(size/2) or element == 0):
i *= -1
element += i
def main(size, invaders, imgSize):
origDimension = imgSize
origImage = Image.new('RGB', (origDimension, origDimension))
draw = ImageDraw.Draw(origImage)
invaderSize = origDimension/invaders
padding = invaderSize/size
for x in range(0, invaders):
for y in range(0, invaders):
topLeftX = x*invaderSize + padding/2
topLeftY = y*invaderSize + padding/2
botRightX = topLeftX + invaderSize - padding
botRightY = topLeftY + invaderSize - padding
create_invader((topLeftX, topLeftY, botRightX, botRightY), draw, size)
origImage.save("Result" + str(size) + "x" + str(size) + "-" + str(invaders) + "-" + str(imgSize) + ".jpg")
print('Файл успешно создан')
while True:
size = input('Введите размер спрайта, не кратно 2 a = (1,3,5,7,9,11...)\n')
if size == 'exit' or size == 'e' or size == 'EXIT' or size == 'quit' or size == 'q' or size == 'Q' or size == 'E':
break
invaders = input('Введите кол-во спрайтов(1,2,3,4,5,6,7...)\n')
if invaders == 'exit' or invaders == 'e' or invaders == 'EXIT' or invaders == 'quit' or invaders == 'q' or invaders == 'Q' or invaders == 'E':
break
imgSize = input('Введите разрешение картинки(50,100,150...)\n')
if imgSize == 'exit' or imgSize == 'e' or imgSize == 'EXIT' or imgSize == 'quit' or imgSize == 'q' or imgSize == 'Q' or imgSize == 'E':
break
try:
main(int(size), int(invaders), int(imgSize))
except IndexError:
print('Фигово вводите... Попробуйте ещё раз')
except ValueError:
print('Даже по цифрам не попадаете... Попробуйте ещё раз')
+1
Кажется это можно использовать как новый метод стеганографии.Нужно хеш-стеганографию подружить с генеративным искусством ;))
+1
И если теперь подключить к вязальной машине, можно сделать интересный свитер. Но скучно, наверное.
+2
Демосцена вас укуси.
Данный код занимает ~2kb, то есть одну сорок восьмую часть этого: en.wikipedia.org/wiki/.kkrieger =)
Данный код занимает ~2kb, то есть одну сорок восьмую часть этого: en.wikipedia.org/wiki/.kkrieger =)
0
Сравнивать размер исходников и заоптимизированного под компактность скомпилированного бинарника — довольно неблагодарное занятие. Ну и вообще, где энтрилевельный любительский код на питоне, а где демосцена.
+2
А возможностей питона хватит чтобы визуализировать содержимое подключенного тома или папки вот в таком виде:
У меня есть желание создать свой похожий алгоритм, визуализирующий содержимое директорий и дисков, но я не знаю как подступиться к задаче. Т.к. знания о программировании ограничены знаниями BASIC, изученного больше десятилетия назад.
Скриншот k4dirstat
У меня есть желание создать свой похожий алгоритм, визуализирующий содержимое директорий и дисков, но я не знаю как подступиться к задаче. Т.к. знания о программировании ограничены знаниями BASIC, изученного больше десятилетия назад.
0
А можете пояснить что под спойлером? Не понятно…
0
Хватит. Советую для начала почитать туториал на английском в документации Python, если с английским проблем нет (даже если есть — лучше попробовать). Советую так же узнать что такое pip для python и как им пользоваться.
Вижу k4dirstat написан на Qt. Есть PyQt, с помощью которого можно зафигачить такой же интерфейс и привязать его к проге на питоне. Если не боитесь чужого кода (и вообще это отличная мысль) можно даже попробовать портировать интерфейс самого k4dirstat. Qt у нас кросплатформенный.
Можно и на tkinter'е написать интерфейс в принципе, если хотите. Он вовсе включен в стандартную библиотеку питона.
Вижу k4dirstat написан на Qt. Есть PyQt, с помощью которого можно зафигачить такой же интерфейс и привязать его к проге на питоне. Если не боитесь чужого кода (и вообще это отличная мысль) можно даже попробовать портировать интерфейс самого k4dirstat. Qt у нас кросплатформенный.
Можно и на tkinter'е написать интерфейс в принципе, если хотите. Он вовсе включен в стандартную библиотеку питона.
+1
Сама программа хорошая и удобная. Меня не устраивает часть, которая визуализирует размер файлов.
Я как программер нулевой, моя компетенция GUI и визуальные «рюшечки». Просто пока я изучу работу с ОС, ФС, файлами и т.п. то состарюсь до 70 лет :)
А если я алгоритмически опишу свою версию хотя бы в общих чертах, то разраб k4dirstat вероятно возьмет мой алгоритм.
Я как программер нулевой, моя компетенция GUI и визуальные «рюшечки». Просто пока я изучу работу с ОС, ФС, файлами и т.п. то состарюсь до 70 лет :)
А если я алгоритмически опишу свою версию хотя бы в общих чертах, то разраб k4dirstat вероятно возьмет мой алгоритм.
0
Sign up to leave a comment.
Как создать процедуральный арт менее чем за 100 строк кода