Перейти к содержимому


Немного кода

код идеи

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 15

#1 LethalGhost

LethalGhost

    Ветеран космонавтики

  • Employee
  • 1546 сообщений
  

Отправлено 29 October 2012 - 21:42

*
Популярное сообщение!

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

Мне понравилась идея Kartag:

Цитата

Анализ здоровья при Examine с надетыми Health Scanner HUD.

Так что вот код, оценивайте, исправляйте, оптимизируйте:
___ - условный отступ, в коде он не выделяется подчеркиванием
Файл "code\modules\mob\living\carbon\human\examine.dm":

Цитата

//начало кода (не затронутая часть опущена)
if(istype(usr, /mob/living/carbon/human))
___var/mob/living/carbon/human/H = usr
___if(istype(H.glasses, /obj/item/clothing/glasses/hud/health))
______msg += "<span class='warning'><b>Damage Specifics: [src.getOxyLoss()]-[src.getToxLoss()]-[src.getFireLoss()]-[src.getBruteLoss()]</b></span>\n"
//конец кода (не затронутая часть опущена)
usr << msg

Пару пояснений для людей не знающих код:
  • if(istype(usr, /mob/living/carbon/human)). istype(X, Y) - Сравнение типов объектов X и Y, если тип объекта, на который указывает X, является дочерним или равным от типа Y, то возвращается TRUE. Пример istype(usr, /mob/living/carbon/human) - тоже самое что вопрос является ли тип объекта "usr" - типом гуманоид ("/mob/living/carbon/human" дословно "существо/живое/углеродное/гуманоид")
  • var/mob/living/carbon/human/H = usr. До знака = создается окальная переменная "H", ее тип будет равен тому что написано после var и до имени переменной. После знака "=" пишется то какое значение будет у данной переменной (usr - это игрок)
  • if(istype(H.glasses, /obj/item/clothing/glasses/hud/health)). Опять проверка типов, но теперь проверяется надеты ли очки: H.glasses - слот глаз объекта "H", /obj/item/clothing/glasses/hud/health - медецинские очки-анализаторы.
  • var/perpname = "wot"
    var/medical = "None"
      - это нам не нужно - пропускаем
  • msg += к тому что есть в переменной msg прибавляем то что идет после знака "="
  • "<span class='warning'>Damage Specifics: [src.getOxyLoss()]-[src.getToxLoss()]-[src.getFireLoss()]-[src.getBruteLoss()]</span>\n" - это сообщение которое будет выдаваться
  • тег <span class='warning'>.....</span> - форматирование выводимого текста, warning - красное сообщение, как то что сообщает о наличии крови на одежде.
  • Damage Specifics: - просто текст (перевод: Тип урона)
  • [src.getOxyLoss()]-[src.getToxLoss()]-[src.getFireLoss()]-[src.getBruteLoss()] - src - это тот кого мы экземайнем. get***Loss() - полученный урон типа ***, где *** это Oxy - урон от удушья, Tox - токсичный урон, Fire - ожеги, Brute - удары/порезы.
  • \n - переход на новую строку, в этом сообщении он нужен для того чтобы после вывода урона следующий дальше текст появился на новой строке.
  • usr << msg - финальная часть - вывод всего текста содержащегося в переменной "msg" пользователю
Обновлено с учетом замечаний Editor TEH Chaos-neutral. Спасибо.

#2 Shamah

Shamah

    По-черному

  • Employee
  • 776 сообщений

Отправлено 29 October 2012 - 21:45

Отличная тема, большущий плюс.

#3 Woody112

Woody112

    Легитимный король Грина

  • Employee
  • 773 сообщений
  • ГородDefault City

Отправлено 29 October 2012 - 21:50

>немного кода
СЛИШКОМ МНОГО КОДА, ГУМАНИТАРИИ НЕ МОГУТ ПЕРЕВАРИТЬ ЭТО.
А так молодец.

Просмотр сообщенияsnysmoosh (23 February 2013 - 00:41) писал:

Скрытый текст
Массовый баттхерт называется революцией - Neray.

#4 Kartag

Kartag

    Мёртвый вахтёр

  • Employee
  • 3308 сообщений
  • ГородМосква

Отправлено 29 October 2012 - 23:05

Неплохо, и обьяснено всё тоже отлично. Поправка - идея моя, Вилго взял её из темы с мелкими идеями и отметил в отдельной.

#5 LethalGhost

LethalGhost

    Ветеран космонавтики

  • Employee
  • 1546 сообщений
  

Отправлено 30 October 2012 - 04:33

Просмотр сообщенияKartag (29 October 2012 - 23:05) писал:

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

#6 Antilles

Antilles

    2D-космонавтик

  • Employee
  • 73 сообщений

Отправлено 30 October 2012 - 07:24

Круто, все объяснил и показал. Только нужна проверка не только на человека, но также на таяранов, согхунов и скреллов, не так ли?

#7 LethalGhost

LethalGhost

    Ветеран космонавтики

  • Employee
  • 1546 сообщений
  

Отправлено 30 October 2012 - 10:21

Просмотр сообщенияAntilles (30 October 2012 - 07:24) писал:

Круто, все объяснил и показал. Только нужна проверка не только на человека, но также на таяранов, согхунов и скреллов, не так ли?
Отличный вопрос.
Тут я ошибся правильнее будет не человеком, а гуманоидом:
istype(usr, /mob/living/carbon/human) - тоже самое что вопрос является ли тип объекта "usr" - типом гуманоид ("/mob/living/carbon/human" дословно "существо/живое/углеродное/гуманоид")
За расы отвечает переменная "mutantrace" обЪекта (например H.mutantrace), так что тут проверка на таяранов и т.д. не нужна.

#8 Editor TEH Chaos-neutral

Editor TEH Chaos-neutral

    ­­­­­­­­­­

  • Detective
  • 4964 сообщений
  

Отправлено 30 October 2012 - 10:35

Что за хуйню я прочитал?

Цитата

if(istype(usr, /mob/living/carbon/human)). istype(X, Y) - проверка соответствия. Пример istype(usr, /mob/living/carbon/human) - тоже самое что вопрос является ли переменная "usr" - гуманойдом (/mob/living/carbon/human дословно сущесвом/живым/углеродным/гуманойдом)
Лолшто?
Перепиши:
istype (x, y) - это функция, которая сравнивает типы объектов, на которых указывает X и Y. Если тип объекта, на который указывает X, является дочерным или равным от типа Y, то возвращается TRUE.

Цитата

var/mob/living/carbon/human/H = usr. До знака = создается локальная переменная "H", после этой  переменная присваивается значение usr (usr - это игрок)
До знака "=" создается переменная с именем H, имеющая тип "/mob/living/carbon/human".

Цитата

if(istype(H.glasses, /obj/item/clothing/glasses/hud/health)). Опять проверка соответствия, но теперь проверяется надеты ли очки: H.glasses - слот глаз объекта "H", /obj/item/clothing/glasses/hud/health - медецинские очки-анализаторы.

Аналогичный код
if(istype(usr:glasses, /obj/item/clothing/glasses/hud/health)).

Остальное в целом правильное, но пример взят неудачный.

#9 Ekaterina Tsvetkova

Ekaterina Tsvetkova

    2D-космонавтик

  • Employee
  • 179 сообщений
  • ГородМосква

Отправлено 30 October 2012 - 10:43

Лолшто?
Перепиши:
istype (x, y) - это функция, которая сравнивает типы объектов, на
которых указывает X и Y. Если тип объекта, на который указывает
X, является дочерным или равным от типа Y, то возвращается
TRUE.


Ну и зачем это? Там и без этого пройдет, вы просто предлагаете тоже самое, но по другому

#10 Editor TEH Chaos-neutral

Editor TEH Chaos-neutral

    ­­­­­­­­­­

  • Detective
  • 4964 сообщений
  

Отправлено 30 October 2012 - 10:44

Цитата

Там и без этого пройдет, вы просто предлагаете тоже самое, но по другому
Написано, что сравниваются типы переменных X и Y, а не указателей. Это совсем другое.

#11 LethalGhost

LethalGhost

    Ветеран космонавтики

  • Employee
  • 1546 сообщений
  

Отправлено 30 October 2012 - 12:19

Спасибо, замечания учел, ОП-пост обновил.

#12 Dragon71421

Dragon71421

    Ассистент

  • Employee
  • 8 сообщений

Отправлено 06 November 2012 - 01:40

Просмотр сообщенияLethalGhost (29 October 2012 - 21:42) писал:

  • var/perpname = "wot"
  • var/medical = "None"  - это нам не нужно - пропускаем
Ну ты уж всё-таки обьясни эту часть до конца, либо выпили из примера.

#13 LethalGhost

LethalGhost

    Ветеран космонавтики

  • Employee
  • 1546 сообщений
  

Отправлено 12 December 2012 - 18:36

Начнем с абстрактных основ:
В свое время Алан Кей сформулировал для разработанного им языка программирования Smalltalk несколько принципов. Они прекрасно описывают принципы ООП. Так например, утверждается, что объектно-ориентированная программа состоит из объектов, которые посылают друг другу сообщения. Каждый объект может состоять из других объектов (а может и не состоять). Каждый объект принадлежит определенному типу, который задает поведение объектов, созданных на его основе.

Что такое класс или тип? В реальном мире стол — это объект. Но когда его изготавливают, то руководствуются определенным описанием (знанием), что такое стол? Я могу сказать «стол» не имея ввиду никакой конкретный, но большинство поймут, о чем идет речь, т.к знают особенности этого предмета (есть крышка, ножки и т.п.).
Тип — это описание объектов определенного типа. В каком-то смысле - это абстракция без материального воплощения, которая позволяет систематизировать объекты той или иной системы.

На основе типов создаются объекты. Может быть множество объектов, принадлежащих одному типу.
Далеко ходить не будем возьмем пример со станции:

Цитата

// - все что находится в текущей строке после этих двух полосок - комментарии, они не относятся к коду

тот самый бронежилет СБ:
/obj/item/clothing/suit/armor/vest    
___name = "armor"
___desc = "An armored vest that protects against some damage."
___icon_state = "armor"
___item_state = "armor"
___flags = FPRINT | TABLEPASS
___armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
броня вардена Изображение
/obj/item/clothing/suit/armor/vest/warden
___name = "Warden's jacket"
___desc = "An armoured jacket with silver rank pips and livery."
___icon_state = "warden_jacket"
___item_state = "armor"
Строка: /obj/item/clothing/suit/armor/vest  - тип бронежилета СБ, в следующей броне добавилось /warden.
Отсюда /obj/item/clothing/suit/armor/vest/warden  - это подтип /obj/item/clothing/suit/armor/vest.
Это означает что броня вардена возьмет в себя все свойства брони СБ, за исключением тех что прописаны ниже строки /obj/item/clothing/suit/armor/vest/warden с отступом ___.
Переменная name отвечает за имя объекта, это armor для брони СБ, в броне вардена она присваивается Warden's jacket.
В то же время armor в типе /obj/item/clothing/suit/armor/vest/warden не указывается, следовательно она берется из более высокого типа без изменений

to be continued ....

Информация взята:
http://www.angelfire.com/games4/byond/
http://younglinux.in...opython/oop.php

#14 Гость_Fixer_*

Гость_Fixer_*
  • Гости

Отправлено 12 December 2012 - 20:49

А так же  дочерний объект Варденг может иметь уникальные свойства, которые не присущи родительскому объекту - бронежилет.

#15 LethalGhost

LethalGhost

    Ветеран космонавтики

  • Employee
  • 1546 сообщений
  

Отправлено 12 December 2012 - 21:18

Просмотр сообщенияFixer (12 December 2012 - 20:49) писал:

А так же  дочерний объект Варденг может иметь уникальные свойства, которые не присущи родительскому объекту - бронежилет.
Может, куда же без этого?
Но об этом чуть позже

#16 Гость_Fixer_*

Гость_Fixer_*
  • Гости

Отправлено 13 December 2012 - 06:55

Главное понять, что ООП-программирование подразумевает то, что все вокруг объекты.
А так же, можно объединить их по дочерним и родительским.
Например - Деревья, это родительский объект Ясени и Дуба.



Темы с аналогичным тегами код, идеи

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных