Форум сайта python.su
Я недавно решил запилить 3D графику в консоли как в видео Видео но в консоль не успевают выводиться символы.
Код:
import math, random, os, time width = 80 height = 20 k = (width/height) * (11/24) screen = ['.']*(height*width+width) def render(arr, width, height, k, t): for y in range(height): vy = (y/height)*2-1 for x in range(width): vx = (x/width)*2-1 vx *= k if math.sqrt(vx*vx + vy*vy) <= abs(math.cos(t))*0.75: arr[x+x*y] = '@' else: arr[x+x*y] = ' ' if x != width: print(arr[x+x*y], end='') else: print(arr[x+x*y]) return arr t = 0.0 run = True while run: screen = render(screen, width, height, k, t) t += 0.15 time.sleep(0.25) os.system('cls')
Отредактировано wowlikon (Ноя. 30, 2021 19:35:33)
Офлайн
Вы же видео смотрели, в нем у афтора теже проблемы, правда при увеличении “разрешения”, но сути это не меняет.
Однозначного ответа вам не будет, потому что операция вывода в консоль - в принципе медленная и сильно зависит от процессора, и ОС. Плюс вы пишете на пайтон так как будто это Си, что есть очень даже плохо.пайтон не Си и писать на нем нужно как на пайтоне.
МОгу дть толлько пару общих советов:
- Вы делаете принт для каждого символа, сильно подозреваю, что если печатать хотябы построчно то будет быстрее, а еще лучше сразу весь экран выводить.
- Делать os.system('cls') туже глупо, это “лишнее движение”, просто перемещайте курсор в начало экрана и рисуйте “поверх”.
- map и zip могут сильно ускорить код.
Попрбуйте вместо принт sys.stdout.write или os.write возможно это тоже ускорит.
time.sleep(0.25) серьезно? возможно стоит это время не молотить в холостую, а посчитать следующу сцену?
обратите внимание на модули curses/UniCurses, colorama.
[code python][/code]
Отредактировано PEHDOM (Ноя. 30, 2021 21:14:39)
Офлайн