Latest posts on Графическое приложение. topichttp://python.su/forum/topic/32823/2017-05-20T01:34:59+03:00Общий :: GUI :: Графическое приложение.
2017-05-20T01:34:59+03:00py.user.next179336Смахивает это на “Путника” из “Программирования для математиков”, только тут шлейф ещё. Там у него были определены предписания (методы).<br/><div class="code"><pre>Система предписаний в компактной форме:<br/>1. начать работу<br/>2. впереди/справа/слева свободно : да/нет<br/>3. впереди/справа/слева занято : да/нет<br/>4. сделать шаг<br/>5. шагать до упора<br/>6. повернуться направо/налево<br/>7. повернуться на север/юг/запад/восток<br/>8. кончить работу</pre></div><div class="code"><pre>"Путник"<br/>Луноход, который находится в неизвестной местности.<br/>Местность называется квадрантом, который по краю обнесён сплошной стеной. В квадранте могут находиться препятствия.<br/><br/>Система предписаний в компактной форме:<br/>1. начать работу<br/>2. впереди/справа/слева свободно : да/нет<br/>3. впереди/справа/слева занято : да/нет<br/>4. сделать шаг<br/>5. шагать до упора<br/>6. повернуться направо/налево<br/>7. повернуться на север/юг/запад/восток<br/>8. кончить работу<br/><br/>Дополнительные сведения:<br/>1. начать работу<br/>Путник оказывается в северо-западной клетке лицом на восток<br/>4. сделать шаг<br/>приводит к отказу, если впереди занято<br/>5. шагать до упора<br/>не приводит к отказу, если впереди занято</pre></div>Тут как бы надо проверять, есть ли препятствие. Если препятствия нет, то надо делать шаг всей гусеницей. Если препятствие есть, то надо обогнуть препятствие. И вот эта процедура “обогнуть препятствие” - это такая функция, управляющая исполнителем (не его метод, а отдельная функция, которая им управляет). Потому что препятствия можно разные придумать, поэтому для каждого вида препятствия будет своя собственная процедура огибания. Но исполнитель при этом должен один и тот же использоваться, поэтому методы его должны быть очень простыми (атомарными) и подходящими под любую ситуацию. А все сложные действия описываются в таких внешних процедурах.<br/><br/>Так что хоть гусеница и на линии, по которой можно ползать только налево и направо, в действительности, для огибания препятствия ей понадобится ползти вверх на одну клетку, потом ползти по препятствию и потом ползти вниз на одну клетку. То есть мы уже получаем, что гусеница не по прямой ползёт, а по плоскости. Соответственно, и координаты у каждого её сегмента будут двумерными. Так что это вполне тот же самый Путник, только у него надо шлейф сохранять. Видимо, даже надо рассматривать всю гусеницу в виде множества путников, движущихся друг за другом. Тогда гусеница может заползти на два разных препятствия одновременно и это будет нормально смотреться, как у неё в правой части огибается одно препятствие, а в левой части огибается второе препятствие.
Общий :: GUI :: Графическое приложение.
2017-05-19T12:55:22+03:00PEHDOM179325ну собственно для примера вот <a href="http://pythonicway.com/python-games/python-arcade/18-python-snake">http://pythonicway.com/python-games/python-arcade/18-python-snake</a><br/>по крайней мере оттуда вы можете посмтреть как сделать класс змейки. для вашей задачи вам нужно будет немного переделатьи немного упростить, так как у вас размер гусеницы фиксирваный.<br/>А вообще для вашего конкретного случая я бы сделал проще, поскольку движение змейки дискретное( моделируется добавлением кружка в головную часть и удалением кружка из хвостовой части), то создал бы сначала модель: матрицу и заполнил бы ее нулями(прозрачный блок) и единицами(непрозрачный блок) , сегменты гусеницы пускай будут востьмерки. Сама гусеница это список из 7-ми элементов котороые содержат координаты каждого сегмента. Голова гусеницы пускай будет последний элемент списка. пемещение осуществляеться удалением координат первого элемента, и дописыванием элемента с новыми координатами(с соовтетвующими записями в матрицу). Соответвенно если гусеница ползет слева направо, то сначала проверять пустой ли квадрат под головой гусеницы, потом перед, и потом над, и соответвенно, перемещаем в первый обнаруженый пустой квадрат.<br/>Потом на основании этого к матрице прикрутить отрисовку картинки, заполнять канвас белум квадратом если 0, черным если 1, или черным кругом на белом фоне если 8, после начального заполнения канваса, у вас за тик будет обновляться по 2 квадрата…
Общий :: GUI :: Графическое приложение.
2017-05-18T21:00:50+03:00@yuliya179299Помогите с написанием кода к задаче.Вообще не понимаю как делать,преподаватель задал в университете.вот условия:<br/>Гусеница, состоящая из 7 маленьких кружков, ползет по горизонтальной плоскости, на которой лежат препятствия в виде прямоугольников. Гусеница должна перелезать через них. (Подсказка: движение моделировать добавлением кружка в головную часть и удалением кружка из хвостовой части)<br/><br/>начало кода у меня такое.<br/>from graphics import *<br/>import math<br/>from random import randrange<br/><br/>class partCPillar():<br/> def __init__(self,win,size,pc,r,color):<br/> self.xc=pc.getX()<br/> self.yc=pc.getY()<br/> self.r = r <br/> self.kr<img src="/static/djangobb_forum/img/smilies/sad.png" />Circle(Point(self.xc,self.yc),r))<br/> self.kr.setFill(color)<br/> self.kr.draw(win)