Как стать автором
Обновить

Комментарии 109

НЛО прилетело и опубликовало эту надпись здесь
Ещё на .net митапы сходить несколько раз, если у вас в городе они проходят.

На них все же требуется уровень не ниже среднего.

Dimtry44 очень точно подметил:


Для того чтобы было легче, надо наставника найти, хорошего

Мне вспомнилось как я постигал азы программирования.
Я учился в Академии им. Ф.Э.Дзержинского на кафедре № 25, кафедра программирпования. Мы были вторым набором программистов (1971 год). У меня после Казанского СВУ не было никаких проблем с учебой (многие предметы сдавал экстерном). Но началось программирование и я никак не мог постичь физику предмета: какие-то ячейки, адреса, параметры, аргументы. Короче темный лес. Учился со мной Гена Хренков, который звезд с неба не хватал. Когда я ему рассказал о своих проблемах, он удивился и сказал, а чего здесь не понятного. Берем три коробка со спичками. Это три ячейки. Открываем первый коробок и смотрим сколько в ней спичек, это будет значение первой ячейки. Аналогично для второго коробка. Потом в зависимости от операции складываем или вычитаем. Берем столько спичек каков результат и кладем в третий коробок. Вот мы и запрограммировали сложение/вычитание чисел. Не надо забывать, что это был 1972 год и накаких Си и т.п. еше не было. А были одно, двух или трехадресные машины.
Урок я усвоил и с тех пор не знаю никаких проблем в программировании.
Кстати, а Гена Хренков, к сожалению, не стал программистом.
А для языков высокого уровня коробки со спичками просто незаменимы.

… это был 1972 год и накаких Си и т.п. еше не было. А были одно, двух или трехадресные машины.

Не всё было столь печально.
В те годы в Советском Союзе был достаточно распространен и использовался для обучения студентов Алгол, язык вполне высокоуровневый.
Практически на всех буржуйских компьютерах и на некоторых советских был доступен язык Фортран, который являлся универсальным языком программирования до того, как Си в этом качестве его вытеснил. На Фортране были реализованы вполне себе масштабные проекты, в том числе требующие объектно-ориентированного подхода (просто это тогда так не называлось). Оптимизирующий компилятор с Фортрана для компьютеров IBM был написан на Фортране. Кстати как раз в 1972 году Фортран был впервые стандартизован (FORTRAN 66).
В министерстве обороны США (US Department of Defense) с начала шестидесятых в качестве стандарта использовался язык Кобол (COBOL), тоже не то чтобы ассемблер.
Так что проблемы трудного детства несколько преувеличены.
Так что проблемы трудного детства несколько преувеличены.

А кто писал о трудном детстве?! Уж точно не я. Во-первых, не детство, а юность, и она была прекрасна. И помимо Алгола, Фортрана и того же Cobol-а, нам преподавли (1973-1976 г.г., Советский Союз) и Ассемблер, и Алмо, и PL/1, и RPG и много чего другого. И писал я не о трудностях, а о своем личном понимании программирования.

Я вот новичок, никто из друзей/знакомых не учит и не учил программирование. Вот где найти наставника или приятеля с которым можно вместе учить и спорить? Может посоветуешь что то?

Конечно. Самоучитель. В моем случае это был самоучитель по VBA. Для него достаточно иметь Excel и можно неплохо познакомиться с процедурным прогоаммированием.


Главное — не в учебных материалах. Главное — иметь задумку, которая будет мотивировать. Для большинства любительских проектов достаточно освоить 10-15 команд, погружаться в дебри не надо.


Для меня это пока работает.

Да! Согласен, без мотивационного зуда — «хочу сделать вот такое вот», сложно учиться))
Я под эту лавочку месяца за 3-4 вечерами и с убунтой подружился, и Апач настроил, и веб-приложение на питоне сконструировал, и оно даже умеет «в уме» запускать браузер, делать скриншоты, тащить инфу с сайта, перерабатывать ее и делать финальный документ на базе всего этого. Одна беда — безопасники на работе не разрешили использовать сервис, лежащий на сторонних серваках. Сейчас пытаюсь развернуть это все внутри локальной сети на работе, но сколько при этом ограничений, жесть. Все, что на своем сервере делается парой команд, тут надо согласовывать)))

А помойму годная и задумка и подача материала. Автор молодец. Жду следующую пачку.

Спасибо. Я пока нудно разбираюсь с коллекциями, но как только материал накопится — выложу.

у вас дети неправильно инициализируются (возраст явно не указан и конструктор не перегружен)

Дети же инициализируются int ChildAge = 0, нет?

А имя по дефолту {0x00}
Рекомендую книгу Developing 2D Games with Unity: Independent Game Programming with C# автор Jared Halpern. Книга написана на очень понятном английском языке, весь код объясняется, даже с минимальными знаниями C# и ООП можно будет разобраться. При этом в книге рассматривается создание простой RPG.
Есть еще хорошая Begin to Code with C# от Rob Miles.

Ух ты. Мне пока до Unity далеко, но книгу положу в список.

Дурак — глупый человек. Вряд ли автор является таковым, особенно учитывая контент статьи. Так что заголовок кликбейтный.

НЛО прилетело и опубликовало эту надпись здесь

Ну тогда надо было употребить "Иван-дурак" :)

Но я не Иван… Да и вообще так — в рифму

Спасибо на добром слове. Я как-то по аналогии с народными сказками выдумал заголовок. Там дурак — это скорее чудак, который делает странное.

НЛО прилетело и опубликовало эту надпись здесь
«Глупость — это не отсутствие ума, это такой ум.» — А.И.Лебедь
Никто не занимается программированием в качестве хобби. Такого понятия, как “любительское программирование” (запомните это слово) его вообще не существует.

Да ладо. В прошлом почти все начинали с любительского, они наверно так не думают
Не удивлюсь, если многие читатели этой статьи с любовью вспомнят какой-нибудь спектрум, а что это, как не любительское. :-) прошёл мимо меня.
МК-54, статьи в «Технике-молодежи», игры «Посадка на Луну» и прочие…

Если когда нибудь мне надо будет сделать рулетку, я не задумываясь обращусь к автору статьи. Спасибо, хорошая статья, с утра подняла настроение!

Читал по диагонали, после предложения
Я живу в Нигерии с кнопочным телефоном и нахожусь в отчаянном положении.
история заиграла новыми красками, стал искать тег «перевод». Скрины на русском удивили. Всё из-за моей невнимательности.
НЛО прилетело и опубликовало эту надпись здесь
Вау! Единомышленник! Это очень здорово. А Вы пробовали вызвать rnd два раза подряд без задержки? Я так понимаю, корень его рандомности в системном времени, поэтому одномоментные вызовы дают одинаковый результат.
Да, и это не баг, это фича! В моем «курсе» рассказывал ребятам про это. Сейчас попробую найти ссылку с привязкой по времени.
PS: Увы, скорее всего разбирал на стримах ЕГЭ (объяснял на PascalABC.Net). Надо бы собрать отдельное видео по этой теме.
Класс Random — это класс для генерации псевдослучайных последовательностей из некоего базового значения. Т.е. вызов
var rnd = new Random();
эквивалентен вызову
var rnd = new Random(DateTime.Now.Millisecond);

DateTime обновляется раз в, примерно, 16 миллисекунд — это приводит к тому, что все созданные в этот промежуток времени экземпляры генератора выдадут одинаковые последовательности. Поэтому обычно создают один статический экземляр Random уровня модуля.

Или можно использовать RNGCryptoServiceProvider в случае если требуется что-то пригодное для криптографии, или спецефических задач (вроде генерации кодов подтверждения).

Также не стоит забывать, что дефолтный Random не потокобезопасный, т.е. при многопоточном обращении его нужно заворачивать в lock.

Крайне рекомендую прочитать, что такое "Линейный конгруэнтный генератор" и тогда все станет понятно :) Несмотря на умное слово в середине, вещь поразительно простая. Не то, чтобы так работали все ГПСЧ (генератор псевдо-случайных чисел, PRNG на вражеском), скорее наоборот, но зато станет понятно что такое seed и какие ограничения бывают. Можете даже свой ГПСЧ написать :)


https://ru.m.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BE%D0%BD%D0%B3%D1%80%D1%83%D1%8D%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4

Вы так пишете, будто на .net отсутствует документация в свободном доступе и сакральные знания о поведении классов можно получить только экспериментальным путем

Конечно же я документацию от Микрософта читаю первым делом. Но там половина слов непонятная. И нет объяснения что это, для чего поименяется и когда надлежит использовать.

Вот я щас глупость скажу, но тем не менее. Ок, я создам один раз
Random RandomNumber = new Random();
Но мне же в разных местах кода потребуются случайные числа в разных диапазонах. А иногда два разных случайных числа в одном диапазоне. Они разве не будут одинаковы, если я последовательность сгенерирую один раз на всю программу?

Вы потом вызываете var i = RandomNumber.Next() и каждый раз получаете новое сгенерированное число.
Или вы вызываете RandomNumber.Next(min, max) и получаете новое число в диапазоне min<>max.


Или вы что-то другое имели ввиду?

Попробовал. Не работает.
Random RandomStat = new Random();
находится в классе Item. Вызывается из конструкторов дочернего класса Armor
ItemArmor = RandomStat.Next(1, 10);
которые инициализируются через List.Add
armorList.Add(new Armor(true));
И при последовательных вызовах без задержки генерирует доспехи с одинаковой бронёй.

То есть, каждый Item создаёт свой Random? Тогда в этом и проблема. Можно создать Random на уровень выше и передавать в конструкторы брони и оружия. Тогда все предметы создаваемые подряд будут использовать один и тот же объект Random, и проблема решится.

Выше написанное решение по идее должно помочь. Ну или делаете RandomStat статическим атрибутом Item и инициализируете его ровно один раз. Скажем при старте вашей программы.

Можно еще «глобальную переменную» добавить. Сделать класс (или взять App) и в нем добавить
class App {
//...
    public static Random RandomStat = new Random();
//...
}
и далее везде использовать его:
  var rndNum = App.RandomStat.Next(10,100);


Я вот не понимаю, зачем вообще делать объектом математическую функцию, по сути. Тем более, когда реализация не синглтоном приводит к таким вот казусам.

Объект класса Random, проинициализированный конкретным значением seed, будет всегда воспроизводить одинаковую последовательность псевдослучайных чисел.


Это позволяет, например, написать стабильные тесты на функцию использующую этот самый объект.

а, точно, у этой сущности же есть состояние, которое нужно сохранять между вызовами.
НЛО прилетело и опубликовало эту надпись здесь
Странно, у меня сложилось обратное мнение, что C# более прост и логичен по синтаксису, чем питон.
логичен — мб, прост- точно нет
на питоне вы можете выплюнуть

print("Hello world!")

и это работает)
using static System.Console;
//...
    WriteLine("Hello world!");
//...

А в целом соглашусь. Обвеска классом, пространством имен немного отпугивает новичков, чем Python и подкупает. Но стоил лишь добраться до кастомных структур данных, ООП, и Python начинает проигрывать.

Обвеска пространством имен необязательная.

Да, но в учебниках для новичков об этом крайне редко упоминают.
обвеска классом обязательна, да и точка входа необходима

с CSharp плохо знаком, просто интересно, в чем Python ему проигрывает?

В динамической типизации (ошибки во время запуска, а не компиляции), в скорости.

Это понятно, я имел ввиду в контексте кастомных структур и ООП

ИМХО, для меня ООП на Python это некий «Тяп-Ляп», ажурная конструкция, которая может быть будет работать. А ООП на C# это сборка звездолета, в котором все механизмы проверяются еще на этапе кодирования/проектирования, где VS, как некий бот помощник, каждую секунду подсказывает что-нибудь. Для меня оптимально на Python небольшие скрипты писать, не более.
Но в шарпе я могу код хоть в одну строку весь написать, или другими извращениями структуру кода менять — код будет работать. Стоит в питоне потерять один отступ — и пошло веселье. А при копипасте новичком кода из книг или с сайтов потеря «лишних» табов и пробелов — явление нередкое. =)
> Подозреваю, что надо подключать базу данных и записывать объекты туда. Придётся мне учить SQL.

По первости это лишнее. Проще с текстовыми файлами работать. Сделать свою примитивную десериализацию для загрузки карты. Может быть и сериализацию для хранения игры. Это несложно. А когда уже будет много CRUD транзакций (скорее только UD), тогда чтоб не мучиться, можно перейти на SQL.

Летом экспериментировал со школьниками, пока они ждали результаты ЕГЭ. Рассказал им на простых примерах (местами для них простых, т.к. они только что профильную математику сдали).
www.youtube.com/playlist?list=PLXZ932--vmI_ZEpSfEK_uvI7Zi4EHDSoC
(сильно не пинать, это не плановый учебный курс, а живые стримы, чтоб с интересом скоротать время ожидания)
Когда самообразовывался — находил курсы по паттернам С# и к ним книжку «Design Patterns via C#», в которой по шагам строится и усложняется игра-лабиринт.
На мой взгляд, это очень похоже, попробуйте.
«Мне очень не хватало какого-то руководства для чайников по структурированию кода. Куда поместить метод для генерации предмета? В класс Item? В класс Program? Просто оставить в коде?»

Поздравляю, вы дошли до настоящей разработки. Правильных ответов на эти вопросы не существует. Даже правильных подходов много и они противоречат друг другу.
Я бы советовал в таких случаях из всех возможных вариантов выбирать самый простой. Самый простой вариант имеет неоспоримое преимущество — он прост. А другие возможные преимущества других вариантов начинающий программист просто не поймёт. Оверинжиниринг — зло.
Возможно всё-таки стоило начать не сразу с С#, а с основами программирования сначала «поиграться» на каком-нибудь детском/учебном языке. Например на каком-нибудь Scratch. Там и примеры простые легче найти и может быть сыну тоже стало интересно.

Но если уж взялись за C#, то на гитхабе полно туториалов и примеров простых программ. Они не заменят обучения как такового, но там всегда можно что-то подсмотреть. То есть просто ввести там в поиск что-то вроде «C# learning game» и посмотреть что вылезет.

Да и свой проект лучше там держать:)

Ну в скрэтч у меня ребёнок играет — это не серьёзно. Чем он мне поможет?

Ну если для вас это уже несерьёзно, то и хорошо :)


П С. Но начинать совсем с нуля и сразу в С#… Просто для меня С# был далеко не первым языком программирования и я всё равно с ним хорошо помучился в своё время :)

И тем не менее учить бесполезный язык ради каких-то абстрактных навыков — очень скучная трата времени. Для меня по факту C# был первым языком, не считая макросов в экселе на VBA. Очень легкий в изучении и логичный язык. Учил без книг (только «CLR via C#» через полгода изучения).
Как сделать создание объектов программно? Как генерировать их названия и тем более выбирать нужные для изменения их параметров?

можно начать с Dictionary<T, V>, где ключами будут имена полей. А хранить их все в массиве.
Т.е. «создание объекта» — это добавление в этот массив нового словарика с полями «здоровье»:100, «удар»:3 и «броня»:5 (и т.д — положение в пространстве, состояние голода, что в руках), и это может быть не просто число, например значение по ключу «инвентарь» — это может быть еще один массив словарей, только уже с предметами.
После чего можно будет ходить по этому массиву и опрашивать — кто где, и если все жизни 0 (и инвентарь пустой и т.д.) — удалять оттуда.
Это же даст вам и понятие про «БД в памяти» и не нужно ломиться в SQL (хотя он будет нелишним, но зачем на полпути ?).
Дальше еще можно делать сохранение этого всего (в текстовый файл или БД или передача json-ами по сети) и т.д.
Автор, я бы посоветовал прежде освоения объектно-ориентированного программирования полистать книгу «Алгоритмы и структуры данных».
Хороший метод развития навыков — решение олимпиадных задач, но если хочется того же, но в более красивом виде — посмотрите cайт CodinGame.com (раздел Practice) и подобные. Там и задачи уже придуманы, и язык программирования можно выбирать удобный лично для Вас, и задачи, как правило, такие, что их решения могут пригодиться в дальнейшем игрострое.

В любом случае — удачи, и упорства в достижении цели.
Спасибо. Интересно.
Принято считать, что программирование — удел профессионалов. Никто не занимается программированием в качестве хобби. Такого понятия, как “любительское программирование” (запомните это слово) его вообще не существует.

На запрос «любительское программирование” (в кавычках) гугл выдал 351 результат. Это сравнительно немного, т.о. это слово встречается нечасто. Но если под этим словом понимать непрофессиональное программирование, то это очень распространенное занятие.

Прежде всего я бы отметил профи в других областях, которые регулярно пишут програмки для своей работы (только для себя). Нпр., знаю одного химика органика синтетика — доктор хим. наук, работает в одном из ведущих НИИ РАН. Программировать учился самостоятельно. Изучал только то, что было ему нужно — нпр., рулетку он не напишет :)

Есть любители в других областях, нпр., радиолюбители, которые пишут код для своего хобби.

Но есть люди постоянно связанные с программированием по основной работе. Нпр., „чистый“ математик может входить в бригаду программистов, где разрабатывать очень изощренные алгоритмы и при этом не знать ни одного ЯП.

И как быть со школьниками? Сейчас уже в начальной школе учат программированию. Школьник может им увлекаться, но до профи ему еще очень далеко.

А еще много мододелов-любителей. Пишет, нпр., моды для любимой игры на очень ограниченном скриптовом языке. Но ведь и это „кодинг“ с отладкой.
Очень хорошее замечание. Не всех из перечисленных можно считать любителями. Я в новых постах отдельную мысль про это напишу.
Не всех из перечисленных можно считать любителями. Я в новых постах отдельную мысль про это напишу.
Очень интересно будет узнать Ваше мнение. Забегая вперед возражу, что и Вы не совсем любитель (не с нуля начали):
Кроме того в старших классах были уроки информатики. Turbo Pascal. Нас учили писать настоящий код. Разумеется, в тетрадях. Но у меня был компьютер (уже какой-то Пентиум) и я мог практиковаться.

Так я познакомился с самыми элементарными вещами. Конструкциями if-then-else и циклами. Вершиной моего мастерства стала программа «Рулетка».

Поэтому мне не понятно затруднение:
Первое препятствие. Дошел до понятия классов и объектов. Понятие совершенно непонятно.
По паскалю и по школьной математике Вам знакомо понятие типа данных, нпр., отличия целых чисел от вещественных:
— чтобы сравнить целые на равенство пишем:
if x=y then

— а если x и y вещественные, то нужно написать:
if abs(x-y)<epsilon then

Наверняка этому в школе учили, но у Вас это знание ушло в пассив. Чтобы вспомнить про простые и сложные типы достаточно проглядеть статью в вики потратив 20 минут. Переход от понятия типа к понятиям ООП очень прост — подробнее я написал. Там и про то, что ООП — удобная технология, но не надо преувеличивать ее пользу.
Создать классы для игрока, казино и рулетки? Потом придумывать объекты в них? И что они будут делать? Слишком притянуто. Кажется чем-то неестественным и только запутывает программу.
Я предпочитаю ОО Паскаль в Дельфи-7. И начал бы делать Вашу задачу в GUI. В этом случае по команде «новый проект» среда Дельфи генерирует код с основным окном — объектом экземпляром класса TForm. На эту форму-окно я бы стал класть компоненты для управления игрой (ход, выход и т.д.), писать обработчики событий (нпр., нажатие на кнопку), а в них уже логику игры. В простой постановке классы казино, игрок, рулетка были бы не нужны. Более сложный пример, где нужны особые нестандартные классы.
Успехов!

По-английски это будет programming hobbyist — загуглите и поразитесь количеству результатов.
А вообще, поддержу предыдущего оратора. Скажу более: я с 1990 года в "айти". Начинал программистом на Паскале (даже умудрился 800 рублей заработать за три месяца, неплохие деньги!), затем стал чем-то типа эникейщика в микробиологической лаборатории, после снова на три года вернулся в программирование, а затем уже плотно и окончательно подсел на сисадминство. Тем не менее, продолжаю быть "программистом-хоббиистом" (автоматизирую процессы на работе, программирую микроконтроллеры для всяких электронных поделок, разрабатываю милые мелочи для мобилок, время от времени просто открываю новые для себя ЯП — сейчас пытаюсь "врубиться" в F#, чтобы мозги плесенью не покрывались, ну и т. п.). Так что нас, программистов-любителей, весьма и весьма много!

НЛО прилетело и опубликовало эту надпись здесь
Всё происходит прямо здесь и сейчас :)
Судя по тому, что упоминаются уроки по C#8 и Core3, то статья довольно свежая.
Уроки с сайта mycsharp.ru и “Полное руководство по языку программирования С# 8.0 и платформе .NET Core 3” на metanit.com/sharp/tutorial
Я попробую изменить отношение общества к программированию. Принято считать, что программирование — удел профессионалов. Никто не занимается программированием в качестве хобби. Такого понятия, как “любительское программирование” (запомните это слово) его вообще не существует.

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

Интересно, что могла бы представлять из себя любительская нейрохирургическая операция?

Вскрытие каменным топором черепа претендента на жизненное пространство из соседнего племени? =)
Подпольное добавление модуля памяти, логики, прямого подключения к телеграму или торренту ;)
Например, Лоботомия :
Широкое распространение получил разработанный в 1945 году американцем Уолтером Фрименом[en] метод трансорбитальной лейкотомии («лоботомия топориком для льда»)[8], при котором не требовалось сверлить череп пациента. Фримен стал ведущим пропагандистом лоботомии. Свою первую лоботомию он провёл, используя в качестве обезболивания электросудорожную терапию. Он нацеливал зауженный конец хирургического инструмента, напоминающего по форме нож для колки льда, на кость глазной впадины, с помощью хирургического молотка пробивал тонкий слой кости и вводил инструмент в мозг. После этого движением рукоятки ножа рассекались волокна лобных долей головного мозга. Фримен утверждал, что процедура устранит из «душевной болезни» пациента эмоциональную составляющую. Первые операции проводились с помощью настоящего ножа для колки льда[9].
Я попробую изменить отношение общества к нейрохирургии. Принято считать, что нейрохирургия — удел профессионалов. Никто не занимается нейрохирургией в качестве хобби. Такого понятия, как “любительская нейрохирургия” (запомните это слово) его вообще не существует.

Огонь! В точку. Именно об этом я и говорю. С Вашего позволения процитирую это высказывание.
Ай, как здорово)) Читал с расширяющейся улыбкой) Это же и про меня тоже! 286 комп в 1992 году, Турбо Бейсик, вершиной мастерства на котором были написанные мной Тараканьи бега)) Делаем ставку на одного таракана из трех и они мчат снизу вверх, с рандомной задержкой на каждом шаге)) Самое веселое было запустить ее позже на пентиуме, тараканы добегали за долю секунды, потому что задержка была реализована пустым циклом.
И точно так же я все забросил до прошлого года, когда увлекся питоном, пилю небольшую автоматизацию для своей работы и балуюсь с ML, строя несложные модельки в области оценки стоимости недвижимости. Удачи Вам!!!

+1 единомышленник, отлично. Можно своё сообщество начинать :)

Вот все пишут, удачи, но никто не вызвался помочь человеку.
Я конечно C# не знаю, мне ближе java,python,php,sql итд, но готов помочь, если будут какие то вопросы (в т.ч. и те задачки что в статье сейчас если до сих пор не смогли решить), пишите, чем смогу — помогу.

Спасибо. На самом деле многие пишут лично и предлагают помощь да совет. Но мне пока не требуется, вроде ещё с настоящими трудностями не сталкивался.


Хотя один добрый человек рассказал, как включить отладку — должно здорово помочь.

Автор, проверьте личные сообщения)
Про генерацию имен — по-моему, типовой способ это составление словосочетания рандомным выбором частей названия из списков, наподобие тех «генераторов», что по соцсетям ходят:
image

Причем к таким фрагментам названия можно «прикручивать» и модификаторы характеристик. Так, например, сделано в серии игр Borderlands — название оружия составляется из префикса и титула, влияющих на характеристики (по сути, с точки зрения такого конструктора части названия являются такими же «деталями» оружия, как ствол, рукоятка и т.п.)
Скриншот калькулятора характеристик по списку частей
image

Вот так неудобно создавать почти всегда:
Ребёнок Дима = new Ребёнок ();
Ребёнок Саша = new Ребёнок ();

Потому что необходимо работать совершенно по отдельности с ними.
Значительно лучше
List<Ребёнок> Дети = new List<Ребёнок>();
Дети.Add( new Ребёнок ('Дима', 11));
Дети.Add( new Ребёнок ('Саша', 13));

Так можно работать перебором с любым количеством детей (ну, или имуществом в инвентаре) и любым разнообразием.

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

Не думаю, что мой примитивный код кому-либо поможет :)
Я пытаюсь вдохновить людей на интерес к хобби — программированию. А с деталями им помогут на StackOverflow гораздо лучше :)

Шикарная статья. Спасибо автору. Я как-будто вурнулся в прошлое. Я сам так же начинал — в качестве хобби, но потом это переросло в профессию разработчика игр на Unity и Unreal Engine.
По поводу изучения SQL и баз данных, это лишнее для начали и для простых игр.
если сохранения в игре не предусмотрены, то хранить предметы и монстров лучше в коллекциях (например, List).
Если сохранения в игре должны быть, чтобы игру начинать потом с того же мета, то лучше использовать Json, записывать в файл при сохранении и читать из файла при загрузке. Как работать с Json можно понять за пару часов очень начинающему программисту )
Никто не занимается программированием в качестве хобби. Такого понятия, как “любительское программирование” (запомните это слово) его вообще не существует.
Я 18 лет занимаюсь программированием в качестве хобби.

Это просто потрясающее, снимаю шляпу. Надеюсь протянуть столько же. А поделитесь подробностями? Как к этому пришли? Над чем работаете? Что Вам это даёт?

Как к этому пришли?
В 12 лет подарили компьютер байт, с книгой о том как программировать на встроенном бэйсике. Попробывал — понравилось. Так и увлекся.
Над чем работаете?
В данный момент над компилятором свого яп(начал его делать, ещё до того как это стало мэйнстримом)
Что Вам это даёт?
Возможность воплощать свои идеи в жизнь, также позволяет мне более широко мыслить и применять навыки из программирования в жизни.
Предлагаю также посмотреть код игровых опен-сорс проектов на гитхабе github.com/leereilly/games
Например (выпал первым по ключевому слову C#) github.com/paulbatum/Dominion
Там найдутся примеры организации кода, переиспользования кода с помощью наследования и множество других вещей, которые на собственном опыте постигаются долго и болезненно.
Главное постоянно задавать себе вопрос «почему это было сделано именно таким образом» и гуглить неизвестные термины.
Еще может пригодиться ознакомитьельная статья по паттернам проектирования «Три ключевых принципа ПО», имхо это полезно даже с поверхностными языка программирования. habr.com/ru/post/144611

В качестве литературы для начинающих могу посоветовать
RB Whitaker — The C# Player's Guide
В качестве бесплатной альтернативы существует
Rob Miles — C# Programming Yellow Book

Очень интересная статья и автор молодец! Программирование — это призвание, и часто у профессиональных программистов его нет

Меня наверно запирают, но я бы посоветовал ардуино какую. Она по-моему идеально подходит для подобного.
Будет максимально наглядно, да не шарп, но у автора не с самим языком проблемы, как я понял.

metanit — очень годный ресурс для новичков, сам с него начинал.
Правильно говорить не «Си шарп», а «Си плюсплюс плюсплюс», потому что "#", это по сути 4 плюса, вот такой вот вброс.

Я бы посоветовал книгу Head First C#. В своё время хорошо зашла. Многим не нравится подача материала (слишком много картинок)). Но с точки зрения разработки игр для себя, примеры там подходящие.

Насколько я помню, все дружно ждут четвёртое издание, которое выйдет чуть ли не в Августе 2020 года.

Вот тут есть гитхаб, в котором они вроде как работают, но его уже 2 месяца не обновляли.
github.com/head-first-csharp/fourth-edition

Кстати, я так и не понял, что делать новичкам в связи с постепенным переползанием с .NET Framework на Core. В своё время пытался что-то писать на Питоне, но из-за вечного перепрыгивания с 2 на 3 и обратно быстро разочаровался во всём этом и забросил. Сейчас читаю старые книги по C Sharp, там всё на Framework. Я правильно понял, что он пока что умирать не собирается и подход к написанию приложению похож, это только новая имплементация?

Так язык один и тот же, так что старые книги вполне подойдут. Есть некоторые различия по стандартной библиотеке (например, в NET Core идеологически отсутствует Thread.Abort, что вообще правильно), но для новичков это не важно. Ну и инфраструктура у NET Core более продуманная и простая.

С интересом прочитал публикацию. Судя по количеству комментариев, не я один. Хотелось посоветовать какой-нибудь ресурс для обучения. Сам люблю читать книги, но толковой для данного случая не приходило на ум.


Потом вспомним про замечательный курс "Основы программирования на примере C#" на ulearn.me. Он стоит того, чтобы хотя бы попробовать его немного. А там уж как зайдёт.


Удачи!


P. S. Курсы на русском языке, в открытом доступе. Есть и более продвинутый и не менее интересный "Проектирование на языке C#".

Эх… опять видео… на видео нужно много времени :(

Нет, основное время там уходит на практические задания, по моему опыту. Посмотреть десятиминутный ролик во время перерыва на чай и вместо чтения новостей — ерунда. Но курс действительно обширный, 2 семестра по 3 — 6 часов в неделю — это реальная оценка. Но опять же, можно смотреть только интересующие темы.

Рискую, быть заминусованным.
Пишу на С#, уже 11 лет. До этого, писал на C, C++, Java, Python и пр.
Моё мнение: C# — это не про язык. Сам по себе язык, очень хороший, современный и прогрессивый. C# — это в первую очередь, про платформу .Net от Microsoft. Именно её, и стоит изучать. Чтобы, всё не закончилось на Console.WriteLine(«Hello, World!»);
Бывают же совпадения! Я тоже буквально пару недель назад начал учить C#. Правда, в отличие от Вас, у меня уже есть 3 года опыта фронтендером, и я уже писал код и в ООП-стиле, и в функциональном. Но это все javascript, в который эти концепции понатаскали из разных других языков программирования и в котором благодаря этому есть неограниченная свобода в написании программ.
В C# же чувствуешь себя, как в смирительной рубашке, по крайней мере, поначалу. И дело даже не в строгой типизации: я до этого пробовал писать на typescript, и это замечательный опыт. Типизированный код для разработки в команде — это мастхэв, как по мне, так как спасает от двухчасового дебага в библиотеках, написанных внутри компании.
Короче, желаю удачи в освоении программирования!
Похвастаюсь своим кодом. Я тоже пишу RPG, правда я хочу полноценно в геймдев скатиться:
Класс боя
using System;

namespace Components.Battle
{
    public class Battle
    {
        public bool alive = false;

        private int turn = 0;

        private Combatant firstCombatant;
        private Combatant secondCombatant;

        private Combatant currentCombatant;
        private Combatant otherCombatant
        {
            get
            {
                return currentCombatant == firstCombatant
                    ? secondCombatant
                    : firstCombatant;
            }
        }

        public Battle(
            Combatant firstCombatant,
            Combatant secondCombatant
        )
        {
            this.firstCombatant = firstCombatant;
            this.secondCombatant = secondCombatant;
        }

        public void Start()
        {
            alive = true;

            Combatant startingCombatant = CheckInitiative();

            Turn(startingCombatant);
        }

        private Combatant CheckInitiative()
        {
            int firstInitiative = firstCombatant.CheckInitiative();
            int secondInitiative = secondCombatant.CheckInitiative();

            Console.WriteLine(
                $"Initiative check: first - {firstInitiative}, second - {secondInitiative}"
            );

            if (firstInitiative >= secondInitiative)
            {
                return firstCombatant;
            }
            else
            {
                return secondCombatant;
            }
        }

        private void Turn(Combatant combatant)
        {
            if (turn != 0) {
                currentCombatant.ResetInitiative();
            }

            currentCombatant = combatant;

            currentCombatant.PerformActions();
            currentCombatant.ReduceInitiative();

            Combatant nextCombatant = CheckInitiative();

            turn++;

            Turn(nextCombatant);
        }
    }
}

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории