В связи с изучением ООП учениками, решили помимо стандартных практических задачь занятся и одной необычной задачкой. Предлагаю вам тоже попробовать свои силы в ней, мне интересно, кто лучше справится - вы или студенты Задачка следующая: Есть объект среды. В среду можно поставить объекты разного вида (машины, самолёты, вертолёты), которые по этой среде могут перемешатся в произвольных направлениях. Соотвественно каждый из объектов имеет определённые свойства: максимальную скорость, расход топлива на единицу расстояния, запас топлива. Объекты, оказавшиеся в одной и той же координате по всем трём плоскостям считаются столкнувшимися, т.е. происходит авария. Авария влияет на поведение только столкнувшихся объектов, остальная среда живёт дальше. Расчёты движения происходят с заданным шагом, т.е. это не расчёт движения от и до, а расчёты с определённым, достаточно малым, временным интервалом. Вот такая вот задачка
Psih и сколько времени должны все продержаться? какие требования к среде? не понятна задача до конца.
ответ - никак, потому что делать реалтайм на пхп бред =) но если очень надо не знаю нах тут ООП... PHP: <? $units=array( array("name"=>"bmw","x"=>true,"y"=>true,"z"=>false,"mspeed"=>200,"dfuel"=>5,"fuel"=>120), array("name"=>"la-5f","x"=>true,"y"=>true,"z"=>true,"mspeed"=>600,"dfuel"=>10,"fuel"=>800), array("name"=>"il-2","x"=>true,"y"=>true,"z"=>true,"mspeed"=>400,"dfuel"=>20,"fuel"=>3500), array("name"=>"oka","x"=>true,"y"=>true,"z"=>false,"mspeed"=>100,"dfuel"=>1,"fuel"=>70), ); $map=array(); for($i=0;$i<100;$i++){ if(empty($units)) break; foreach($units as $k=>$unit){ if($unit['fuel']>0){ $g=round(rand(1,$unit['mspeed'])/3); if(!isset($map[$k])) $map[$k]=array(rand(-10,10),rand(-10,10),rand(-10,10)); if($unit['x']){ if(!isset($map[$k][0])) $map[$k][0]=0; $map[$k][0]+=rand(0,1)?-$g:$g; } if($unit['y']){ if(!isset($map[$k][1])) $map[$k][1]=0; $map[$k][2]+=rand(0,1)?-$g:$g; } if($unit['z']){ if(!isset($map[$k][2])) $map[$k][2]=0; $map[$k][2]+=rand(0,1)?-$g:$g; } print "Unit ".$unit['name']." move to (".implode(",",$map[$k]).")<br>"; if($unit['z']){ if($map[$k][2]<=0) { print "Unit type air ".$unit['name']." dead on ground<br>"; unset($units[$k]); } } $units[$k]['fuel']-=$g/$unit['dfuel']; if(count($zkey=array_keys($map,$map[$k]))>=2){ print "Units "; for($z=0,$zc=count($zkey);$z<$zc;$z++){ print $units[$zkey[$z]]['name'].", "; unset($units[$zkey[$z]]); } print "was crashed<br>"; } }else{ print "Unit ".$unit['name']." was stopped<br>"; unset($units[$k]); } } print "<hr>"; } print "<pre>"; print "Result units\r\n\r\n"; print_r($units); print "</pre>"; ?>
ниче не бред. При наличии прямых рук, пхп в консоли охуеннен. Бред - делать реалтайм в HTTP. А Пхп тут не при чем.
флоппик не ну я согласен =) но в консоли есть Си например, зачем пхп. Simpliest ну ладно уж одну строчку то =) писалось на коленке хы
Задача в изучении PHP, используя большую часть того, что предлагает PHP - интерфейсы, абстрактные классы, тайпхинтинг. Костян Продержатся до окончания движения всех объектов. Т.е. в принципе нету ограничения на время или кол-во действий. Все объекты обрабатываются независимо и живут сами по себе, а среда отвечает за их передвижение и проверку коллизий. Ограничений на сложность реализации мы себе не ставим, т.е. к примеру мы дойдём до того, что у нас есть десяток разных самолётов, они могут стрелять и убивать других Среда может быть не ровной поверхностью, а движение может задаваться формулами и не быть строго прямолинейным от координат А в координаты Б. Чётких требований нету, потому что это задача на сотворение, а не на реализацию задания расписанного от А до Я. Я дал студентам идею и буду их направлять. А что они уже придумают, это их дело
Psih надеюсь ты не забыл им объяснить что нужно использовать если оно НУЖНО? =) это у тебя уже не задача а целая система, тут докуя так накодить можно, было бы время и желание.
Mr.M.I.T. Ну так вот они к пятнице составляют план работы. И будем по шагам делать, постепенно усложняя систему. Т.е. сперва сделать среду и объект и собственно их поставить в среду. Потом заставить двигатся в произвольном направлении. Потом заставить их сталкиватся. И.т.д., т.е. по нарастающей.
Psih а, я понял, тебе просто нужна мат модель и писец? это меня флоппик запутал со своей JS и визуализацией, я не понял как "щупается" твоя среда.
ну не мешало бы установить явно критерии до куда планируется усложнять. А то мысленно то можно до бесконечности усложнять, а на самом то деле всё не такое гибкое получаться может.
Костян Там видно будет. Это же для учёбы. Будет что-то криво - переделаем. В конце концов им нужно почувствовать что такое код, лопатить его бульдозерами
да причём тут. сайты бы писали, движки, АПИ и пр. а тут слишком много элементарных составляющих, много вариантов классификаций, организаций архитектуры. поэтому сложно выбрать наилучшую. а превосохдное решение принесёт совсем немного практической пользы
Mr.M.I.T. Это дополнительное задание, помимо классического написания прикладного кода. Они ещё только начинают серьёзно что-то писать, а ООП на полную катушку использовать для построения простых блогов, галерей и прочей мелочёвки глупо и подавать дурной пример. Инструментарий должен соответствовать задаче. Так что задачка, описанная в топике - это для тренировки ООП навыков. Чисто прикладные вещи придут позже. Ну так делать то будут они. Решать как делать тоже будут они. Сами же будут себе набивать шишки. Я буду им просто помогать разобраться что к чему.
Интересная задача. Каждый холит и лелет свою программу, сегодня это процедурная штука,а после нескольких рефакторингов, маленький мир который ты создал.
а размеры объектов учитываются? или они представляются чисто точками в прострастве? а пространство дискретное? если использовать дифференциальное исчисление, то задача еще круче и сложнее получится.