Задание 3 Stanford CS 193P Spring 2020. Игра Set.

Решение обязательных и дополнительных пунктов.

Содержание

Цель этого задания состоит в том, чтобы дать вам возможность создать свое первое приложение полностью с «нуля» и самостоятельно. Оно похоже на первые два Задания, которое помогло обрести вам уверенность, но и достаточно отличающееся, чтобы дать вам полную свободу для накопления опыта!

Так как цель этого Задания — создать приложение с «нуля», то не начинайте с кода Задания 2, начинайте с New → Project в Xcode. .

Текст Домашнего Задания 3 на английском языке доступен на  сайте Stanford CS193P (Lecture 6 Assignment 3). На русском языке вы можете посмотреть и скачать Задание 3 здесь.

Вы, конечно, захотите освежить в памяти правила игры Set.

Мое решение Задания 3 находятся на Github  для iOS 14 и Xcode 12.

Пункты 1, 2 и 6 обязательные

1. Реализуйте игру Set в версии соло (для одного игрока).

2. Когда ваша игра запускается в первый раз, карты на короткое время не должны отображаться, но как только они появляются, необходимо немедленно сдать 12 карт, заставляя их «прилетать» из случайных мест за пределами экрана.

6. Пользователи должны иметь возможность выбрать до 3 карт, прикоснувшись к ним, чтобы попытаться создать Set (т. е. 3 совпадающие карты (matching) в соответствии с правилами игры Set). Пользователю должно быть ясно видно, какие карты уже были выбраны.

Читать далее

Задание 6 Stanford CS 193P Fall 2017. Галерея изображений Image Gallery с постоянным хранением (persistent). Решение.

Содержание

Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Programming: Project 6: Persistent Image Gallery″. На русском языке вы можете скачать Задание 6 здесь: «Задание VI: Галерея изображений Image Gallery с постоянным хранением (persistent)»

Для решения Задания 6 необходимо ознакомиться с Лекцией 7, Лекцией 11Лекцией 12 , Лекции 13 и Лекцией 14.

Цель этого Задания 6 — понять  работу FileManager, URL, Codable, UIDocument и UIDocumentBrowserViewController и изучить, как пользоваться iOS API полностью самостоятельно по документации.

Это Задание использует код, который вы создали в Задании 5, но, возможно, вы захотите начать новый Xcode проект “с нуля” (так что вы сможете использовать Document Base App шаблон).

Мое решение обязательных и допонительных пунктов Задания 6 находится на Github  для iOS 11 и на Github для iOS 12:

ImageGallery_6_Requied_OLD — сохранение Модели в файловой системе без UIDocumentBrowserViewController

ImageGallery_6_Requed_Browser— подключение UIDocumentBrowserViewController, но пока присутствует кнопка «Sav

ImageGallery_6_Requed_Browser_No_Save_Button — работает UIDocumentBrowserViewController, но НЕТ кнопки «Save», используется URLCache,

ImageGallery_6_Requed_Browser_No_Save_Button_LocalImage — присутствует UIDocumentBrowserViewController, НЕТ кнопки «Save«, используется URLCache, сохранение изображений, для которых нет URL, производится в локальной файловой системе, документ имеет свой  UTI .imagegallery.

Пункты 1, 2 обязательные

  1. Документы Image Gallery в вашем приложении теперь должны сохраняться постоянно.
  2. Вы можете полностью убрать поддержку таблицы UITableView, добавленную на прошлой неделе.

Приложение Image Gallery — это как раз такое приложение, которое естественно хочется превратить в приложение, основанное на документах, то есть Document based app. Потому что с помощью Image Gallery вы можете создавать тематические живописные Галереи Изображений, и определенно вы захотите их сохранить.

Читать далее

Задание 5 Stanford CS 193P Fall 2017. Галерея изображений Image Gallery. Решение дополнительных пунктов.

Содержание

Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Programming: Project 5: Image Gallery″. На русском языке вы можете скачать Задание 5 здесь:  Задание 5.pdf

Для решения Задания 5 необходимо ознакомиться с Лекцией 7, Лекцией 11Лекцией 12 и началом Лекции 13.

Логически выполнение обязательных пунктов Задания 5 распалось на две части: первая часть ( ей был посвящен пост «Задание 5 Stanford CS 193P Fall 2017. Галерея изображений Image Gallery. Решение обязательных пунктов. Часть 1) обеспечивает работу одной Галереи Изображений Image Gallery и использует исключительно коллекцию Collection View, а вторая часть ( ей был посвящен пост «Задание 5 Stanford CS 193P Fall 2017. Галерея изображений Image Gallery. Решение обязательных пунктов. Часть 2.») обеспечивает работу со списком имен Галерей Изображений с помощью таблицы Table View, которая взаимодействует с коллекцией изображений Collection View.

Этот пост мы посвятим оставшимся дополнительным пунктам (Extra Credit) Задания 5.

Мое решение обязательных и дополнительных пунктов Задания 5 находится на Github для iOS 11 и на Github для iOS 12 в папке ImageGallery_V. В разных папках размещен код для нескольких последовательных этапов выполнения Задания 5:

  1. ImageGalleryOnly — работает только коллекция изображений Сollection View
  2. ImageGalleryRequiedTable — работает только таблица имен Table View
  3. ImageGalleryRequiedTwoSeguesSplit View Controller с двумя Segues для разных ПРОТОТИПОВ
  4. ImageGalleryRequiedGenericSegueSplit View Controller с одним Segue и ручным «переездом»
  5. ImageGalleryRequiedNoSegueSplit View Controller без Segue для iPad (обязательные пункты в наиболее комфортном для пользователя исполнении)
  6. ImageGalleryRequiedNoSegueExtra — ОКОНЧАТЕЛЬНЫЙ ВАРИАНТ Задания 5 с обязательными и дополнительными пунктами.

Пункт 1 дополнительный (Extra Credit)

Позвольте пользователям перетаскивать Drag элементы коллекции Collection View в “мусорный бак” (возможно на навигационной панели вверху), что удалит этот URL из Галереи изображений (Image Gallery).

Идея того, как это можно сделать, заключается в следующем.

Читать далее

Задание 5 Stanford CS 193P Fall 2017. Галерея изображений Image Gallery. Решение обязательных пунктов. Часть 2.

Содержание

В Задании 5 вы должны освоить работу с Table View, Collection View, Scroll View и Text Fields, понять, как работает многопоточность (multithreading) и механизма Drag & Drop

Разработка Задания 5 начинается “с нуля”. Оно не имеет отношения к первым 4-м Заданиям этого семестра.

Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Programming: Project 5: Image Gallery″. На русском языке вы можете скачать Задание 5 здесь: Задание 5.pdf.

Для решения Задания 5 необходимо ознакомиться с Лекцией 7, Лекцией 11Лекцией 12 и началом Лекции 13.

Центральной частью этого Задания 5 является коллекция изображений Collection View, которая моделирует Галерею Изображений Image Gallery. Необходимо обеспечить ее работоспособность, настроить ее параметры для отображения изображений в удобной и визуально привлекательной форме, подключить определенные жесты для операций над ее элементами, а также наделить ее механизмом Drag & Drop, который позволит добавлять изображения из других приложений, например, поисковой системы Google, и избавляться от ненужных элементов, кидая их в «Мусорный контейнер». В приложении предполагается создание целой серии таких тематических Галерей Изображений, каждой из которых будет дано имя, а список имен всех Галерей размещен в таблице Table View, которую тоже можно будет редактировать.

Логически выполнение обязательных пунктов Задания 5 распадается на две части: первая часть ( ей был посвящен пост «Задание 5 Stanford CS 193P Fall 2017. Галерея изображений Image Gallery. Решение обязательных пунктов. Часть 1.») будет обеспечивать работу одной Галереи Изображений Image Gallery и будет использовать исключительно коллекцию Collection View, а вторая часть будет обеспечивать работу со списком имен Галерей Изображений с помощью таблицы Table View, функционирование которой мы отработаем отдельно, а затем подстыкуем к ней коллекцию Collection View, уже настроенную под Галерею изображений Image Gallery.

Вторая часть будет представлена в этом посте.

Мое решение обязательных пунктов Задания 5 находится на Github для iOS 11 и на Github для iOS 12  в папке ImageGallery_V. Задание очень большое и сложное, поэтому я разместила код для нескольких последовательных этапов его выполнения, что позволит вам проверять ваш код на разных стадиях выполнения Задания 5:

  1. ImageGalleryOnly — работает только коллекция изображений Сollection View
  2. ImageGalleryRequiedTable — работает только таблица имен Table View
  3. ImageGalleryRequiedTwoSeguesSplit View Controller с двумя Segues для разных ПРОТОТИПОВ
  4. ImageGalleryRequiedGenericSegueSplit View Controller с одним Segue и ручным «переездом»
  5. ImageGalleryRequiedNoSegueSplit View Controller без Segue для iPad (наиболее комфортный для пользователя), это ОКОНЧАТЕЛЬНЫЙ ВАРИАНТ выполнения обязательных пунктов Задания 5.

Читать далее

Задание 4 Stanford CS 193P Fall 2017. Анимационная игра Set. Решение обязательных пунктов 1-6.

Содержание

В этом Задании вы добавите анимацию в вашу игру Set и скомбинируете ваши 3 первых Задания в одно.
Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Programming: Project 4: Animayed Set″. На русском языке вы можете скачать Задание 4 здесь:

Задание 4 Игра Графический Set iOS 11.pdf

 Вам необходима реализация Заданий 1- 3. Начинаем выполнять с кода Задания 3.

Для решения Задания 4 необходимо ознакомиться с Лекциями 7 — 10.

Мое решение Задания 4 состоит из двух приложений: анимационной игры Set БЕЗ использования делегата UIDinamicAnimationDelegate динамического аниматора, которая находится в папке Set IV NoExtra, и  анимационной игры Set с использованием делегата UIDinamicAnimationDelegate, которая находится в папке Set IV NoExtra Stasis.

Все это находится на Github для iOS 11 и на Github для iOS 12.

Пункты 1, 2 и 3 обязательные

1. Ваше приложение должно продолжать играть в соло версию игры Set, как это требовалось в Задании 3 (с особенностями, указанными ниже).

2. Вы должны анимировать следующие действия в игре Set:

  • Реорганизация карт. Если карты добавляются или исчезают из игры, то карты должны перемещаться плавно ( не прыгать мгновенно) на их новые позиции.
  • Сдача новых карт. Это включает как сдачу начальных 12 карт, так и сдачу 3-х новых карт в любое время. Карты должны “лететь” через экран из некоторой “колоды”, расположенной где-то на экране. Внешний вид колоды полностью отдается на ваше усмотрение. Никакие две карты не должны сдаваться одновременно, хотя их анимации могут немного перекрываться.
  • Обнаружение совпадения. Все «совпавшие» карты должны “улетать”  с тех мест, где они находились одновременно и начать отскакивать от краев экрана в течение пары секунд прежде, чем собраться в некоторую “стопку сбрасывания”, где-то расположенную на экране. Внешний вид “стопки сбрасывания” полностью отдается на ваше усмотрение.
  • Переворот карт. Карты сдаются “лицевой” стороной вниз до тех пор, пока не достигнут своего местоположения, затем они должны быть перевернуты для проявления содержимого карты игры Set. Для совпавших» карт после того, как они «улетели» в  “стопку сбрасывания”, по крайней мере верхняя карта в этой “стопке сбрасывания” должна лежать “лицевой” стороной вниз.

3. Ваша реализация анимации должна использовать UIViewPropertyAnimator, UIDynamicAnimator и class метод transition(with:…) класса UIView. Возможно, вам понадобиться таймер Timer, но это не строго обязательно.

Читать далее

Задание 3 Stanford CS 193P Fall 2017. Графическая игра Set. Решение обязательных пунктов.

Содержание

Цель этого задания — в получении опыта создания своих собственных пользовательских (custom) view, включая управление пользовательскими жестами.
Начните свой код с Задания 2.
Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Programming: Project 3:Graphical Set″. На русском языке вы можете скачать Задание 3 здесь:

Задание 3 Игра Графический Set iOS 11.pdf

Начинаем выполнять с кода Задания 2.

Правила игры Set:

SET INSTRUCTIONS - RUSSIAN.pdf

Для решения Задания 3 необходимо ознакомиться с Лекциями 6 — 8.

Мое решение Задания 3 состоит из основного приложения Set III NoExtra и вспомогательного SetCard для отдельной карты, они находятся на Github  для iOS 11 и на Github для iOS 12.

Пункты 1, 2, 3 и 4 обязательные

1. Ваше приложение должно продолжать играть в соло версию игры Set, как это требовалось в Задании 2.

2. В этой версии не нужно ограничивать пользовательский интерфейс (UI) фиксированным числом карт. Вы всегда должны быть готовы к тому, что могут быть сданы еще 3 карты с помощью кнопки “Deal 3 More Cards”. Если карт в колоде больше не осталось, то кнопка “Deal 3 More Cards” исчезает.

3. Не “отводите заранее” место для максимально возможного количества карт — 81. В любое заданное время карты должны иметь настолько возможно большой размер, насколько это позволит отведенное для них место на экране и количество карт, находящихся в игре. Другими словами, когда игра начинается (только с 12 -ю картами), карты будут реально большими, но по мере все большего количества карт на экране (благодаря кнопке “Deal 3 More Cards”), они будут становиться все меньше и меньше для того, чтобы соответствовать размеру игрового поля.

4. В конце игры, когда обнаружены 3 совпавшие карты и больше нет Set карт в колоде, совпавшие карты должны быть полностью убраны и оставшиеся карты должны “пере-формироваться”, чтобы использовать освободившиеся покинувшими игру картами пространство экрана с экрана (то есть стать опять немного больше, если это позволит размер игровой области на экране).

Читать далее

С вами играет iPhone. Задание 2 Stanford CS 193P Fall 2017. Игра Set. Решение дополнительных пунктов.

Это продолжение решения Задания 2. Здесь мы рассмотрим решение некоторых дополнительных пунктов.

Решение обязательных пунктов Задания 2 и дополнительного пункта 3 представлены в посте «Задание 2 Stanford CS 193P Fall 2017. Игра Set. Решение обязательных пунктов.».

Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Programming: Project 2: Set″. На русском языке вы можете скачать текст Задания 2 здесь:

Задание 2 Игра Set iOS 11.pdf

Для решения Задания 2 необходимо ознакомиться с Лекциями 1 — 6.
Решение обязательных пунктов Задания 2 находится на Github для iOS 11 и на Github для iOS 12 в папке «Set II No Extra«.
Решение обязательных и дополнительных пунктов Задания 2 находится на Github для iOS 11 и на Github для iOS 12 в папке «Set II With Extra«.

Мы будем рассматривать выполнение дополнительных пунктов немного не в том порядке, как они представлены в тексте Задания 2, так как они частично уже описаны либо в решениях Задания № 1, либо в посте, посвященном выполнению обязательных пунктов Задания № 2. Мы сосредоточимся на выполнении самого интересного 4-го дополнительного пункта этого Задания, в котором необходимо предоставить пользователю играть напару с iPhone.

Читать далее

Задание 2 Stanford CS 193P Fall 2017. Игра Set. Решение обязательных пунктов.

Содержание

Цель задания состоит в том, чтобы дать вам возможность создать свое первое приложение полностью с “нуля” и самостоятельно. Оно достаточно похоже на Задание 1, которое помогло обрести вам уверенность, но достаточно отличающееся, чтобы дать вам полную свободу для накопления опыта!

Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Programming: Project 2: Set″. На русском языке вы можете прочитать текст Задания 2 здесь:, а скачать здесь:

Задание 2 Игра Set iOS 11.pdf

Начинаем выполнять Задание 2 c NewProject в Xcode.

Правила игры Set:

SET INSTRUCTIONS - RUSSIAN.pdf

Для решения Задания 2 необходимо ознакомиться с Лекциями 1 — 6.

Решение данного Задания 2 находится на Github для iOS 11 и на Github для iOS 12.

ОБСУЖДЕНИЕ МАТЕРИАЛОВ курса «Разработка iOS приложений с Swift» проводится на private форуме на Piazza. Делиться своими решениями и задавать вопросы можно там.
Для регистрации вам необходимо пройти по ссылке:
http://piazza.com/moscow_physical_engineering_institute_bestkora.com/spring2017/mf141
и набрать private  код mf141.

Пункты 1 и 2 обязательные

1. Реализуйте игру Set в версии соло (для одного игрока).

2. Разместите на экране по крайней мере 24 карты игры Set. В Set все карты всегда лежат “лицом” вверх.

 

Читать далее

Задание 1 Stanford CS 193P Fall 2017. Игра Концентрация. Решение.

Содержание

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

Текст Домашнего задания на английском языке доступен на  iTunes в пункте “Programming: Project 1: Concentration″. На русском языке вы можете прочитать текст Задания 1 здесь:, а скачать здесь:

Задание 1 Игра Концентрация iOS 11.pdf

Начинаем выполнять Задание 1 с кода, полученного в конце Лекции 2. Профессор настоятельно рекомендует не копировать код первых 2-х Лекций, а непосредственно печатать его в Xcode, так как это даст хороший опыт освоения среды разработки Xcode 9.

Читать далее

Руководство по проектированию Swift API (Swift API design guidelines)

Если вы разрабатываете приложения на Swift, в том числе и приложения, связанные с выполнением Заданий стэнфордского курса, вам необходимо знать принципы проектирования API в Swift, которые отличаются от принципов проектирования API в Objective-C и других языках.  И это зафиксировано в руководстве по проектированию Swift API «API Design Guidelines«, выпущенному Apple. Кулиничев Евгений  любезно предоставил перевод этого руководства на русский язык для размещения на этом сайте. Вы можете посмотреть его в Google Doc  или  скачать в PDF формате для изучения в offline:

Swift API design guidelines.pdf

Но прежде, чем вы приступите к его изучению, необходимо дать вам некоторые фундаментальные идеи, которые были заложены в этот документ:

  • Обеспечение понятности кода в точке его использования
  • Понятность кода более важна, чем его краткость
  • Создание самодокументируемого API

Код пишется один раз, а читается многократно. Очень важно, чтобы Swift код был читаемым и понятным в точке использования. Хотя кажется, что это очень знакомое требование, оно отличается от правил проектирования API в Objective-C. В Swift мы не хотим унаследовать многословный стиль Objective-C, в котором вся необходимая информация передается через хорошо сконструированный API, и редко бывает хорошо читабельной в точке использования. В Swift недостаточно, чтобы API был хорошо читабельным в точке определения; он должен быть читабельным и иметь смысл в различных точках применения. И вы увидите в руководстве, как это достигается. Читать далее