Pull to refresh

Comments 100

Где взять круглую картинку с цветами в бОльшем разрешении?
присоединяюсь! хочу колесо маны в большом разрешении!
Подозрительно много кода для такой просто задачи (имхо)
Угу, обычных олдскульных массивов вполне бы хватило.
Ну уел, лень писать, точнее дописывать, никаких сложностей в реализации нет, кроме, пожалуй, того, что она в своеборазном C-style получается местами. Если дело принципа, то я конечно могу найти время и дописать :D

Кстати, так и не понял что означает XB, это сколько сколько хочешь B столько и используешь? Из текста не очень понятно, в MtG играл пару раз в юности.
Понятненько. В общем, если допишу, закину в личку веселья ради :)
Что такое «M:tG»? Выглядит как случайный набор символов.
это коллекционная карточная игра Magic: The gathering. Сокращенно M:tg
Magic: the Gathering??) Карточная ролевая игра.
UFO just landed and posted this here
UFO just landed and posted this here
кстате была и на PC )
Magic: The Gathering — типа настольная карточная игра с коллекционными картами. ну это если в двух словах.
Более привычное сокращение — MTG.
Не один. Автор не с того начал. Лучше бы описал для начала план (с чего начнем, какие библиотеки будем использовать, расшифровал бы аббревиатуру M:tG), а то сходу ринулся код писать.
Судя по всему это привычка многих авторов здесь писать статьи про то, что может понять узкий круг лиц, либо только после того как прочитаешь пол статьи. Я вообще в игры не играю но очень трудно было понять причем тут мана и программирование.
Нет конечно, надеюсь, что не только сам автор понимает этот пост.
Как бы не хватает пары-тройки абзацев текста в начале:

Возникло желание поделиться своим опытом по реализации идеи игры Magic: the Gathering на C#/ Boo…

Игра представляет собой…

Важны такие нюансы как… Подводные камни…

Ну и в таком духе. А то кажется что это статья из долго играющего цикла и надо срочно искать начало.
Ну начальный пост уже был ранее.
В таком случае это большое упущение, явно стоило добавить ссылку на первую часть и начать с упоминания с того, что это продолжение темы. Ещё не поздно это исправить ^_^
вопрос простой
нафига програмить мтг?
наверно потому что это интересная задача, нет?
В следующий раз, наверное.
Ух, таким макаром можно запрограммировать фундамент для карт уже лет через пять, и можно будет начать добавлять карты.
Ах да, ну и конечно, спасибо за гажение — будьте уверены, я это запомню.
право слово, один несчастный минус за комментарий на хабре не стоит таких переживаний :)
При чём тут минус? Очевидно же кто, очевидно за что — и всё равно тихонько гадит в карму, вместо того, чтобы ответить.
«ай-яй-яй, меня критикуют — ВРАГ! ДАВИТЬ!»
Сейчас уже слишком много появилось видов земель, некоторые довольно замороченные :) Снежные, painlands, фильтры etc. Понятно что лучше сначала базовые реализовать, а потом уже расширять.
Не согласен, с тем, что сперва имеет смысл реализовывать базовые, потом расширять. В этом случае мы получаем постоянное объявление ручками новых переменных с тем чтоб добавить парочку типов… И горе нам, если карта требует в оплату например выкинуть из игры другую карту из руки (force of will), скинуть две карты (forbid) или ещё какое жуткое действие — они же тоже получаются «как бы маной». Или наоборот, то, что Вы перечислили.
Не, это мы уже в семантику правил влезли. Впрочем, без её реализации нам в любом случае будет сложно сделать все карты.

Тот код который здесь — скорее пример. Расширять его до рабочего варианта имхо смысла мало.
Ах! вот чего-чего а тематики старого доброго МТГ не ожидал увидеть на хабре. Надобы расчехлить свою коллекцию и пересобрать эки по фану.
А где снежная манна? я смотрю у нас в России все пропустили замерзшее изданиие.
Снежная мана? Можно ссылочку?
думаю это не очень существенно, особенно если учесть, что они отличаются только дополнительным навешенным типом.
Добавить поддержку не сложно
Мэджик был хорошим развлечением, особенно, до закрытия клуба «Даймонд» на Китай-городе. :)
phoenix-club.ru
в 2007 еще был жив, и был гораздо круче Саргоны
Понятненько. А что закрылся? Маркетинговой мощи не хватило?
Честно говоря, не в курсе, но очень расстроился, узнав в этом году, что он закрылся.
он не БЫЛ, он ЕСТЬ :) особенно затейливо играть не один-на-один, а втроем или четвером :)
Пользуясь случаем, хочу прорекламировать пару игр схожей тематики — Spectromancer и Astral Masters, за которыми однажды провел пару нескучных недель, передвигая электронные кусочки бумаги, за неимением настоящих :)
Глянул на spectomancer — красиво…
Можно я не буду выражаться по поводу идеи астрал мастеров? =) Мне тут знакомый ее посоветовал года полтора назад, сказал что он в нее меня сделает. каково же было его разочарование. когда за 20 партий он меня ни разу не смог обыграть. Просто он не знал что есть такая вещь как мтг, в которую у меня стаж уже далеко за…
Сама игра конечно хороша. но только тога когда нет ничего другого.
Точно. Играю на даче в жестком оффлайне 8)
не надоело? в жало играть? мне с живыми противниками через час надоедает =(
с живыми противниками? а вы с кем простите играете, с Deep Blue? :))
На самом деле никакой онлайн с реальными живыми турнирами в Саргоне не сравнится, ни по атмосфере, ни по эмоциям.
Контекст вообще то состоял из Астралмастерс в данной ветке.
Я имел ввиду что даже в онлайне в эту игру надоедает с живыми играть.
А если бы я жил в Санкт-Петербурге, то в сам бы в Саргоне отвисал. Но увы… в нашем Мухосранске нет клубов. И мой DCI ID уже давно был бы исключен из рейтингов, если бы не добрые знакомые из Краснодара, которые раз в пол-года включают меня в какой-нибудь драфт, когда для четности не хватает человека.
у меня есть ощущение, что проще было представить разные типы маны объектами наследниками класса ManaType, тогда Mana превратилась бы по существу в Dictionary<ManaType, Int>… макросы генерирующие толстый интерфейс для класса, выглядят в этом отношении сложновато…
А как же с гибридной маной и т.д.?
Кто сказал, что ManaType представляет собой 5 примитивных форм маны (т.е. енум)? Можно сделть ManaType являющийся гибрибдной формой…
этот Dictionary<ManaType,int> противно обрабатывать — 100%, я пробовал что-то подобное.
точнее вот так у меня было:
Copy Source  | Copy HTML
  1. type Mana =
  2.     |Red of int
  3.     |Green of int
  4.     |Blue of int
  5.     |White of int
  6.     |Black of int
  7.     |Colorless of int

Copy Source  | Copy HTML
  1. type ManaCost = class
  2.  ...
  3.     val Cost : Mana list
  4.  ...
  5. end

что по сути тоже самое (в чем-то даже проще).
И что «противного» случилось?
Это жуть как неудобно, на самом деле. Например у вас есть карта которая стоит 7WW, но на 7 меньше если у вас мало жизни. Как посчитать 7WW — 7? Сложновато. Так я хоть все разнес так, что можно реализовать, скажем, operator+ автоматически, без обхода списка.
мне кажется тебе правда немножко не хватило вступления. )) Резковато в бой рванул.
и еще мне кажется, что для первого раза этого слегка многовато. я в принципе был готов к чему-то такому, но и то мой мозг оказался сломан. :)) может воскресенье виновато.
кстати об этом косвенно свидетельствует и то, что пока нет ни одного комментария по теме поста. все про мтг :)
Ну, то что про МТГ это тоже неплохо, постараюсь 2й пост сделать поменьше и повизуальней.
Я все собирался под Linux написать мтгшку, но, видимо, уже так и не доберусь. Может попробуете ее на Mono наваять? Кроссплатформенный .NET вариант получится. А если еще и сорцы прятать не будете — так и помогут в будущем развитии.
Ну что касается сорцов, то always welcome. Что касается презентационного слоя, то я вообще планировал делать что-то из стека Windows… не знаю есть ли аналог Direct2D на Mono, но писать под OpenGL уж точно не планировалось (в студенчестве объелся этим фреймворком)… а какие еще варианты есть? Конечно всегда можно на Silverlight или Flash…

Пока все совместимо с Моно…
Не знаю, может я Америку открою, а вы посмотреть реализации на примере M:tG-Online не пробовали?
Их физически нельзя попробовать ибо правила на сервере.
GTK умеет рисовать и в виндус и в линукс. Спасибо за статью :)
Во первых. А как быть со странными манакостами, например по трешолду, грейвярду или фракшинам?
Кстате, а когда платишь колорлесс, какая пойдет в расход? Может на нужный инстант не отстаться, так что процесс не полностью автоматичный.

Да, и ещё, навряд ли есть какая-то надобность программировать Меджик, так как
"..., MAGIC: THE GATHERING are registered trademark of Wizards of the Coast, Inc. MicroProse Software ...", лицензия полностью пропреитарная на игру и правила, т.е. реализация правил в стороннем ПО не приветствуется, тем более уже давно есть www.wizards.com/default.asp?x=magic/magiconline
Во-первых, странные манакосты — это отдельная тема, иногда они маркируются как Х, иногда в правилах, но к теме этого поста это не относится т.к. это семантика правил.

А насчет лицензии, можете написать большое грозное письмо Apprentice, Magic Workstation, Wagic и т.д. и предупредить их что то, что они делают нехорошо. Я не говорил что я прям игру пишу, я просто теоретизирую на тему правил в M:tG. Копирайт на мышление вроде пока не ввели.
Маленький оффтоп: если кто-то играет в MTG на Xbox 360 — пишите :)
Кстати, не знаете когда Duels появятся для PC?
Игра с таким названием вышла на PC в 1998 году, вообще-то :-)
ладно, с маной понятно, а продолжения то ждать? В MTG еще много чего интересного есть. Да и подтягивать знания по ООП интереснее в таком приложении. :)
Что-то я сомневаюсь, что вам удастся запрограммировать весь MtG. Разве что ограниченный subset карт…
Главное — сделать непротиворечивый движок, а базу карт наполнять уже можно и коллективно.
ставлю свою шляпу, что непротиворечивый движок сделать не получится, потому что нет общих правил в MtG, карты — это и есть сами правила

вам придется реализовать что-то вроде языка программирования шиворот-навыворот, с тотальным IoC, чтобы программу (правила) можно было динамически расширять прямо в run-time
Вполне логично добавить базовые правила, их не так уж много. А потом идти не от маны, а от оплаты.
в общем, удачи

я когда-то занимался этой задачей, и забил, когда понял, что реализация MtG тянет на диссертацию, как минимум
В рамках пары блоков всё не так уж страшно, а дальше просто объём программирования вырастает в геометрической прогрессии, так что в одиночку программировать ЭТО по-моему абсолютно невозможно.
Ну да скоро столкнусь с этим, вероятно, снова — один из проектов клонирует кое-какие части MTG.
Мне кажется интересно разобраться в этой теме хотя бы чтобы понимать как в принципе можно реализовать любое правило
не переживайте, автор это понимает лучше других. и он к этому готов :)
У MtGO получилось. Если не брать в расчёт всякие Unhinged / Unglued, то вполне можно. Тем более специально к выходу MtGO механику подправили для более простой реализации в софте — слои расписали, например.
Magic интересен тем, что никогда не знаешь когда и какую свинью он тебе подложит.
Вот, например: Mishra's Workshop
Думаю таких подстав много :)
Да, есть ещё земельки добавляющие ману только для каста абилитей (отлично работали с ребелями).
Начинал играть еще 4ой редакцией (и бумажной, и компьютерной), там на диске с игрой была офигительная бродилка, уже не помню названия, но суть в том, что гуляешь по каким-то территориям, выполняешь квесты, сражаешься с монстрами — и получаешь новые карты в колоду.
Если бы такое в виде малтиплеера реализовали — я бы подписался. У меня на M:tG-Online есть купленный аккаунт, но там играть совершенно не прет, не хватает какой-то изюминки.
PS: Залезть, что ли, на пыльный чердак и найти свои коробки с картами? :)
Ахх… Shandalar… да собственно игра была прикольная, и самое главное там AI действительно умел играть, что удивительно. Хотя одна особенность всех этих игр с AI в том, что когда подбираешь идеальную колоду, тебя уже не остановить…

У меня тоже на MTG Online акк есть, но там мне неинтересно то, что нужно постоянно тратить деньги на карты. По крайней мере на своем домашнем симуляторе я практикую бережливость и экономичность :)
Попробуйте www.yugioh-online.net/top/english/index.html, 2-я по популярности TCG в мире но в России почти не распространена. Возможно менее сбалансированная / продуманная чем МТГ но Имхо на много более фановая.

П.с Когда будите регистрировать Акаунт не указывайте сваю страну как РФ, а то ничего купить не получится )
А в следующей статье мы попытаемся запрограммировать окружающую реальность +)
Как-то всё очень запутано.

А почему нельзя использовать битовую алгебру для этого?

public enum ManaColor: int
{
Undefined = 0,
Red = 2,
Blue = 4,
Green = 8
}

public class Mana
{
public int Color { get; set; }
}

var m = new Mana { Color = ManaColor.Red | ManaColor.Blue }

Зачем городить весь этот огород?
Или я что-то упустила?
Тут простые подходы повсеместно не работают. Хардкодить количество земель, например, опрометчиво — вот появилась земля Snow/Frost, а я даже и не знал об этом.
А с каких это пор int — это хардкод?

что будет если я сделаю следующее:
var a = 10;
var b = (ManaColor)a;

какое значение будет в b?

А если нужно избавиться от enum'a, по используйте себе адаптер и всё тут:
public static class ManaColorDescriptor
{
    public IManaColorDescription GetDescription(int manaColor)
    {
       //Можно в XML задезть, можно в базу, а можно и у сервиса спросить. Что душе угодно.
      //А умные дяди и тёти используют provider oriented design для этого.
        switch(manaColor)
        {
            сase 2:
               return new DefaultColorDescription { Color = "Red", Description = "Red Mana" };
            default:
               return new DefaultColorDescription { Color = "Новыя мана", Description = "А кто будет конфиги править или ещё чего делать? Чё это за  мана вообще?" };
        }
    }
}
Каждый определенный цвет маны порождает вместе с собой определенный набор дополнительной информации, которую очень напряжно реализовать с «ручным» подходом к проблеме. Например, мана участвует в формировании двойной маны, в подсчете общей суммы (converted mana cost) всей маны, в расчетах удовлетворения мана-стоимости а также — это тоже важно — в процессе разбора текстового описания и формирования соответствий в стиле black=swamp.
Прости, но я ни чего не поняла.
Давай в личке подолжим?
Sign up to leave a comment.

Articles