Надлежащая вонь OO

Ваш образец файла содержит маркер «-» в ln 3, который может быть пропущен при копировании / вставке для поиска решения.

Входной файл

<?xml version="1.0" encoding="UTF-8"?>

<StructureDefinition xmlns="http://hl7.org/fhir">

    <url value="http://example.org/fhir/StructureDefinition/MyObservation"/>

    <name value="MyObservation"/>

    <status value="draft"/>

    <fhirVersion value="3.0.1"/>

    <kind value="resource"/>

    <abstract value="false"/>

    <type value="Observation"/>

    <baseDefinition value="http://hl7.org/fhir/StructureDefinition/Observation"/>

    <derivation value="constraint"/>

</StructureDefinition>

Скрипт

from xml.dom.minidom import parse # use minidom for this task
dom = parse('june.xml') #read in your file
search = "http://example.org/fhir/StructureDefinition/MyObservation" #set search value
replace = "http://example.org/fhir/StructureDefinition/NewObservation" #set replace value
res = dom.getElementsByTagName('url') #iterate over url tags
for element in res:
    if element.getAttribute('value') == search: #in case of match
        element.setAttribute('value', replace) #replace
with open('june_updated.xml', 'w') as f:
    f.write(dom.toxml()) #update the dom, save as new xml file

Выходной файл

<?xml version="1.0" ?><StructureDefinition xmlns="http://hl7.org/fhir">

    <url value="http://example.org/fhir/StructureDefinition/NewObservation"/>

    <name value="MyObservation"/>

    <status value="draft"/>

    <fhirVersion value="3.0.1"/>

    <kind value="resource"/>

    <abstract value="false"/>

    <type value="Observation"/>

    <baseDefinition value="http://hl7.org/fhir/StructureDefinition/Observation"/>

    <derivation value="constraint"/>

</StructureDefinition>
10
задан Tordek 14 March 2009 в 03:40
поделиться

4 ответа

Я предполагаю, что Вы могли заставить механизм физики возразить, что Вы обновляете непрерывно в данных временных интервалах. Это проверило бы на коллизии, переместить шар, вычислить углы возврата, и т.д.

РЕДАКТИРОВАНИЕ № 1: Для добавления немного большего количества детали "игровой объект" физики сохранил бы, среди прочего, ссылки на другие игровые объекты как шар и весла. Игровой объект физики имел бы метод "обновления", который будут называть непрерывно, когда игра работает. Некоторые шаги, которые выполнил бы этот метод:

  • Получите текущую позицию весел (которыми управляют плееры).
  • Обновите положение шара на основе его предыдущей скорости и направления и время, которое протекло начиная с последнего обновления.
  • Обнаружьте коллизии с другими объектами (весла, стены, и т.д.).
  • Повторно вычислите скорость и направление шара на основе любых коллизий.

Всего несколько идей.

РЕДАКТИРОВАНИЕ № 2: уточнить с немного большим количеством фокуса OO...

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

Как пример... Скажем, Вы хотите смоделировать эффекты трения о воздух на шаре. Объект шара сохранил бы свойства, такие как "скорость" и "коэффициент лобового сопротивления". Игровой объект физики имел бы метод для вычислений силы сопротивления воздуха на объекте путем выборки необходимых свойств того объекта и включения их к данному уравнению жидкого перетаскивания.

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

10
ответ дан 3 December 2019 в 23:15
поделиться

В типичной установке как это. Каждый объект получает шанс ответить на событие столкновения с любым объектом, с которым они, оказывается, взаимодействуют. В некотором psuedo (Python) код:

class Moveable:
     def Update(self):
          self.move()

class Ball(Moveable):
     def Collide(self, target):
          self.restore() # move out of the bounding box 
                         # of whatever we collided into from 
          self.reflect() # change direction after bouncing
          if target is a Paddle:
              self.speedup() # Make it a little harder after hitting a paddle

class Paddle(Moveable):
     def Collide(self, target):
         if target is a Ball:
             self.AwardSomePoints()

def main_loop():
    ...
    while True:
        for thing_one in Moveables:
            thing_one.Update()

            for thing_two in Moveables:
                if thing_one is not thing_two 
                        and thing_one is touching thing_two:
                    thing_one.collide(thing_two)
1
ответ дан 3 December 2019 в 23:15
поделиться

Кажется мне как суд, был бы соответствующий объект сделать проверку, или в зависимости от того, насколько сложный логика, отдельный класс для контакта с коллизиями (т.е. некоторый механизм физики как сказанный gnovice).

Шарам и веслам не придется знать друг о друге, так как они непосредственно не связаны в объектно-ориентированном смысле. Каждый не содержит другой, и при этом каждый не происходит из другого.

3
ответ дан 3 December 2019 в 23:15
поделиться

Мне нравится использовать методологию Model-View-Controller, так что в этом случае у вас будет игровой контроллер, который будет обрабатывать контроль столкновения, но при детализации он будет просто контролировать контроллер .. это слишком сложно объяснить здесь, и я Я не такой умный, поэтому проверь это:

http://en.wikipedia.org/wiki/Model-view-controller

0
ответ дан 3 December 2019 в 23:15
поделиться