Views
3 years ago

НЕСЛУЧАЙНО CUDA ИДЕМ? phpMyAdmin - Xakep Online

НЕСЛУЧАЙНО CUDA ИДЕМ? phpMyAdmin - Xakep Online

++++ >> coding ++++ ++++

++++ >> coding ++++ ++++ ++++ РОМАН «SPIRIT» ХОМЕНКО / HTTP://TUTAMC.COM / graphics DOUBLE BUFFERING 1. DRAW ++++ image Back Butter ++++ 2. Biit (copy) ++++ image Back Butter ++++ ++++ ++++ ++++ ++++ ++++ ВЕСЕЛАЯ СТОРОНА PYTHON’A Юзаем библиотеку PyGame на примере игры «Лестница» Игры — одно из лучших изобретений человечества. В них все мечты сбываются, в них мы рыцари, короли, боги! За десятки лет существования игростроя сценаристы придумали для нас множество миров, но порой так хочется создать что-то свое — тот мир, где будут царить только твои правила. В рамках этой статьи я постараюсь научить тебя использовать волшебную палочку для создания игр — PyGame. ++++ ++ ++ ++++ ++++ ++++ Год назад я познакомился с PyGame и влюбился в него с первых строк документации. Сразу же я вспомнил все свои мучения, связанные с программированием на С++ в связке с DirectX, вспомнил, как все жутко тормозило, и я мучился над оптимизацией… а оно все равно тормозило. Вспомнил, как для элементарных вещей нужно было писать десятки строк кода. PyGame берет все заботы на себя. Нам остается лишь написать саму игру, а не думать, к примеру, как правильно загрузить картинку. Если ты не собираешься писать игры, то можешь заюзать PyGame для создания оригинальных интерфейсов в своих прогах или визуализации какой-либо информации. КОЛОБОК НА ЛЕСТНИЦЕ PyGame — это кроссплатформенный набор модулей, построенный поверх SDL-библиотеки и предназначенный для написания видеоигр. Он включает в себя библиотеки для работы с графикой и звуком, реализованные с использованием языка Python. Автор этого чуда — Pete Shinners. Чтобы все сказанное о PyGame не было лишь теорией, разберем написание простой игры «Лестница». Выбор был сделан редактором рубрики. Он прямо сказал, что или я напишу об этой игре, или он не отдаст мне ящик минералки, который проспорил на последней «научной конференции» в баре. Однако, наша «Лестница» уже не будет текстовой игрушкой. У нас появится хакерский Колобок, который должен будет пройти снизу вверх по лестницам к двери. А сверху вниз будут падать камни, так и норовящие подвергнуть нашего Колобка кровавому прессингу. Сперва я хотел рассказать тебе о каждой строчке в этой игре, но, к сожалению, игруха получилась аж на 300 строк, поэтому я поведаю только основные моменты. Они позволят тебе понять принципы работы с PyGame, а полный код игры ждет тебя на диске. ПОГРУЖЕНИЕ, ИЛИ БАЗОВЫЕ ЗНАНИЯ Установка PyGame в Windows проходит в несколько кликов с инсталяхи, которую можно взять с http://www.pygame.org или с нашего диска. Для Linux PyGame находится в репозитариях. Я же, как ламер, пишу под виндой и юзаю версию Python 2.5 и соответствующую ей версию библиотеки (поскольку так советует поступать сам автор библиотеки ++++ 090 XÀÊÅÐ 07 /127/ 09

coding ЛОГОТИП PYGAME из соображений скорости). Но хватит лирики, давай скорее перейдем к кодингу. Как всегда в Python’e, использование PyGame начинается с подключения библиотек: import pygame from pygame.locals import * Замечу, что pygame.locals мы полностью включили в область глобальной видимости, потому что это рекомендуют на официальном сайте. Именно там собраны основные константы, к которым мы будем часто обращаться, например, константы клавиш клавиатуры. Теперь проинициализируем PyGame и создадим окно размером 640x480 и с заголовком «][акер»: pygame.init() pygame.display.set_mode((640, 480)) pygame.display.set_caption( '][akep') Посредством этого небольшого куска кода мы создали не только окно, но и главную поверхность (surface) для рисования, которую в любой точке программы можно получить командой pygame.display.get_surface(). Для самого же рисования реализовано множество функций. Они описаны в документации на официальном сайте. В качестве примера разберем рисование линии: pygame.draw.line(window,(10,100, 100),(10,200),(20,300),2) Здесь window — поверхность, на которой рисуется линия; затем идет цвет линии в формате (R,G,B), начальные и конечные точки линии в формате (X,Y), и, наконец, ширина линии. Кстати, эта линия будет не сглажена! Чтобы нарисовать сглаженную линию, нужно line изменить на aaline. Но это все не очень важно, ведь красивую графику таким образом не нарисуешь. Нам придется подгружать картинки с файлов и их отображать, но об этом позже. Если мы попробуем сейчас нарисовать линию на главной поверхности, то все равно ничего не увидим — PyGame автоматически использует двойную буферизацию, и для того, чтобы все это хозяйство перебросить с главной поверхности на поверхность, которая проецируется на видеокарту, нужно вызвать pygame.display.flip(). import pygame from pygame.locals import * pygame.init() ОФИЦИАЛЬНЫЙ САЙТ PYGAME window = pygame.display. \ set_mode((640, 480)) pygame.display.set_caption( '][akep') pygame.draw.aaline(window, (10,100,100),(10,200),(20,300),2) pygame.display.flip() while 1: pass У этого тестового примера есть небольшой минус: он не обрабатывает события, а ведь нам нужно хотя бы научить его закрываться при нажатии на «крестик». Для получения событий существует функция pygame.event. get(), которая возвращает список всех событий, которые возникли с момента последнего вызова этой функции. Изменим последний бесконечный цикл на вот такой: while 1: for event in pygame.event.get(): if event.type == QUIT: sys.exit() Теперь приложение нормально отображается, не кажется зависшим и даже закрывается :), потому что мы принимаем события и корректно их обрабатываем. Среди типов событий есть и события, связанные с клавишами — например, KEYDOWN и KEYUP. И если мы захотим, чтобы наше приложение закрывалось еще и при нажатии клавишу Esc, то можно добавить условие: if event.type == KEYDOWN: if event.key == K_ESCAPE: sys.exit() Тут мы видим, что нажатая клавиша сохраняется в event.key, а мы сравниваем ее с константой клавиши Esc и должным образом реагируем. Все эти константы перечислены в документации, правда, мне почему-то не удалось найти константу на Enter, поэтому в этой ситуации я сравнивал key с числом 13 — кодом Enter’a. НАЧАЛО ГЕЙМ-КОДИНГА, ИЛИ АРХИТЕКТУРА Овладев этими базовыми знаниями, мы готовы к гейм-кодингу. Начнем с самого трудного — архитектуры, ведь при неправильно выбранной архитектуре разработка превращается в ад, и последующие изменения в каждой строчке кода можно приравнять к принудительному прослушиванию песни Димы Билана. Архитектура «Лестницы» полностью основана на объектах. Основной объект — general — порожден классом General. Он проводит первоначальную инициализацию и впоследствии обрабатывает глобальные события: class General(): level = 0 def __init__(self): pygame.init() pygame.display.set_mode( (640, 480)) pygame.display.set_caption( '][akep') def event(self,event): if event.type == QUIT: sys.exit() if event.type == KEYUP: if event.key == K_ESCAPE: self.location = exit_location Как видно из вышеуказанного кода, в конструкторе он создает окно и обрабатывает события, ведущие к переходу к локации exit_location. Локации — это объекты, наследованные от класса Location: class Location(object): def __init__(self): self.window = pygame.display.\ get_surface() def event(self,event): pass def draw(self): pass Локации имеют конструктор, функцию по обработке событий и функцию по прорисовке экрана. Все выглядит достаточно запутано, но давай посмотрим на программу целиком (без самих объектов): general = General() start_location = Start_location() game_location = Game_location() exit_location = Exit_location() general.location = start_location clock = pygame.time.Clock() while 1: for event in pygame.event.get(): general.location.event(event) general.event(event) general.location.draw() pygame.display.flip() clock.tick(30) Как можно заметить, сначала создается general-объект. Далее создаются три лока- XÀÊÅÐ 07 /127/ 09 091

Май - Xakep Online
Скачать - Xakep Online
Январь - Xakep Online
УЧИМ КАКОценить сбалансированность системы ... - Xakep Online
ИюНь - Xakep Online
Офисное западло - Xakep Online
JIT SPRAY АНАЛИЗ TDSS - Xakep Online
КОНКУРС - Xakep Online
Скачать - Xakep Online
ЛУЧШИХ ВИРУСОВ - Xakep Online
Ноябрь - Xakep Online
Скачать - Xakep Online
Взлом GSM - Xakep Online
2009 - Xakep Online
ЛЕГКИЙ ХАК - Xakep Online
ВЗЛОМ ИНТЕРНЕТ-МАГАЗИНА: - Xakep Online
7 ЧУДЕС KDE - Xakep Online
с татьи - Xakep Online
c-лето ;) - Xakep Online
содержание 10 (59) - Xakep Online
Ноябрь - Xakep Online
ЗАКАДРИ КАРДИНГ НАШИ ИДУТ! - Xakep Online
Untitled - Xakep Online
WebMoney - Xakep Online
шпион внутри - Xakep Online
тест - Xakep Online
Зверские опыты над Oracle - Xakep Online