Форум сайта python.su
Вечер добрый. Сразу приношу извинения за то если код python будет оформлен не правильно, я с телефона, не удобно.
Изучая python примерно год. Не профессионально, но разбираюсь.
Начал писать не большую графическую программу. Но столкнулся с отсутствием опыта. Много думал, тестировал, ну в общем без успешно. Что я хочу создать. К примеру пишу функцию которая выводит на экран точку, которая движется по экрану, отбиваясь от стен. С этим проблем нет. Но вот я хочу добавить еще 10 точек, которые буду двигаться и просчитываться. Но писать, создавать для каждой координаты, расчеты просто невыносимо. Можно ли написать такой движок, или функцию которая будет сама расчитывать для каждой точки, в зависимости от того какое количество точек я указал. Поэтому я не создавал глобальных переменных,не вносил их в расчет в цикл while, а хочу решить это с помощью локальных, в функции, правда не знаю как. Жду помощи..Напишу код.
import appuifw, e32
appuifw.app.body=canvas=appuifw.Canvas()
sleep=e32.ao_sleep
process=1
def exit():
global process
process=0
appuifw.app.exit_key_handler=exit
def drawpoint(x,y, color, size):
canvas.point((x, y), color, width=size)
while process:
canvas.clear()
sleep(0.1)
drawpoint(50, 50,0x, 10)
Отредактировано (Сен. 16, 2011 20:21:17)
Офлайн
Одна из возможностей - пойти по пути создания объектов
class Tpoint(object):
def __init__(self):
self.x=random()
self.y=random()
def move(self):
self.x+=1
self.y+=1
self.normalize()
pointarray=[Tpoint() for i in range(10)]
while process:
canvas.clear()
sleep(0.1)
for point in pointarray:
drawpoint(point.x, point.y, 10)
Отредактировано (Сен. 16, 2011 21:01:27)
Офлайн
ни чего не происходит. Не смотря на то что подстроил код
import appuifw, e32,random, key_codes
appuifw.app.body=canvas=appuifw.Canvas()
process=1
sleep=e32.ao_sleep
def exit():
global process
process=0
appuifw.app.exit_key_handler=exit
appuifw.app.screen="full"
class Tpoint(object):
def __init__(self):
self.x=random.random()
self.y=random.random()
def movie(self):
self.x+=5
self.y+=5
self.normalize()
point=[Tpoint() for i in range(10)]
while process:
canvas.clear()
sleep(0.1)
for p in point:
canvas.point((p.x, p.y), 0xff, 5)
Офлайн
Вы Tpoint.movie не вызываете
Офлайн
а как оно у вас работает? Вы self.normalize() не определили. Я имел ввиду то что в нем вы точки будете от стен отражать.
Офлайн
можете привести пример на моем коде? Потому что я уже запутался:(
Офлайн
Ну школьная задачка же )
class Point(object):
def __init__(self, maxx, maxy, minx=0, miny=0, dx=5, dy=5):
self._x = random.randrange(minx, maxx)
self._y = random.randrange(miny, maxy)
self._dx = dx
self._dy = dy
self._rect = (minx, miny, maxx, maxy)
def normalize(self):
minx, miny, maxx, maxy = self._rect
if self._x >= maxx:
self._x = maxx - 1
self._dx = - self._dx
elif self._x <= minx:
self._x = minx + 1
self._dx = - self._dx
if self._y >= maxy:
self._y = maxy - 1
self._dy = - self._dy
elif self._y <= miny:
self._y = miny + 1
self._dy = - self._dy
def move(self):
self._x += self._dx
self._y += self._dy
self.normalize()
def coords(self):
return (self._x, self._y)
point=[Tpoint(размер_по_X, размер_по_Y) for i in range(10)]
while process:
canvas.clear()
sleep(0.1)
for p in point:
p.move()
canvas.point(p.coords(), 0xff, 5)
Офлайн
шикарно. А что в цикл писать то?:)
Офлайн
Там уже все написанно, вам только нужно подставить размер_по_X и размер_по_Y вашего экрана или окна
Офлайн
s0rgЭхей, ну спасибо. Буду разЖОвывать.
Там уже все написанно, вам только нужно подставить размер_по_X и размер_по_Y вашего экрана или окна
Офлайн