Уведомления

Группа в Telegram: присоединиться | Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Май 18, 2017 21:00:50

@yuliya
Зарегистрирован: 2017-05-18
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Графическое приложение.

Помогите с написанием кода к задаче.Вообще не понимаю как делать,преподаватель задал в университете.вот условия:
Гусеница, состоящая из 7 маленьких кружков, ползет по горизонтальной плоскости, на которой лежат препятствия в виде прямоугольников. Гусеница должна перелезать через них. (Подсказка: движение моделировать добавлением кружка в головную часть и удалением кружка из хвостовой части)

начало кода у меня такое.
from graphics import *
import math
from random import randrange

class partCPillar():
def __init__(self,win,size,pc,r,color):
self.xc=pc.getX()
self.yc=pc.getY()
self.r = r
self.krCircle(Point(self.xc,self.yc),r))
self.kr.setFill(color)
self.kr.draw(win)

Офлайн

#2 Май 19, 2017 12:55:22

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 435
Репутация: +  91  -
Профиль   Отправить e-mail  

Графическое приложение.

ну собственно для примера вот http://pythonicway.com/python-games/python-arcade/18-python-snake
по крайней мере оттуда вы можете посмтреть как сделать класс змейки. для вашей задачи вам нужно будет немного переделатьи немного упростить, так как у вас размер гусеницы фиксирваный.
А вообще для вашего конкретного случая я бы сделал проще, поскольку движение змейки дискретное( моделируется добавлением кружка в головную часть и удалением кружка из хвостовой части), то создал бы сначала модель: матрицу и заполнил бы ее нулями(прозрачный блок) и единицами(непрозрачный блок) , сегменты гусеницы пускай будут востьмерки. Сама гусеница это список из 7-ми элементов котороые содержат координаты каждого сегмента. Голова гусеницы пускай будет последний элемент списка. пемещение осуществляеться удалением координат первого элемента, и дописыванием элемента с новыми координатами(с соовтетвующими записями в матрицу). Соответвенно если гусеница ползет слева направо, то сначала проверять пустой ли квадрат под головой гусеницы, потом перед, и потом над, и соответвенно, перемещаем в первый обнаруженый пустой квадрат.
Потом на основании этого к матрице прикрутить отрисовку картинки, заполнять канвас белум квадратом если 0, черным если 1, или черным кругом на белом фоне если 8, после начального заполнения канваса, у вас за тик будет обновляться по 2 квадрата…

Офлайн

#3 Май 20, 2017 01:34:59

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 5261
Репутация: +  484  -
Профиль   Отправить e-mail  

Графическое приложение.

Смахивает это на “Путника” из “Программирования для математиков”, только тут шлейф ещё. Там у него были определены предписания (методы).

Система предписаний в компактной форме:
1. начать работу
2. впереди/справа/слева свободно : да/нет
3. впереди/справа/слева занято : да/нет
4. сделать шаг
5. шагать до упора
6. повернуться направо/налево
7. повернуться на север/юг/запад/восток
8. кончить работу
"Путник"
Луноход, который находится в неизвестной местности.
Местность называется квадрантом, который по краю обнесён сплошной стеной. В квадранте могут находиться препятствия.

Система предписаний в компактной форме:
1. начать работу
2. впереди/справа/слева свободно : да/нет
3. впереди/справа/слева занято : да/нет
4. сделать шаг
5. шагать до упора
6. повернуться направо/налево
7. повернуться на север/юг/запад/восток
8. кончить работу

Дополнительные сведения:
1. начать работу
Путник оказывается в северо-западной клетке лицом на восток
4. сделать шаг
приводит к отказу, если впереди занято
5. шагать до упора
не приводит к отказу, если впереди занято
Тут как бы надо проверять, есть ли препятствие. Если препятствия нет, то надо делать шаг всей гусеницей. Если препятствие есть, то надо обогнуть препятствие. И вот эта процедура “обогнуть препятствие” - это такая функция, управляющая исполнителем (не его метод, а отдельная функция, которая им управляет). Потому что препятствия можно разные придумать, поэтому для каждого вида препятствия будет своя собственная процедура огибания. Но исполнитель при этом должен один и тот же использоваться, поэтому методы его должны быть очень простыми (атомарными) и подходящими под любую ситуацию. А все сложные действия описываются в таких внешних процедурах.

Так что хоть гусеница и на линии, по которой можно ползать только налево и направо, в действительности, для огибания препятствия ей понадобится ползти вверх на одну клетку, потом ползти по препятствию и потом ползти вниз на одну клетку. То есть мы уже получаем, что гусеница не по прямой ползёт, а по плоскости. Соответственно, и координаты у каждого её сегмента будут двумерными. Так что это вполне тот же самый Путник, только у него надо шлейф сохранять. Видимо, даже надо рассматривать всю гусеницу в виде множества путников, движущихся друг за другом. Тогда гусеница может заползти на два разных препятствия одновременно и это будет нормально смотреться, как у неё в правой части огибается одно препятствие, а в левой части огибается второе препятствие.



Отредактировано py.user.next (Май 20, 2017 01:37:11)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version