C# обучение для чайников

Формула программиста

основатель — Волосатов Евгений Витольдович

Клуб формулистов - Ежемесячная подписка

Вступление в Клуб Формулистов на выгодных условиях для НОВЫХ участников.

После взноса  999  499 руб. вы получите подписку
в Клуб Формулистов на 30 дней и 256 байт для быстрого старта.
Байты используются для открытия более одного урока в день, по 50 байт за урок.

Стоимость 1 дня за первый месяц: всего 16 рублей.

Первый взнос - 499 руб./30 дней.

Через 30 дней будет списано 3,000 2,400 руб.
за продление подписки в Клуб на 30 дней + подарок 512 байт.

Так будет продолжаться каждые 30 дней, пока вы не отмените подписку.
Средства будет автоматически считываться с вашей карты.
Вы в любой момент сможете отказаться от продления Клуба.

Только ДО КОНЦА НЕДЕЛИ -
-50% скидка на первый взнос, всего 499 (вместо 999) рублей!
-20% скидка на ЕЖЕМЕСЯЧНЫЙ платёж!
Всего 2400 руб/месяц (вместо 3000 руб/месяц), или 80 руб./день - цена чашки кофе.


Стоимость 1 дня: 80 руб.

Хочу вступить!

Также есть другие варианты оплаты участия в КФ:

Билет в клуб формулистов на ...
30+ дней | 60 дней | 150 дней | 380 дней | 1000 дней

Внимание!
Стоимость участия в Клубе формулистов увеличивается 1 числа каждого месяца на 100 рублей.
При оформления подписки стоимость остаётся постоянной, пока подписка не будет отменена.







Первый взнос - 499 руб./30 дней + 500 байт.
Последующие взносы - 3,000 2400 руб./месяц + 512 байт.



Список уроков | фото | видео

# Название видеоурока Видео / Тесты Решило Рейтинг Доступ
1 FREE Легендарная игра 00:02:13
1 тест
109 чел. ★ 4.8 Done
  Мы начинаем создание легендарной игровой программы
"Сапёр" на языке программирования Java.

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 12 мин. [Показать отчёт]
Научился: Он сказал поехали! 
2 FREE Простое окно 00:03:02
96 чел. ★ 4.9 Done
  На этом уроке мы начинаем новый проект
и создадим JFrame приложение.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 36 мин. [Показать отчёт]
Научился: psvm + Enter = public static void Main(String[] args) удобно-с!  
3 Закрытие на выходе 00:03:00
91 чел. ★ 4.9 Done
  На этом уроке мы настроим JFrame приложения.
Для этого пропишем необходимые параметры.

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 16 мин. [Показать отчёт]
Научился: Параметризация формы в Java осуществляется через код, в то время как VisualStudio предлагает userFrienfly интерфейс с обилием кнопок и драг-н-дропов. 
4 Полёт над классом 00:03:53
89 чел. ★ 4.8 Done
  На этом слайде мы обсудим все поля и методы основного класса нашей запускаемой игры JavaSweeper, который наследуется от JFrame
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 27 мин. [Показать отчёт]
Научился: Класс JavaSweeper: JPanel panel - поле, на котором рисуется и выполняется игра, JLabel label - ярлык оповещения игрока о новом статусе игры, Game game - контроллер игры, нажатия клавиш мыши, статусы игры, кол-во бомб, флагов, Константы. final int IMAGE_SIZE - размер игрового поля, final int ROWS - количество строк, final int COLS - количество столбцов, final int BOMBS - количество бомб. ==================== stati void main(String[] args) - точка входа в программу, JavaSweeper() - конструктор, инициализирующий игру, void initLabel() - метод инициализации ярлыка, void initPanel() - метод инициализации панели с установкой размеров, регистрации адаптера мыши, создаст компонент, рисующий интерфейс, void initFrame() - первичная инициализация, void setImages() - установка картинок на панель, Image getImage (String name) - вспомогательная функция загружающая картинку по имени файла и представляющая изображение на форме игры (самый любопытный метод, ибо в нем предполагается передача параметров), String getMessage() - запись сообщения пользователю в лейбл(ярлык) о статусе игры, 
5 Пустая панель 00:02:33
88 чел. ★ 4.9 Done
  На этом слайде мы добавим на нашу форму панель, установим ее размер и разместим ее по центру экрана
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 19 мин. [Показать отчёт]
Научился: Метод pack() устанавливает такой минимальный размер контейнера, который достаточен для отображения всех компонентов.  
6 Раздельная инициализация 00:02:23
88 чел. ★ 4.9 Done
  На этом слайде мы займемся рефакторингом. Мы не будем добавлять новой функциональности, а просто красиво оформим то, что уже есть.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 15 мин. [Показать отчёт]
Научился: Впервые осознанно выполнил рефакторинг в Java. Новорожденный котенок приоткрывает глаза. Впечатления эти же.  
7 Метод рисования 00:01:59
88 чел. ★ 4.9 Done
  На этом слайде мы наконец-то начнем рисовать. Создадим Paint-компонент для отображения рисунков на нашей панели и на форме.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 17 мин. [Показать отчёт]
Научился: @Override - аннотация-маркер, которая может применяться только к методам. Метод, аннотированный как @Override, должен переопределять метод супер класса. @Override — проверяет, переопределён ли метод. Вызывает ошибку компиляции / интерпретации, если метод не найден в родительском классе или интерфейсе. 
Сложности: В случае отсутствия данной аннотации и не совпадении сигнатур (в результате ошибки) с методом, который мы собирались переопределять - случится страшное - очень трудноуловимая ошибка, когда вы думаете, что должно бы переопределяться, а по факту имеете отдельный независимый метод, который скорее всего вообще не выполняется. При этом компилятор считает, что с его точки зрения все в порядке - хотите собственный метод в классе-наследнике - нет проблем. И молчит. 
8 Импорт картинок 00:01:22
86 чел. ★ 4.9 Done
  На этом слайде мы добавим в наш проект картинки, которые потом будем показывать на панели во время игры.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 11 мин. [Показать отчёт]
Научился: Добавили ресурсы методом драг-н-дроп. 
9 Загрузка и отображение 00:02:13
86 чел. ★ 4.9 Done
  На этом слайде мы выведем картинку на панель
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 48 мин. [Показать отчёт]
Научился: ImageIcon icon = new ImageIcon - создание экземпляра класса return icon.getImage - выцарапывание этого экземпляра из класса observer: this - следить за актуальностью объекта. Наблюдатель — это поведенческий паттерн, который позволяет объектам оповещать другие объекты об изменениях своего состояния.  
Сложности: В каких случаях используется Наблюдатель? Если один объект должен передавать сообщения другим объектам, но при этом он не может или не должен знать об их внутреннем устройстве; В случае если при изменении одного объекта необходимо изменять другие объекты; Для предотвращения сильных связей между объектами системы; Для наблюдения за состоянием определенных объектов системы; 
10 Угловая бомба 00:01:31
85 чел. ★ 4.9 Done
  На этом слайде мы добавим еще пару картинок на нашу форму.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 18 мин. [Показать отчёт]
Научился: Shift+F10 - старт приложения private Image getImage ()//возвращает картинку указанную в теле метода private Image getImage (String name)//возвращает картинку по принимаемому параметру name Было жестко привязано ImageIcon icon = new ImageIcon("res/img/bomb.png"); Стало гибко открыто через name так ImageIcon icon = new ImageIcon("res/img/" + name + ".png"); 
11 Константные размеры 00:02:42
85 чел. ★ 4.9 Done
  На этом слайде мы добавим константы и немножко порефакторим.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 22 мин. [Показать отчёт]
Научился: private + final = “Нельзя изменить” final - говорит о том, что значение поля можно установить только однажды.  
Сложности: Совокупность модификаторов private final для поля накладывает запрет на изменение (определить данное поле возможно либо в конструкторе, либо в месте объявления за счет final) и видимость данного поля ограничивается методами данного класса (за счет private). 
12 Перечисление кубиков 00:03:42
85 чел. ★ 4.9 Done
  На этом слайде мы создадим перечисление Box
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 16 мин. [Показать отчёт]
Научился: Тип enum — это тип, поля которого состоят из набора некоторых констант. Простой пример — стороны света, такой объект будет содержать 4 константы: NORTH, SOUTH, EAST, и WEST. Переменные объявлены большими буквами, потому что это константы. 
Сложности: Enum тип необходимо использовать, если нужно определить некоторое количество констант, значения которых известны заранее. 
13 Первый цикл 00:01:59
85 чел. ★ 4.9 Done
  На этом слайде мы выведем все картинки на форме
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 20 мин. [Показать отчёт]
Научился: С помощью метода ordinal() получают значение, которое указывает позицию константы в списке констант перечисления (порядковое значение или ordinal value). Порядковые значения начинаются с нуля. 
Сложности: Метод ordinal() возвращает значение int, определяющее порядок объявления экземпляров перечисления начиная с нуля.  
14 Картинка в кубике 00:03:45
84 чел. ★ 4.9 Done
  На этом слайде мы поместим картинку в каждый экземпляр перечисления Box.

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 28 мин. [Показать отчёт]
Научился: Заменили передачу объектов через Image передачей через Object, расширив тем самым себе свободу выбора. 
Сложности: В Java есть специальный суперкласс Object и все классы являются его подклассами. Поэтому ссылочная переменная класса Object может ссылаться на объект любого другого класса. Так как массивы являются тоже классами, то переменная класса Object может ссылаться и на любой массив. 
15 Источник ресурсов 00:01:53
79 чел. ★ 4.9 Done
  На этом слайде мы сделаем загрузку картинок через систему ресурсов в языке Java
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 7 мин. [Показать отчёт]
Научился: ImageIcon icon = new ImageIcon(getClass().getResource(filename)); - Находит ресурс с заданным именем. Сей метод делегирует вызов его загрузчику классов после внесения этих изменений в имя ресурса: если имя ресурса начинается с "/", оно не изменяется; в противном случае имя пакета добавляется к имени ресурса после преобразования ".". на "/". Если этот объект был загружен загрузчиком загрузки, вызов делегируется ClassLoader.getSystemResource. 
16 Запускаемый jархив 00:02:55
73 чел. ★ 5 Done
  На этом слайде мы создадим запускаемый JAR-архив для нашей программы

Примечание.
При попытке запуска jar на линуксе появляется сообщение "is not marked as executable".
Необходимо запускать архив из командной строки:
  java -jar JavaSweeper.jar
Либо разрешить исполнение этого файла, чтобы запускать по клику мышкой:
 chmod +x JavaSweeper.jar

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 13 мин. [Показать отчёт]
Научился: JAR-файл представляет собой обычный ZIP-файл с некоторыми дополнениями. Основная задача этого архива — хранить файлы с классами.  
Сложности: Каталог META-INF. В нем содержится файл MANIFEST.MF. Файл позволяет расширить функциональность — кроме обычного набора классов, JAR-файл может выполнять функции электронной подписи, поддержки версионности, подключения библиотек к самому архиву, определение класса для запуска (который содержит метод main).  
17 Карта классных сокровищ 00:04:48
70 чел. ★ 4.9 Done
  На этом слайде мы разберем UML-схему нашего проекта
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 48 мин. [Показать отчёт]
Научился: Передача координат из метода в метод - class Coord (int x, int y). Статичный класс описывающий общие для всех размеры поля - class Ranges (static Coord size, static List<Coord> allCoords, static Random random). Класс Matrix - двумерный массив для бомб  или открыто\закрыто Класс Bomb - для бомб(нижняя палуба). Класс Flag - матрица всех элементов поля (верхняя палуба). Состояние игры - enum GameState. Фасадный класс Game - интерфейс пользователя. 
Сложности: Знак «-» означает, что атрибут является приватным (private). Знак «+» означает, что атрибут является публичным (public). Знак «#» означает, что атрибут является защищенным(protected). 
18 Наши координаты 00:03:24
65 чел. ★ 5 Done
  На этом слайде мы создадим класс Coord и задействуем его в нашей программе
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 37 мин. [Показать отчёт]
Научился: Coord coord = new Coord(box.ordinal(),0);// Данная строчка нам говорит о том, что в памяти создан экземпляр объекта Coord, а переменная coord типа Coord (такого же, как и наш объект) указывает на то место в памяти, где был этот объект создан. Переменную coord теперь можно использовать для вызова методов класса Coord. Coord и coord - различны. Класс и объект. 
Сложности: box.ordinal() - координаты у нас без IMAGE_SIZE, это координаты на поле. Метод ordinal() У перечислений есть этот удобный метод. Можно получить значение, которое указывает позицию константы в списке констант перечисления (порядковое значение или ordinal value), с помощью метода ordinal(). Порядковые значения начинаются с нуля. 
19 Статичная граница 00:03:12
65 чел. ★ 4.9 Done
  На этом слайде мы создадим класс Ranges, который будет использоваться во многих классах нашего проекта и позволит задавать глобальные параметры и перебор всех координат.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 35 мин. [Показать отчёт]
Научился: - static Coord size - количество столбцов и количество строк (основное поле) экземпляр координат. - static List<Coord> allCoords - список всех координат игрового поля (для удобства). - static Random random - генератор случайных чисел. =========== ~ static setSize (Coord size) - устанавливает размер границ Ranges (вызывается из внутреннего класса). + static Coord getSize () - узнать размер. + static List<Coord> getAllCoords () - получение всех координат(массив). ~ static List<Coord> getCoordsAround (Coord coord) - перебор всех клеток вокруг заданной клетки. ~ static Coord getRandomCoord () - получение случайной координаты. ~ static boolean inRange (Coord coord) - не вышли ли за пределы поля. 
20 Установка размеров 00:04:22
64 чел. ★ 4.9 Done
  На этом слайде мы создадим класс Range с двумя статичными методами для установки и получения размеров нашего поля.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 47 мин. [Показать отчёт]
Научился: Заменили получение размеров игрового поля из констант на получение этих размеров из класса Ranges, через метод getSize. 
Сложности: Геттер - метод, позволяющий выцарапать из объекта не всю информацию класса, а лишь нужные данные. Сеттер - манипулятор, меняющий нужные параметры, не затрагивая все остальные. Верно ли сформулировал? 
21 Полный список 00:04:28
60 чел. ★ 5 Done
  На этом слайде мы добавим в класс Range список всех координат нашего поля и будем его использовать для перебора всех клеток
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 41 мин. [Показать отчёт]
Научился: ArrayList - автоматически расширяемый массив. Вы можете работать с массивом, но при этом не использовать квадратные скобки. 
Сложности: в Java массивы имеют фиксированную длину, и после того как массив создан, он не может расти или уменьшаться. ArrayList может менять свой размер во время исполнения программы, при этом не обязательно указывать размерность при создании объекта. Элементы ArrayList могут быть абсолютно любых типов в том числе и null.  
22 Радуга картинок 00:03:18
57 чел. ★ 4.9 Done
  На этом слайде мы добавим иконку нашей программе и немножко пошалим с отображением картинок на экране
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 26 мин. [Показать отчёт]
Научился: Для установки иконки есть метод setIcon, в качестве параметра передается ссылка на Icon. Можно воспользоваться классом ImageIcon для загрузки своих собственных изображений. ImageIcon реализует интерфейс Icon, поэтому как только ImageIcon создан, можно смело передавать его методу setIcon. ImageIcon может использоваться для GIF, JPEG и PNG изображений. При создании объекта ImageIcon в качестве параметра конструктору необходимо передать путь к рисунку. Путь к рисунку может быть абсолютный или относительный. В нашем случае иконка была готовая в ресурсах. 
23 Фасадный класс 00:02:05
57 чел. ★ 4.9 Done
  На этом слайде мы начнем создавать фасадный класс Game и напишем первые два метода этого класса

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 13 мин. [Показать отчёт]
Научился: Фасад = User Interface. Код, обрабатывающий действия пользователя мышью и клавиатурой и применяющий их к алгоритму игры. Класс Game = каркас дома, скелет игры, мостик корабля, с которого юзер рулит по игре. 
24 Игровая координата 00:04:07
57 чел. ★ 4.9 Done
  На этом слайде мы создадим класс Game и реализуем в нем конструктор, а также метод getBox(), который по заданным координатам возвращает, что должно быть в указанной клетке нашего поля.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 25 мин. [Показать отчёт]
Научился: Механизм расстановки элементов игрового поля вынесли в класс Game методом getBox .  
25 Матрица мира 00:04:32
56 чел. ★ 4.9 Done
  На этом слайде мы создадим класс Matrix для хранения всех элементов нашего игрового поля
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 36 мин. [Показать отчёт]
Научился: Матрица это прямоугольная таблица, состоящая из строк и столбцов  на  пересечении которых находятся её элементы. Количество строк и столбцов матрицы задают ее размер. Каждый элемент матрицы имеет свой индекс, где первая цифра обозначает номер строки на которой находится элемент, а вторая — номер столбца. 
Сложности: Массивом называется именованное множество переменных одного типа. Каждая переменная в данном массиве называется элементом массива. Чтобы сослаться на определенный элемент в массиве нужно знать имя массива в соединении с целым значением, называемым индексом. Индекс указывает на позицию конкретного элемента относительно начала массива. Обратите внимание, что первый элемент будет иметь индекс 0, второй имеет индекс 1, третий - индекс 2. 
26 За гранью видимого 00:04:49
55 чел. ★ 4.9 Done
  На этом слайде мы добавим в класс Matrix два метода - геттер и сеттер для получения и установки полей нашей игры
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 53 мин. [Показать отчёт]
Научился: Наименование полей (переменных, содержащихся в классе) всегда пишется с маленькой буквы ( int number, String name, и т.д.). Наименование геттеров и сеттеров - в формате "get" + имя переменной с большой буквы (например, getColor, getName). Метод-геттер возвращает значение переменной (поля). Сеттер имеет модификатор void и параметр, для изменения значения поля. 
Сложности: Причина использования геттеров и сеттеров вместо public методов в возможности доступа к части переменных без доступа к прочему коду. Инкапсуляция, однако? 
27 Бомбанутый класс 00:02:55
53 чел. ★ 5 Done
  На этом слайде мы поговорим о классе Bomb, который будет использоваться для хранения нижнего слоя нашего поля, где находятся бомбы и числа вокруг них
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 16 мин. [Показать отчёт]
Научился: Класс Bomb создан в применении инкапсуляции. Внутри устройство количества и расположения бомб на поле, внешний актор, может обращаться к содержимому через геттеры, не видя и не нарушая устройства внутренностей класса. Этакий черный ящик, работающий как часы и взаимодействующий с внешней средой через узкие горлышки геттеров. 
Сложности: Вернуться к прохождению урока после перерыва. 
28 Тестовая бомба 00:05:11
54 чел. ★ 5 Done
  На этом слайде мы начнем создавать класс Bomb
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 40 мин. [Показать отчёт]
Научился: Контекст - Generate (Alt+Insert) - Constructor - малая механизация по созданию конструктора от IntelliJ IDEA, если нет желания писать с клавиатуры. 
29 Случайные бомборазмещения 00:04:35
54 чел. ★ 5 Done
  На этом слайде мы разместим бомбы в случайных местах на нашей карте
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 32 мин. [Показать отчёт]
Научился: Таким незамысловатым циклом разбрасываются бомбы в Джаве: for (int j = 0; j < totalBombs; j++)//цикл для размещения бомб не больше чем тоталБомб             placeBomb(); Юзинги в Джаве зовутся импортами. 
30 Сравнение координат 00:03:09
53 чел. ★ 5 Done
  На этом слайде мы исправим несколько ошибок и добавим в класс Coord метод для сравнения двух координат
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 18 мин. [Показать отчёт]
Научился: Hотация @Override указывает, что далее мы собираемся переопределять метод базового класса. Override информирует компилятор о том, что метод перегружает метод в суперклассе. Если не использовать аннотацию @Override, то "неправильная" программа скомпилируется без ошибок, а сам проблемный участок кода станет нереально сложно найти. Использование аннотации @Override заставляет компилятор сразу проверять перегружает ли метод аналогичный в суперклассе. 
31 Ограда из единиц 00:06:29
53 чел. ★ 4.9 Done
  На этом слайде мы научимся проставлять единицы вокруг каждой бомбы
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 39 мин. [Показать отчёт]
Научился: static ArrayList<Coord> getCoordsAround (Coord coord) двумя циклами перебирает координаты клеток и дает набор координат для постановки флажков "Единица". Остальные клетки будут с нулями, предполагаю. Перечитывал пейджер, много думал. Вроде и кода написали чут0к, а вникать оказалось нелегко. Урок отличный, спасибо! 
32 Следующая цифра 00:04:16
51 чел. ★ 5 Done
  На этом слайде мы будем увеличивать цифры вокруг каждой новой размещенной бомбы
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 29 мин. [Показать отчёт]
Научился: Box.values()[this.ordinal() + 1] как из текущего бокса сделать следующий? Прибавить единицу. 
33 Дважды в одну воронку 00:05:52
49 чел. ★ 5 Done
  На этом слайде мы исключим попадание двух бомб в одну воронку
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 38 мин. [Показать отчёт]
Научился: Урок бодрит. Экватор радует. Витязи летают. int loop = 100; while (loop --> 0) цикл исполняется до достижения нуля с уменьшением на единицу в каждом цикле. --> это не стрелочка, а минус минус больше. Сминусовать и проверить не равно ли нулю.  
34 Флаг над классом 00:09:18
48 чел. ★ 5 Done
  На этом слайде мы перейдем к верхнему уровню нашей абстракции - классу Flag.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 39 мин. [Показать отчёт]
Научился: int getCountOfFlagedBoxesAround (Coord coord) - метод возвращает число установленных флажков вокруг клетки. Применяется для автоматического открывания заведомо безопасных клеток с учётом анализа значений окружающих флагов и цифровых значений клеток. 
35 Королевская траншея 00:05:02
48 чел. ★ 5 Done
  На этом слайде мы создадим методы start() и get() в класс Flag.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 53 мин. [Показать отчёт]
Научился: Матрица это прямоугольная таблица, состоящая из строк и столбцов  на  пересечении которых находятся её элементы. Количество строк и столбцов матрицы задают ее размер. Каждый элемент матрицы имеет свой индекс, где первая цифра обозначает номер строки на которой находится элемент, а вторая — номер столбца. Для доступа к элементам двумерного массива необходимо использовать 2 индекса: первый для строки, второй – для столбца. Как и в случае с одномерными массивами, индексы также начинаются с нуля. Flag - класс содержимого выше ватерлинии. Bomb - класс содержимого под водой. 
36 Клавишные инструменты 00:04:16
48 чел. ★ 5 Done
  На этом слайде мы создадим два метода в классе Game - pressLeftButton() и pressRightButton()
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 9 мин. [Показать отчёт]
Научился: Alt+Enter - контекст для создания метода автоматом Нема public в методе - не проси его в другом классе. Наглядно тут увидел. 
37 Мышечный адаптер 00:06:27
47 чел. ★ 5 Done
  На этом слайде мы, наконец, добавим интерактив в нашу программу и зарегистрируем адаптер мыши для опроса левой и правой кнопки.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 32 мин. [Показать отчёт]
Научился: К событиям мыши применяются классы-адаптеры MouseAdapter и MouseMotionAdapter. Первый применяет следующие методы: mouseClicked кнопкой мыши щелкнули, mousePressed кнопка мыши была нажата, mouseReleased  кнопка мыши была отпущена, mouseEntered мышь входит в компонент, mouseExited мышь выходит из компонента. 
38 Схема правой педали 00:02:24
47 чел. ★ 5 Done
  На этом слайде мы разберем алгоритм нажатия правой кнопки мышки в игре JavaSweeper
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 34 мин. [Показать отчёт]
Научился: case Opened - return; case Flaged - закрыть бокс в начальное положение неисследованного участка игрового поля, убрать с бокса флаг, счетчик бомб --; case Closed - поставить на бокс флажок, счетчик бомб ++;  
39 Смена флагов 00:03:36
47 чел. ★ 5 Done
  На этом слайде мы реализуем установку и удаление флажков и напишем реализацию функции pressRightButton()
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 24 мин. [Показать отчёт]
Научился: Alt+Enter снова пригодился для автосоздания метода. Оператор switch — проверяет переменную на равенство в отношении списка значений. Каждое значение называется case, и переменная переключаясь проверяется для каждого case. Переменные, которые используются в операторе switch, могут быть только целые числа, конвертированные в целые числа (byte, short, char), строки и перечисления. Вы можете иметь любое количество операторов case в рамках одного switch. За каждым case следует сравниваемое значение, а затем идёт двоеточие. Значение case должен быть того же типа данных как и переменная в switch, и она должна быть константой или литерал. Когда переменная switch на равна оператору case, операторы следующие за case будут выполняться до тех пор, пока не будет достигнут оператор break. При достижении оператора break, switch завершается, и поток управления переходит к следующей строке после оператора switch. Не каждый case должен содержать break. Если отсутствует break, поток управления попадет на следующие case, до тех пор пока break не будет достигнут. В Java оператор switch может иметь дополнительный default case, который должен находиться в конце switch. Default case может быть использован для выполнения задачи, когда ни один из case является правильным. Break не требуется в default case. 
Сложности: Нарисовать флажками звездочку ) 
40 Добро пожаловать! 00:04:24
47 чел. ★ 5 Done
  На этом слайде мы добавим строчку состояния в нашу программу
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 40 мин. [Показать отчёт]
Научился: Создается экземпляр с названием label = new класса JLabel("Welcome!");//создание нового экземпляра с текстом по умолчанию вилькаммензибитте. Создать экземпляр класса Font с названием font = new экземпляр класса Font(шрифтом "Tahoma",  полужирный Font.BOLD, размер применить 20);//создание шрифта. Экземпляру label. установить шрифт setFont такого экземпляра шрифта -> (font);//применение шрифта к лейблу Прикрутить ярлык к форме add (label, BorderLayout.SOUTH);//добавление лейбла на форму в бордер на ЮГ  
41 Недетские состояния 00:02:52
47 чел. ★ 5 Done
  На этом слайде мы создадим перечисление GameState, в котором будет храниться состояние игры

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 42 мин. [Показать отчёт]
Научился: Перечисление - это список именованных констант. Перечисления создаются с использованием ключевого слова enum. При создании перечисления компилятор генерирует соответствующий класс. Этот класс автоматически наследует от класса java.lang.Enum. Элементы enum это статически доступные экземпляры enum-класса. 
42 Актуальное информирование 00:06:07
47 чел. ★ 5 Done
  На этом слайде мы сформируем сообщение о текущем статусе игры в зависимости от текущего состояния и выведем его на экран
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 39 мин. [Показать отчёт]
Научился: private String getMessage ()     {         switch (game.getState()) -> взяв значение кейса из метода гетстейт класса Гейм вывести соответствующее сообщение. Элегантно-с! 
43 Алгоритм открывашки 00:07:43
47 чел. ★ 5 Done
  На этом слайде мы займемся обработкой нажатия левой кнопки мышки
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 22 мин. [Показать отчёт]
Научился: Бутылочное горлышко игры приходится на pressLeftButton (coord); 
44 Выбор из выбора 00:05:05
47 чел. ★ 5 Done
  На этом слайде мы напишем метод openBox(), который перебирает все возможные состояния клеток и в зависимости от этого выполняет ту или иную операцию.

Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 34 мин. [Показать отчёт]
Научился: Адекватно именованный switch делает код ясным как море в штиль. Оператор switch — проверяет переменную на равенство в отношении списка значений. Каждое значение называется case, и переменная переключаясь проверяется для каждого case. 
45 Нулевая рекурсия 00:04:01
47 чел. ★ 5 Done
  На этом слайде мы рекурсивно откроем все клетки вокруг нулей.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 44 мин. [Показать отчёт]
Научился: Рекурсивная функция состоит из: - Условие остановки или же Базовый случай, - Условие продолжения или Шаг рекурсии. Один из вариантов увидеть рекурсию – это навести включенную Web-камеру на экран монитора компьютера. Вызов функции самой же функцией продолжается до тех пор, пока не происходит условие остановки. 
46 Учёт зарытых флагов 00:04:19
47 чел. ★ 5 Done
  На этом слайде мы будем считать количество флажков и закрытых клеток на нашем поле
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 19 мин. [Показать отчёт]
Научился: if totalClosed == totalBombs = You Winner!  
47 Телеграмма о флажках 00:03:28
47 чел. ★ 5 Done
  На этом слайде мы выведем сообщение пользователю, сколько флажков и сколько бомб есть на экране
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 33 мин. [Показать отчёт]
Научился: Инкапсуляция наживо))) public int getTotalBombs ()     {         return bomb.getTotalBombs();     }     public int getTotalFlaged ()     {         return flag.getTotalFlaged();     } Геттер обращается к геттеру. Марафон передачи значений. 
Видеообзор: sX0Dkmvn9wc
48 День Победы! 00:05:25
47 чел. ★ 5 Done
  На этом слайде мы проверим, а не победили ли мы!
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 32 мин. [Показать отчёт]
Научился: Действительно, если система методов продумана и грамотно названа, писать методы приятно. 
Видеообзор: J2TVhq79RJg
49 Первая ошибка сапёра 00:06:13
47 чел. ★ 5 Done
  На этом слайде мы зафиксируем поражение, когда игрок подорвался на бомбе.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 25 мин. [Показать отчёт]
Научился: Прекращение игры на подрыве и рестарт реализованы. 
50 Открываем карты 00:07:26
45 чел. ★ 5 Done
  На этом слайде мы покажем расположение бомб после проигрыша.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 1 час. 20 мин. [Показать отчёт]
Научился: Реализовали открытие клеток с бомбами ниже ватерлинии и с флажками над клетками. 
51 Цифровой помощник сапёра 00:11:31
46 чел. ★ 5 Done
  На этом слайде мы напишем помощник, который помогает открывать заведомо безопасные клетки.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 49 мин. [Показать отчёт]
Научился: Цифра в клетке равна количеству флажков вокруг? - Открыть! Но поскольку открываем методом openBox, а там есть case BOMB, то проигрыш при использовании ЦПС не исключается. Товарищ, бди! 
52 Финальный аккорд 00:17:49
35 чел. ★ 5 Done
  На этом видео мы проанализируем всё, что было сделано - пройдёмся по всему коду программы.
Также поговорим о создании Бота для игры Сапёр - как это можно сделать.
Ваше задание - записать видеообзор созданной игры, выложить
на youtube и разместить ссылку на видео в описании.
Отчёт отправил: 17947. Dmitry Sinitsin Выполнено за 4 дня 7 час. 3 мин. [Показать отчёт]
Научился: Курс прекрасный. Игрой "Сапёр" никогда не интересовался, однако в процессе создания проникся всей глубиной проработки этого действа. Насколько много надо подготовить и сложить в стопочку, чтобы игра заработала, и насколько надо покорпеть над предложенными слайдами, чтобы это всё было ясно даже школьнику! Моё почтение, Евгений Витольдович! Этот курс - супер! Гуру от него не станешь, но твердь под ногами уже нащупаешь в кодинге. PS. oCam заработал на 64 битной версии семерки! 
Видеообзор: RYpm1SwHrmc
  Итого:   52 видеоурока 3 час. 50 мин.
1 тест
35 чел. ★ 4.96  
  Финалисты:   Никита,   Владислав,   Иван Воронин,   1  ,   Александр Р.,   Danil42Russia,   Pavlin,   Андрей Шевченко,   Neverwinter 2,   Сергей Стефаненко,   Александр,   Михаил,   Hofflin,   Сергей,   VladYorkyee,   chokayes,   Александр,   Tekashnik,   Денис,   Vladimir Falejev,   Yefim,   Иван,   Новопашин Владимир,   sergeykin,   FireWolf,   Кирилл Шмойлов,   yerv,   Нюта,   Anna,   Алексей В.,   AZANIR,   Дмитрий,   zhikharevav,   Dmitry Sinitsin,   Андрей Гладков .

Начинаем практику по языку C#





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.


Научился: Создавать окна, использовать адаптер для мыши. Все это писать на языке Java. Создавать и использовать перечисления. Использовать ООП при написании программ.
Трудности: Сложно было успевать все записывать за маэстро. Чувствуется, что за кадром осталась огромная работа по рефакторингу. Нам же достался бриллиант, сверкающий своими гранями, т.к. каждая функция на своем месте - ни удалить, ни прибавить. Прямо скажу, что курс - образец для подражания, но пока это для меня недостижимая цель. Когда сам начинаешь писать, все валится в одну кучу. Так что буду стремиться к совершенству. Спасибо огромное за курс! Получил огромное удовольствие от его прохождения!



Научился: Просьба за то, что не снял видеообзор камни не кидать xD Была проделана большая работа. Данный курс был разбит на короткие уроки в котором не было воды. Его можно сравнить с хороший книгой, прочитав один раз, хочется прочитать опять. Но понимая, что вложил 0 усилий что бы сделать данную игру, приходят мысли что надо сесть осмыслить и сделать самому. Спасибо Евгению Витольдовичу за данный курс. На этом всё)