Орел и решка на PHP. Практика ООП для начинающих

preview_player
Показать описание
Привет. Меня зовут Рахим. Я разрабатываю на php, Laravel. Помогаю пройти путь обучения от синтаксиса до фреймворков.

Это видеоурок по созданию игры Орел и решка. Также хорошая практика по ооп для начинающих

Вдохновился идеей с канала Laracasts.
Рекомендации по теме
Комментарии
Автор

Блин!!! Как долго я искал такое видео!!! Я за эти 30 минут понял больше чем за несколько часов просмотров лекций!!! Так просто, доступно и Спасибо тебе добрый человек!!!!)

xncschm
Автор

это пушка!
я как новичек, считаю это видео максимально полезным и необходимым для понимания!
таких видосов фактически нет!
дай Бог тебе здоровья и процветания - золотой Автор!

sergeysachenko
Автор

Автор молодец. В свое время не хватало такого урока, потому что я учился на Class Square, class Triangle... Кто понял тот понял))

На опыте, что можно было бы улучшить (для тех кто хочет прокачаться еще больше):
- добавить класс PlayerSettings вместо того чтобы передавать в плеера два параметра (закос на будущее когда параметров будет больше двух)
- вместо Player в аргументы Game принимать PlayerInterface (реализация D из SOLID, отказываемся от конкретики в пользу абстракций)
- вместо protected пишем private (I из SOLID, обеспечивает низкую связанность между различными частями системы – по мере необходимости расширять область доступа до protected/public)
- вместо class – final readonly class (см. предыдущий пункт, дальше по необходимости убираем final, readonly)
- в Game указать что это не просто свойство, а private PlayerInterface $player (инкапсуляция, Dependency Inversion)
- в новой версии PHP свойства класса можно обьявлять прямо в конструкторе, тут это как раз было уместно и сократило бы код (добавляем лаконичности, тут уже на вкус и цвет конечно)
- Game это у нас абстракция, ибо какая конкретно игра? Не ясно. Делаем класс abstract и создаем новый, который называем условно HeadsTails, наследуемся от Game (Open/Closed Principle)
- winner() я бы переименовал в getWinner(), что дает понять нам что метод точно что-то вернет, а не void
- start(), play() – по одним названиям не ясно чем они отличаются, нужно посидеть подумать как убрать один из них либо переименовать
- bankrupt() -> isBankrupt() (сразу ясно что метод вернет бул значение)
- point() -> increaseCoins() (сразу ясно что метод увеличивает кол-во коинов)
- bank() -> getTotalCoins() (сразу ясно что вернет общую сумму монет)
- odds() -> getPlayerWinChance() а еще лучше вынести это в метод класса Player и назвать его getWinChance() (S из SOLID)

prod.wembley
Автор

Комментарии редко пишу, но тут просто лайком не обойтись. Вот так и надо ООП объяснять. Спасибо большое. Хочу больше подобных примеров. А уж как я радовался за Джейн 😅

welldone
Автор

Спасибо за урок!
Написал аналог на C#.
Монету вынес в отдельный класс с методом Toss, подбрасывающим монету, и свойством SideUp, которое может быть одним из энумов CoinSide Head / Tail.

edwardfisher
Автор

Братишь, от Души! Отличная практика. Редкий пример хорошей практики.

krtqzkp
Автор

Рахмет от души брат, по PHP_шное процветание во всем !)

bbhkddb
Автор

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

fighter
Автор

Хороший разбор, как раз для понятия ООП. Для практики можно на других языках реализовать. Спасибо!

dmitriysavinov
Автор

Побольше бы таких примеров, особенно охото работы с циклами.
Большое спасибо за видео, с нетерпением жду следующие!

Amedomaroful
Автор

Спасибо за труд 11/10
Комментарии не пишу, но тут просто лайком не обойтись.

ptkmhde
Автор

спасибо за полезный урок! отличный формат

bogdanapache
Автор

После 9.7 месяцов Jane смогла разорить казино)

eldaeron
Автор

Спасибо, Рахим за Отличный пример, показывающий как можно наглядно и просто изложить ООП на конкретном примере. Давайте побольше таких примеров! Потому что хороший практических занятий по ООП на PHP с разбором в инете нет.

PCMasterpro-hcli
Автор

Рахим, у тебя хорошо получается доходчиво обьяснять ход размышлений при использовании ООП. Напиши вариант блэк джека на ООП с таким же разбором. Будет просто огонь!

pvndxrp
Автор

Спасибо, Рахим) очень заходит такой формат.

llkkeburek
Автор

Все отлично. Спасибо! По больше бы таких задач.

nmirlanov
Автор

Немного с рефакторингом можно было еще поиграть, но в целом годно!
Спасибо, просмотрел, прослезился, прям так-же с движков все начиналось, которые были еще до фреймворков )))

Ну и к реальности, нет наследования, инкапсуляции, полиморфизм, интерфейсов и абстрактных классов!

vlache
Автор

Замечание по логике задачи..
Учитывается перенос монет туда-сюда, но не учитывается изменение шанса. Шанс просто высчитывается в начале и все. Там нет постоянных значений 99% на 1%. При каждом броске каждого игрока, процент шанса перетекает в ту или иную сторону. Поэтому Jane выиграла. Редкое, конечно, событие, но, как видим, возможное.
Но, для зрителей это будет самостоятельной работой)

nuklon
Автор

Ура, рад за Jane. Это была потная катка

noslykf