Новое в программировании, вопрос об упражнении в прологе HTDP - PullRequest
0 голосов
/ 05 ноября 2018

Это может быть глупый вопрос, но я совершенно новичок в программировании. Я ближе к нижней части Пролога в разделе «Как разрабатывать программы» (2-е изд), и есть 4 изменения, которые вам необходимо внести в программу «Rocket Landing» в DrRacket.

Я застрял на 4-й, а именно на жирной части:

Как бы вы изменили программу так, чтобы ракета приземлилась на плоскую скалу, которая на 10 пикселей выше нижней части сцены? Не забудьте сменить обстановку тоже.

; constants
(define WIDTH 200)
(define HEIGHT 400)
(define SCENE-CENTER (/ WIDTH 2))
(define MTSCN (empty-scene WIDTH HEIGHT "blue"))
(define ROCKET (overlay (circle 10 "solid" "green")
                    (rectangle 40 4 "solid" "green")))
(define ROCKET-CENTER-TO-TOP
  (- (- HEIGHT 10) (/ (image-height ROCKET)2)))

;functions
(define (picture-of-rocket.v2 h)
  (cond
    [(<= h ROCKET-CENTER-TO-TOP)
     (place-image ROCKET SCENE-CENTER h MTSCN)]
    [(> h ROCKET-CENTER-TO-TOP)
     (place-image ROCKET SCENE-CENTER ROCKET-CENTER-TO-TOP MTSCN)]))

(animate picture-of-rocket.v2)

Моя ракета (нло) выполняет первую часть, останавливаясь на 10 пикселей снизу, но я не уверен, как можно нарисовать каменную глыбу внизу с помощью команд, которые я выучил до сих пор. Должен ли я (наложить) прямоугольник размером 10 пикселей внизу? Или автор просто подразумевает изменение фона сцены на серый?

1 Ответ

0 голосов
/ 05 ноября 2018

Хороший вопрос! Я думаю, что в этом случае нет правильного ответа. На самом деле, я думаю, что именно в этом и заключается цель упражнения: дать вам задачу, которая требует (очень небольшого) творческого подхода, без четкого изложения того, что вы должны делать. HtDP признает, что программирование требует сочетания структурированного, принципиального процесса и открытого критического мышления, а некоторые из его вопросов являются открытыми по замыслу. Это не столько для проверки ваших творческих способностей, сколько для того, чтобы убедиться, что вы все еще можете применить то, что вы узнали, с отключенными тренировочными колесами.

Ваша первая интуиция - добавить прямоугольник внизу - хороша. Опять же, нет правильного ответа, поэтому, если он работает, пока все в порядке. Цель состоит в том, чтобы заставить вас поиграть с тем набором инструментов, который был вам предоставлен. Что касается того, что значит «изменить обстановку», я интерпретирую это как буквально просьбу украсить сцену так, как вы считаете нужным.

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

(Кстати, это один из лучших вопросов о переполнении стека по всем вопросам, связанным с HtDP, которые я видел в течение долгого времени, поэтому спасибо вам за это. Большинство из них - это не более чем завуалированные запросы студентов, просящих люди делают за них домашнее задание.)

...