Форум города Чаусы и Чаусского района

Здравствуйте, Гость ( Вход | Регистрация | Правила форума )



Сэкренский программинг - 2

   
  > Сэкренский программинг - 2 : Продолжение темы моего программинга    
Поиск в теме | Версия для печати
xXx
> 19 декабря 2011 — 23:16
  [Id]
Пользователь


Коренной житель Форума

Покинул форум
Сообщений всего: 888
Дата рег-ции: Янв. 2006  
Репутация: 21



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

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

-----
КотЭ Ура!
top
Конституция Республики Беларусь:
"Статья 34. Гражданам Республики Беларусь гарантируется право на получение, хранение и распространение полной, достоверной и своевременной информации о деятельности государственных органов, общественных объединений, о политической, экономической, культурной и международной жизни, состоянии окружающей среды..."

Sacren
> 19 декабря 2011 — 23:29
  [Id]
Модератор


Заслуженный рифмоплёт нашего Форума

Покинул форум
Сообщений всего: 1289
Дата рег-ции: Дек. 2007  
Откуда: =System.City.Orsha
Репутация: 23



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

На одном из форумов посоветовали
 Цитата:
Через переменную, в которой хранится объект (экземпляр) класса. Через сам класс можно обращаться только к статическим членам.
Соответственно, сначала объект где-то должен быть создан (под него выделена память), и только потом с ним можно будет работать.

но без конкретного примера я не понимаю как это сделать, чтобы я получил из игрока конкретные данные именно instance'а.

-----
Поменял structure на class - работает, но warning остался. Ну что ж... Забьём пару костылей если отвалится окончательно.

-----

lastofavari.com | YouTube
top
xXx
> 19 декабря 2011 — 23:44
  [Id]
Пользователь


Коренной житель Форума

Покинул форум
Сообщений всего: 888
Дата рег-ции: Янв. 2006  
Репутация: 21



Замени UpdateStats на
CODE:
Public Sub UpdateStats(a As ArmorClassItem)
Health = Attributes.Endurance * 5
Defence = Convert.ToSingle(Attributes.Dexterity + 0.3 * Attributes.Endurance)
Damage = Convert.ToSingle(Attributes.Strength + 0.3 * Attributes.Dexterity)

ArmorBlock = a.Value * Defence
End Sub


и потом обновляй игрока
 Цитата:
myPlayer.UpdateStats(defArmorClass(armorIndex))


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

-----
КотЭ Ура!
top
Sacren
> 19 декабря 2011 — 23:48
  [Id]
Модератор


Заслуженный рифмоплёт нашего Форума

Покинул форум
Сообщений всего: 1289
Дата рег-ции: Дек. 2007  
Откуда: =System.City.Orsha
Репутация: 23



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

Будет так
myPlayer.UpdateStats(defArmorClass(myPlayer.ArmorClass))

-----

lastofavari.com | YouTube
top
xXx
> 19 декабря 2011 — 23:53
  [Id]
Пользователь


Коренной житель Форума

Покинул форум
Сообщений всего: 888
Дата рег-ции: Янв. 2006  
Репутация: 21



defArmorClass не принадлежит структуре player, отсюда и проблемы.

Просто представь, что ты создаешь инстанс player на чистой страничке, без лишних переменных, т.е. изолируй структуру ото всего остального. Эта defArmorClass там смотрится как голубой на параде неонацистов.

-----
КотЭ Ура!
top
Sacren
> 20 декабря 2011 — 00:00
  [Id]
Модератор


Заслуженный рифмоплёт нашего Форума

Покинул форум
Сообщений всего: 1289
Дата рег-ции: Дек. 2007  
Откуда: =System.City.Orsha
Репутация: 23



Просто если она будет входить в player, то у каждого создания будет полный набор возможных значений, а учитывая, что он по игре один на всех, не хотелось лишний раз дублировать многократно данные. Пришлось вводить предложенные параметры. Если у меня карта с 100 существ, данные о 5 вариантах брони каждому хранить вовсе не обязательно. Лучше определять по свойству номер нужного варианта. И теперь я передаю его вешним параметром, притом что он итак внутри. Это как помещать пищу из желудка в кишечник путём хирургической операции.

-----

lastofavari.com | YouTube
top
xXx
> 20 декабря 2011 — 00:15
  [Id]
Пользователь


Коренной житель Форума

Покинул форум
Сообщений всего: 888
Дата рег-ции: Янв. 2006  
Репутация: 21



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

Чем дальше я подумал на эту тему, тем лучше понял, какая каша у тебя получилась. Поверь, defArmorClass в структуре player делать совершенно нечего.

 Цитата:
И теперь я передаю его вешним параметром, притом что он итак внутри.

Не вкурил. Передавай только параметр. Зачем его внутри держать?

-----
КотЭ Ура!
top
Sacren
> 20 декабря 2011 — 00:21
  [Id]
Модератор


Заслуженный рифмоплёт нашего Форума

Покинул форум
Сообщений всего: 1289
Дата рег-ции: Дек. 2007  
Откуда: =System.City.Orsha
Репутация: 23



Я имел ввиду индекс, а не структуру, Всё ок. Спасибо за советы.

-----

lastofavari.com | YouTube
top
xXx
> 20 декабря 2011 — 00:30
  [Id]
Пользователь


Коренной житель Форума

Покинул форум
Сообщений всего: 888
Дата рег-ции: Янв. 2006  
Репутация: 21



Ну дык, тогда можно весь массив передать в параметре
CODE:
Public Sub UpdateStats(a As ArmorClassItem())
Health = Attributes.Endurance * 5
Defence = Convert.ToSingle(Attributes.Dexterity + 0.3 * Attributes.Endurance)
Damage = Convert.ToSingle(Attributes.Strength + 0.3 * Attributes.Dexterity)

ArmorBlock = a(ArmorClass).Value * Defence
End Sub


и вызывать
CODE:
myPlayer.UpdateStats(defArmorClass)


-----
КотЭ Ура!
top
m00nk
> 20 декабря 2011 — 01:58
  [Id]
Администратор


Ко-админ. Жестокий, но справедливый.

Покинул форум
Сообщений всего: 2884
Дата рег-ции: Янв. 2006  
Откуда: туташний я
Репутация: 32



Ща я буду объяснять Радость Сорри за возможные ошибки - с Vашим Bейсиком никогда дел не имел Однако

Есть класс:

Public Class Something
Dim x, y As Integer

Private Sub Method1(...)
...

Public Sub Method2(...)
....
EndClass

Создаем экземпляр данного класса (объект):
Dim obj As New Something()

теперь обращаться к открытым (public) методам и переменным класса можно через объект:
Dim a = obj.x
obj.x = 25
obj.Method2()

К защищенным (protected) методам и переменным можно обращаться ТОЛЬКО из самого этого класса и его наследников (дочерних классов).
К закрытым (private) методам и переменным можно обращаться ТОЛЬКО из самого этого класса.

Урок теории окончен.

Надеюсь не сильно накосячил.

-----

...ла-ла-ла-ла-ла...
top
« Наше творчество тут! »
> Похожие темы: Сэкренский программинг - 2
Темы Форум Информация о теме Обновление
Федосенко Константин Алексеевич, 1916 года рождения
Помогите найти где похоронен брат моего деда. Погиб где-то на Проне.
Поиск информации времён Великой Отечественной войны Ответов: 0
Автор темы: Admin
21 марта 2017 — 11:29
Автор: Admin
Мы живем в Беларуси???
Продолжение темы о жизни в Беларуси
Моя родная краіна - Беларусь! Ответов: 42
Автор темы: Admin
26 октября 2016 — 22:00
Автор: Sacren
Risen 2 - Тёмные воды
продолжение серии, теперь во времена пиратов
Игры Ответов: 4
Автор темы: Стамп
23 августа 2012 — 15:04
Автор: Стамп
Fallout 3
достойное продолжение - экшен с элементами RPG
Экшен (Action) Ответов: 5
Автор темы: Gane4ka
10 ноября 2008 — 16:38
Автор: m00nk
Ищу информацию о братской могиле в д.Кузьмичи
Нужно подтверждение о погибшем и захороненном там моего прадеда!
Поиск информации времён Великой Отечественной войны Ответов: 6
Автор темы: Svetlana
2 марта 2011 — 03:30
Автор: Admin
 

 
  |  Метки: программинг, программирование, Сэкрен, sakren, творчество
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.


RSS 24.09.2017 - 15:16
[Script Execution time: 0.2025]     [ Gzipped ]