Уведомления

Группа в Telegram: @pythonsu

#1 Май 19, 2010 19:22:42

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Life 2

Описание
Написана под впечатлением от игры "Жизнь“ и от желания написать арену с программируемыми роботами. До полноценной арены с полноценными роботами дело не дошло, поэтому ограничился простыми ”элементами“ или ”частицами".
Суть такова: есть поле (арена), ограниченное размерами окна, и набор классов элементов, которые можно плодить в неограниченных количествах. Элементы имеют доступ к списку всех элементов на поле и могут что-то делать в зависимости от ситуации. Элементы реализованы в виде плагинов, чтобы добавить новый, надо создать py-файл в папке plugins и в нем класс унаследованный от класса Element с переопределенным методами do (отвечает за поведение), paint (по жалению, отвечает за внешний вид), __init__ (по желанию, там задаются параметры). Написана с использованием PyQt4.

Скриншотик


Элементы в базовой поставке
Attractor - притягивается к другим элементам
Rejector - отталкивается от других элементов
Stoppic - стоит на месте; если есть кто-то в поле его действия, то отталкивается от него
Haotic - меняет свою скорость и направление хаотично
Eater - двигается к ближайшему элементу и хавает его, увеличиваясь на пиксель в размере
Copier - копирует поведение ближайшего элемента
Cloner - отталкивается от других и делает своего клона, если кто-то находится слишком близко
Freezer - притягивается к другим и “замораживает” их
Pusher - притягивается к другим и пинает их
Teleporter - телепортируется в случайную точку, если кто-то подходит слишком близко

Пример плагина

# -*- coding: utf-8 -*-
from Element import Element
from PyQt4.QtCore import *

class Attractor(Element):
"""Элемент, притягивающийся к другим"""
def __init__(self):
Element.__init__(self)
self.color = Qt.red
self.reactionDist = 200

def do(self, elements):
xSpeedInc = 0
ySpeedInc = 0
for elem in elements:
if elem is not self:
if self.distanceTo(elem) <= self.reactionDist:
xSpeedInc -= (self.x() - elem.x()) / self.reactionDist
ySpeedInc -= (self.y() - elem.y()) / self.reactionDist
self.xSpeed += xSpeedInc
self.ySpeed += ySpeedInc
TODO
- Сделать бесконечное поле (циклическое, как в пакмане)
- Доработать интерфейс до более-менее приятного
- Оптимизировать скорость работы, сейчас сильно грузит проц
- Добавить траекторию движения элементов. Сейчас можно включить использование QPath, но нужно ограничить его длину, иначе сильная нагрузка на проц
- Добавить новых интересных элементов с красивым графическим телом

BitBucket



Отредактировано (Июнь 3, 2010 17:19:27)

Офлайн

#2 Май 20, 2010 15:47:54

Zubchick
От:
Зарегистрирован: 2009-07-08
Сообщения: 613
Репутация: +  0  -
Профиль   Отправить e-mail  

Life 2

здорово!

Тока вылетает ошибка если запускать так:

zubchick ~ % cd /home/zubchick/Загрузки/src                               16:45
zubchick ~/Загрузки/src % py main.py 16:45
Traceback (most recent call last):
File "main.py", line 6, in <module>
os.chdir(os.path.dirname(__file__))
OSError: [Errno 2] No such file or directory: ''
zsh: exit 1 env python main.py



Офлайн

#3 Май 20, 2010 15:59:00

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Life 2

Мне понравилось. Прикольно.

pasaranax
- Сделать бесконечное поле (циклическое, как в пакмане)
Не думаю, что это хорошая идея.

pasaranax
- Оптимизировать скорость работы, сейчас сильно грузит проц
Посмотри на Cython.

pasaranax
- Добавить новых интересных элементов с красивым графическим телом
Я бы пока обошёлся без красивостей.

ИМХО:
* стоит сменить название;
* проект на bitbucket'е;
* смерть и рождение;
* мутации (сложно!).

После второго пункта, я могу подключиться, так как именно сейчас у меня есть немного времени и хочется по-программить.

P.S. Меня всегда завораживали подобные вещи, но сам начинать не решался.



Офлайн

#4 Май 20, 2010 21:12:16

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Life 2

Zubchick
Тока вылетает ошибка если запускать так:
Угу. Я так и не разобрался как получить в область видимости соседние с main.py файлы.

ZZZ
pasaranax написал:
- Сделать бесконечное поле (циклическое, как в пакмане)

Не думаю, что это хорошая идея.
А мне кажется, что так правильнее. А то некторые элементы забиваются в угол и колбасятся там пока не расплодятся до неимоверного количества или пока их не схавают. В любом случае функцию можно (даже стоит) сделать опциональной.

ZZZ
pasaranax написал:
- Оптимизировать скорость работы, сейчас сильно грузит проц

Посмотри на Cython.
Первым делом думаю перенести отрисовку графики на OpenGL, вроде в Qt это просто делается.

ZZZ
Я бы пока обошёлся без красивостей.
потому я и написал это последним пунктом :)

ZZZ
ИМХО:
* стоит сменить название;
* проект на bitbucket'е;
* смерть и рождение;
* мутации (сложно!).
Мне тоже не очень нравится Life, назвал Elements. Репозиторий: https://bitbucket.org/pasaranax/elements
На счет смерти, рождения и мутаций, сложно пока себе это представить :)

Если есть желание - подключайся, в команде всегда интереснее, и меньше шансов загнуться проекту. Если кого-то еще заинтересовало, но пока не готов влиться полностью, то можно создавать новые или дорабатывать существующие элементы.
Я сам хочу в первую очередь сделать более приятный интерфейс. Но сейчас ацкое время для студентов, поэтому пока забросил этот проект на пару-тройку недель.



Офлайн

#5 Май 21, 2010 06:06:50

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Life 2

ZZZ
pasaranax
- Сделать бесконечное поле (циклическое, как в пакмане)
Не думаю, что это хорошая идея.
Почему? Земля то - круглая! ;)



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#6 Май 21, 2010 11:12:33

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Life 2

PooH
Почему? Земля то - круглая! wink
Круглая, а не торообразная. :-)
Мне кажется, что если сделать просто круглое поле, проблема углов решиться и при этом будет меньше геморроя с расчётом действующих сил. KISS, блин!

pasaranax
Первым делом думаю перенести отрисовку графики на OpenGL, вроде в Qt это просто делается.
Если знаешь OpenGL, то да.
Я пока до кода не добрался… Если у тебя всё сделано правильно и отрисовка не зависит от логики я бы подумал о переходе на SDL, чтобы не зависеть от Qt и получить больше возможностей.

pasaranax
На счет смерти, рождения и мутаций, сложно пока себе это представить smile
На самом деле не особо. Посмотри GenePool… Но там код – отвал бошки!

pasaranax
сейчас ацкое время для студентов, поэтому пока забросил этот проект на пару-тройку недель.
Ну вот… Ни PooH'а тебе… :-D



Отредактировано (Май 21, 2010 11:13:09)

Офлайн

#7 Май 21, 2010 11:27:36

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Life 2

ZZZ
Ну вот… Ни PooH'а тебе… :-D
Укушу!!! ;)



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#8 Май 22, 2010 13:03:42

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Life 2

:-P



Офлайн

#9 Май 27, 2010 17:38:15

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Life 2

Глянул код… Критика нужна?

Первое и главное – слишком зависит от Qt. Даже хранилище элементов – QWidget.

1. Сделай хранищище элементов с простым и быстрым доступом к ним – model.
2. Оставь Qt только для отрисовки – view.
3. Сделай класс, рассчитывающий поведение элементов и говорящий view, что положение изменилось – controller.
4. Сдай сессию…



Офлайн

#10 Июнь 2, 2010 15:17:49

Alex2ndr
От:
Зарегистрирован: 2009-12-26
Сообщения: 204
Репутация: +  0  -
Профиль   Отправить e-mail  

Life 2

Возможно я тоже подключусь к разработке. Интересно, блин :)
Тоже посмотрел код и тоже подумал о MVC.
QT я пока не знаю, только GTK. Но не думаю, что это долго изучать. В крайнем случае могу делать логику.

Но конечно все это после сессии. Удачи!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version