Mar a leasaich sinn meacanaig àireamhachadh ballistic airson neach-losgaidh gluasadach le algairim dìolaidh latency lìonra

Mar a leasaich sinn meacanaig àireamhachadh ballistic airson neach-losgaidh gluasadach le algairim dìolaidh latency lìonra

Hi, is mise Nikita Brizhak, leasaiche frithealaiche bho Pixonic. An-diugh bu mhath leam bruidhinn mu dheidhinn dìoladh airson dàil ann an ioma-chluicheadair gluasadach.

Chaidh mòran artaigilean a sgrìobhadh mu airgead-dìolaidh lag frithealaiche, a ’toirt a-steach ann an Ruisis. Chan eil seo na iongnadh, leis gu bheil an teicneòlas seo air a bhith air a chleachdadh gu gnìomhach ann an cruthachadh ioma-chluicheadair FPS bho dheireadh nan 90an. Mar eisimpleir, faodaidh tu cuimhneachadh air a 'mhod QuakeWorld, a bha mar aon den chiad fheadhainn a chleachd e.

Bidh sinn cuideachd ga chleachdadh anns an t-seilg ioma-chluicheadair gluasadach againn Dino Squad.

Anns an artaigil seo, chan e an t-amas agam a bhith ag ath-aithris na chaidh a sgrìobhadh mìle uair mar-thà, ach innse mar a chuir sinn an gnìomh dìoladh lag sa gheama againn, a’ toirt aire do ar stac teicneòlais agus prìomh fheartan cluiche.

Beagan fhaclan mun cortex agus an teicneòlas againn.

Tha Dino Squad na shealgair PvP gluasadach lìonra. Bidh cluicheadairean a’ cumail smachd air dineosairean uidheamaichte le measgachadh de bhuill-airm agus a’ sabaid ri chèile ann an sgiobaidhean 6v6.

Tha an dà chuid an neach-dèiligidh agus an frithealaiche stèidhichte air Unity. Tha an ailtireachd gu math clasaigeach airson luchd-seilg: tha am frithealaiche ùghdarrasach, agus bidh ro-innse teachdaiche ag obair air an luchd-dèiligidh. Tha atharrais a’ gheama air a sgrìobhadh a’ cleachdadh ECS a-staigh agus air a chleachdadh air gach cuid an t-seirbheisiche agus an neach-dèiligidh.

Mas e seo a’ chiad uair a tha thu air cluinntinn mu airgead-dìolaidh lag, seo turas goirid mun chùis.

Ann an geamannan ioma-chluicheadair FPS, mar as trice bidh an maids air a shamhlachadh air frithealaiche iomallach. Bidh cluicheadairean a’ cur an cuir a-steach (fiosrachadh mu na h-iuchraichean air am brùthadh) chun t-seirbheisiche, agus mar fhreagairt bidh am frithealaiche a’ cur staid geama ùraichte thuca a’ toirt aire don dàta a fhuaireadh. Leis an sgeama eadar-obrachaidh seo, bidh an dàil eadar putadh air an iuchair air adhart agus an uair a ghluaiseas caractar cluicheadair air an sgrion an-còmhnaidh nas motha na am ping.

Fhad ‘s a tha iad air lìonraidhean ionadail dh’ fhaodadh nach bi an dàil seo (ris an canar gu tric lag cuir a-steach) ri fhaicinn, nuair a bhios tu a’ cluich air an eadar-lìn bidh e a’ cruthachadh faireachdainn de “sleamhnachadh air deigh” nuair a bhios tu a’ cumail smachd air caractar. Tha an duilgheadas seo gu math buntainneach airson lìonraidhean gluasadach, far a bheil a’ chùis nuair a tha ping cluicheadair 200 ms fhathast air a mheas mar cheangal sàr-mhath. Gu tric faodaidh am ping a bhith 350, 500, no 1000 ms. An uairsin bidh e cha mhòr do-dhèanta shooter luath a chluich le dàil cuir a-steach.

Is e am fuasgladh don duilgheadas seo ro-innse atharrais taobh teachdaiche. An seo tha an neach-dèiligidh fhèin a’ cur a-steach an cuir a-steach gu caractar a’ chluicheadair, gun a bhith a’ feitheamh ri freagairt bhon fhrithealaiche. Agus nuair a gheibhear am freagairt, bidh e dìreach a’ dèanamh coimeas eadar na toraidhean agus ag ùrachadh suidheachadh an luchd-dùbhlain. Tha an dàil eadar putadh air iuchair agus taisbeanadh an toradh air an sgrion sa chùis seo glè bheag.

Tha e cudromach an nuance a thuigsinn an seo: bidh an neach-dèiligidh an-còmhnaidh ga tharraing fhèin a rèir a chuir a-steach mu dheireadh, agus nàimhdean - le dàil lìonra, a rèir na stàite roimhe bhon dàta bhon fhrithealaiche. Is e sin, nuair a bhios e a 'losgadh air nàmhaid, bidh an cluicheadair ga fhaicinn san àm a dh'fhalbh càirdeach dha fhèin. Tuilleadh mu ro-innse teachdaiche sgrìobh sinn na bu tràithe.

Mar sin, bidh ro-innse teachdaiche a ’fuasgladh aon duilgheadas, ach a’ cruthachadh duilgheadas eile: ma bhios cluicheadair a ’losgadh aig an ìre far an robh an nàmhaid san àm a dh’ fhalbh, air an fhrithealaiche nuair a bhios e a ’losgadh aig an aon àm, is dòcha nach bi an nàmhaid san àite sin tuilleadh. Bidh dìoladh lag frithealaiche a’ feuchainn ris an duilgheadas seo fhuasgladh. Nuair a thèid ball-airm a losgadh, bidh an frithealaiche ag ath-nuadhachadh staid a’ gheama a chunnaic an cluicheadair gu h-ionadail aig àm an t-seilg, agus a’ dèanamh cinnteach an robh e dha-rìribh comasach air an nàmhaid a bhualadh. Mas e am freagairt “tha,” tha am buille air a chunntadh, eadhon ged nach eil an nàmhaid air an t-seirbheisiche aig an àm sin.

Armaichte leis an eòlas seo, thòisich sinn air airgead-dìolaidh dàil frithealaiche a chuir an gnìomh ann an Dino Squad. An toiseach, bha againn ri tuigsinn mar a bheir sinn air ais air an fhrithealaiche na chunnaic an neach-dèiligidh? Agus dè dìreach a dh'fheumar a thoirt air ais? Anns a’ gheama againn, thathas a’ tomhas buillean bho bhuill-airm is chomasan tro chraolaidhean-ray agus ath-chòmhdach - is e sin, tro eadar-obrachadh le luchd-bualaidh corporra an nàmhaid. Mar sin, dh'fheumadh sinn ath-riochdachadh a dhèanamh air suidheachadh an luchd-bualadh sin, a "chunnaic an cluicheadair" gu h-ionadail, air an fhrithealaiche. Aig an àm sin bha sinn a’ cleachdadh Unity version 2018.x. Tha an API fiosaig an sin statach, tha an saoghal corporra ann an aon leth-bhreac. Chan eil dòigh ann air a staid a shàbhaladh agus an uairsin a thoirt air ais bhon bhogsa. Mar sin dè a nì thu?

Bha am fuasgladh air an uachdar; bha sinn mu thràth air na h-eileamaidean gu lèir a chleachdadh gus fuasgladh fhaighinn air duilgheadasan eile:

  1. Airson gach neach-dèiligidh, feumaidh fios a bhith againn dè an uair a chunnaic e luchd-dùbhlain nuair a bhrùth e na h-iuchraichean. Tha sinn mu thràth air am fiosrachadh seo a sgrìobhadh a-steach don phasgan cuir a-steach agus air a chleachdadh gus ro-innse teachdaiche atharrachadh.
  2. Feumaidh sinn a bhith comasach air eachdraidh stàitean geama a stòradh. Is ann an sin a chumas sinn suidheachadh ar nàimhdean (agus mar sin an luchd-bualaidh). Bha eachdraidh stàite againn mu thràth air an fhrithealaiche, chleachd sinn e airson togail deltas. Le eòlas air an àm cheart, b’ urrainn dhuinn gu furasta an suidheachadh ceart a lorg ann an eachdraidh.
  3. A-nis gu bheil staid a 'gheama againn bho eachdraidh na làimh, feumaidh sinn a bhith comasach air dàta cluicheadair a shioncronachadh le staid an t-saoghail chorporra. Luchd-bualaidh gnàthaichte - gluais, feadhainn a tha a dhìth - cruthaich, feadhainn neo-riatanach - sgrios. Chaidh an loidsig seo a sgrìobhadh mu thràth cuideachd agus bha grunn shiostaman ECS ann. Chleachd sinn e airson grunn sheòmraichean geama a chumail ann an aon phròiseas Unity. Agus leis gu bheil an saoghal corporra mar aon airson gach pròiseas, dh'fheumadh e ath-chleachdadh eadar seòmraichean. Ro gach diog den atharrais, bidh sinn “ag ath-shuidheachadh” staid an t-saoghail chorporra agus ga ath-thòiseachadh le dàta airson an t-seòmar gnàthach, a’ feuchainn ri stuthan geama Unity ath-chleachdadh cho mòr ‘s as urrainn tro shiostam cruinneachaidh ciallach. Cha robh air fhàgail ach an aon reusanachadh airson staid a’ gheama bhon àm a dh’ fhalbh.

Le bhith a’ cur na h-eileamaidean sin uile ri chèile, fhuair sinn “inneal-tìm” a dh’ fhaodadh staid an t-saoghail chorporra a thoirt air ais chun mhionaid cheart. Thionndaidh an còd a-mach gu bhith sìmplidh:

public class TimeMachine : ITimeMachine
{
     //История игровых состояний
     private readonly IGameStateHistory _history;

     //Текущее игровое состояние на сервере
     private readonly ExecutableSystem[] _systems;

     //Набор систем, расставляющих коллайдеры в физическом мире 
     //по данным из игрового состояния
     private readonly GameState _presentState;

     public TimeMachine(IGameStateHistory history, GameState presentState, ExecutableSystem[] timeInitSystems)
     {
         _history = history; 
         _presentState = presentState;
         _systems = timeInitSystems;  
     }

     public GameState TravelToTime(int tick)
     {
         var pastState = tick == _presentState.Time ? _presentState : _history.Get(tick);
         foreach (var system in _systems)
         {
             system.Execute(pastState);
         }
         return pastState;
     }
}

Cha robh air fhàgail ach faighinn a-mach mar a chleachdas tu an inneal seo gus dìoladh a dhèanamh gu furasta airson seallaidhean agus comasan.

Anns a 'chùis as sìmplidh, nuair a tha na meacanaig stèidhichte air aon bhuailcan, tha coltas gu bheil a h-uile dad soilleir: mus tèid an cluicheadair a losgadh, feumaidh e an saoghal corporra a thoirt air ais chun staid a tha a dhìth, craoladh a dhèanamh, cunntadh am bualadh no an call, agus tilleadh an saoghal chun a’ chiad staid.

Ach chan eil ach glè bheag de mheacanaig mar sin ann an Dino Squad! Bidh a’ mhòr-chuid de bhuill-airm a’ gheama a’ cruthachadh projectiles - peilearan fad-ùine a bhios ag itealaich airson grunn bhreacan atharrais (ann an cuid de chùisean, dusanan de bhreaban). Dè a dhèanamh leotha, dè an uair a bu chòir dhaibh itealaich?

В artaigil àrsaidh mu chruach lìonra Half-Life, dh’ fhaighnich na balaich bho Valve an aon cheist, agus b’ e am freagairt seo: tha airgead-dìolaidh dàil projectile na dhuilgheadas, agus tha e nas fheàrr a sheachnadh.

Cha robh an roghainn seo againn: bha armachd stèidhichte air projectile na phrìomh fheart de dhealbhadh a’ gheama. Mar sin dh'fheumadh sinn rudeigin a chruthachadh. Às deidh beagan cnuasachadh, chuir sinn ri chèile dà roghainn a bha coltach gu robh iad ag obair:

1. Bidh sinn a 'ceangal an projectile ri àm a' chluicheadair a chruthaich e. A h-uile diog de shamhla an fhrithealaiche, airson a h-uile peilear de gach cluicheadair, bidh sinn a’ roiligeadh air ais an saoghal fiosaigeach gu staid an neach-dèiligidh agus a’ dèanamh an àireamhachadh riatanach. Bha an dòigh-obrach seo ga dhèanamh comasach eallach sgaoilte a bhith air an fhrithealaiche agus ùine itealaich ro-innseach airson projectiles. Bha ro-innseachd gu sònraichte cudromach dhuinn, leis gu bheil sinn uile air projectiles, a’ toirt a-steach projectiles nàmhaid, air an ro-innse air an neach-dèiligidh.

Mar a leasaich sinn meacanaig àireamhachadh ballistic airson neach-losgaidh gluasadach le algairim dìolaidh latency lìonra
Anns an dealbh, bidh an cluicheadair aig diog 30 a’ losgadh urchair le dùil: chì e dè an taobh a tha an nàmhaid a’ ruith agus tha fios aige air astar tuairmseach an urchair. Gu h-ionadail tha e a’ faicinn gun do bhuail e an targaid aig an 33mh diog. Taing gu dìoladh lag, nochdaidh e air an fhrithealaiche cuideachd

2. Bidh sinn a 'dèanamh a h-uile rud mar a tha anns a' chiad roghainn, ach, an dèidh aon diog den atharrais peilearan a chunntadh, cha bhith sinn a 'stad, ach a' leantainn oirnn a 'dèanamh atharrais air an itealan aige taobh a-staigh an aon diog frithealaiche, gach uair a' toirt an ùine aige nas fhaisge air an fhrithealaiche cuir diog aon ri aon agus ag ùrachadh suidheachadh luchd-bualaidh. Bidh sinn a’ dèanamh seo gus an tachair aon de dhà rud:

  • Tha am peilear air tighinn gu crìch. Tha seo a’ ciallachadh gu bheil an àireamhachadh seachad, is urrainn dhuinn call no buille a chunntadh. Agus seo aig an aon diog anns an deach am peilear a losgadh! Dhuinne bha seo na bhuannachd agus na minus. A bharrachd - oir airson an cluicheadair losgaidh lughdaich seo gu mòr an dàil eadar am bualadh agus an lùghdachadh ann an slàinte an nàmhaid. Is e an rud as ìsle a th’ ann gun deach an aon bhuaidh a choimhead nuair a loisg luchd-dùbhlain air a’ chluicheadair: cha do loisg an nàmhaid, tha e coltach, ach rocaid slaodach, agus chaidh am milleadh a chunntadh mu thràth.
  • Tha am peilear air ùine an fhrithealaiche a ruighinn. Anns a ’chùis seo, leanaidh an atharrais aige anns an ath diog frithealaiche gun dìoladh dàil sam bith. Airson projectiles slaodach, dh ’fhaodadh seo gu teòiridheach an àireamh de ro-aithrisean fiosaig a lughdachadh an taca ris a’ chiad roghainn. Aig an aon àm, mheudaich an luchd neo-chòmhnard air an atharrais: bha am frithealaiche an dàrna cuid leisg, no ann an aon diog frithealaiche bha e a’ cunntadh dusan tic atharrais airson grunn peilearan.

Mar a leasaich sinn meacanaig àireamhachadh ballistic airson neach-losgaidh gluasadach le algairim dìolaidh latency lìonra
An aon suidheachadh ris an dealbh roimhe, ach air a thomhas a rèir an dàrna sgeama. Tha an urchair “air a ghlacadh” le ùine an fhrithealaiche aig an aon diog a thachair an dealbh, agus faodar am buille a chunntadh cho tràth ris an ath diog. Aig an 31mh diog, sa chùis seo, chan eil dìoladh lag air a chuir an sàs tuilleadh

Nar buileachadh, bha an dà dhòigh-obrach seo eadar-dhealaichte ann an dìreach sreath no dhà de chòd, agus mar sin chruthaich sinn an dà chuid, agus airson ùine fhada bha iad ann aig an aon àm. A rèir meacanaig an airm agus astar a’ pheilear, thagh sinn roghainn no dhà airson gach dineosaur. B’ e an t-àite tionndaidh an seo coltas ann an geama meacanaig mar “ma bhuaileas tu an nàmhaid cho tric ann an leithid de dh’ ùine, faigh a leithid de bhuannachd. ” Dhiùlt meacanaig sam bith far an robh an ùine aig an do bhuail an cluicheadair an nàmhaid pàirt chudromach a bhith ag obair leis an dàrna dòigh-obrach. Mar sin chrìochnaich sinn a 'dol leis a' chiad roghainn, agus tha e a-nis a 'buntainn ris a h-uile ball-airm agus a h-uile comas gnìomhach sa gheama.

Air leth, is fhiach a 'chùis mu choileanadh a thogail. Ma bha thu a’ smaoineachadh gun cuireadh seo uile maill air cùisean, freagraidh mi: tha. Tha aonachd gu math slaodach ann a bhith a’ gluasad luchd-bualaidh agus gan tionndadh air agus dheth. Ann an Dino Squad, anns a ’chùis“ as miosa ”, faodaidh grunn cheudan projectiles a bhith ann aig an aon àm ann an sabaid. Is e sòghalachd neo-ruigsinneach a th’ ann a bhith a’ gluasad luchd-bualaidh gus gach projectile a chunntadh leotha fhèin. Mar sin, bha e gu tur riatanach dhuinn an àireamh de “rollbacks” fiosaig a lughdachadh. Gus seo a dhèanamh, chruthaich sinn pàirt air leth ann an ECS anns am bi sinn a’ clàradh ùine a’ chluicheadair. Chuir sinn e ris a h-uile buidheann a dh’ fheumas dìoladh lag (pròiseactan, comasan, msaa). Mus tòisich sinn air a leithid de bhuidhnean a ghiullachd, bidh sinn gan cruinneachadh ron àm seo agus gan giullachd còmhla, a’ toirt air ais an saoghal corporra aon uair airson gach buidheann.

Aig an ìre seo tha siostam obrachaidh coitcheann againn. A chòd ann an cruth beagan nas sìmplidhe:

public sealed class LagCompensationSystemGroup : ExecutableSystem
{
     //Машина времени
     private readonly ITimeMachine _timeMachine;

     //Набор систем лагкомпенсации
     private readonly LagCompensationSystem[] _systems;
     
     //Наша реализация кластеризатора
     private readonly TimeTravelMap _travelMap = new TimeTravelMap();

    public LagCompensationSystemGroup(ITimeMachine timeMachine, 
        LagCompensationSystem[] lagCompensationSystems)
     {
         _timeMachine = timeMachine;
         _systems = lagCompensationSystems;
     }

     public override void Execute(GameState gs)
     {
         //На вход кластеризатор принимает текущее игровое состояние,
         //а на выход выдает набор «корзин». В каждой корзине лежат энтити,
         //которым для лагкомпенсации нужно одно и то же время из истории.
         var buckets = _travelMap.RefillBuckets(gs);

         for (int bucketIndex = 0; bucketIndex < buckets.Count; bucketIndex++)
         {
             ProcessBucket(gs, buckets[bucketIndex]);
         }

         //В конце лагкомпенсации мы восстанавливаем физический мир 
         //в исходное состояние
         _timeMachine.TravelToTime(gs.Time);
     }

     private void ProcessBucket(GameState presentState, TimeTravelMap.Bucket bucket)
     {
         //Откатываем время один раз для каждой корзины
         var pastState = _timeMachine.TravelToTime(bucket.Time);

         foreach (var system in _systems)
         {
               system.PastState = pastState;
               system.PresentState = presentState;

               foreach (var entity in bucket)
               {
                   system.Execute(entity);
               }
          }
     }
}

Cha robh air fhàgail ach am mion-fhiosrachadh a rèiteachadh:

1. Tuig dè an ìre airson an astar gluasaid as àirde a chuingealachadh ann an ùine.

Bha e cudromach dhuinn an geama a dhèanamh cho ruigsinneach sa ghabhas ann an suidheachaidhean de dhroch lìonraidhean gluasadach, agus mar sin chuir sinn crìoch air an sgeulachd le iomall de 30 tic (le ìre diog de 20 Hz). Leigidh seo le cluicheadairean luchd-dùbhlain a bhualadh eadhon aig pings fìor àrd.

2. Obraich a-mach dè na nithean a ghabhas gluasad ann an tìde agus nach gabh.

Tha sinn, gu dearbh, a 'gluasad ar luchd-dùbhlain. Ach chan eil sgiathan lùth so-stàlaidh, mar eisimpleir. Cho-dhùin sinn gu robh e na b’ fheàrr prìomhachas a thoirt don chomas dìon, mar a tha gu tric air a dhèanamh ann an luchd-seilg air-loidhne. Ma tha an cluicheadair air sgiath a chuir san latha an-diugh, cha bu chòir peilearan le dìoladh lag bhon àm a dh’ fhalbh a dhol troimhe.

3. Dèan co-dhùnadh a bheil e riatanach dìoladh a dhèanamh airson comasan nan dineosairean: bìdeadh, stailc earbaill, msaa.

4. Obraich a-mach dè a nì thu le luchd-bualadh a' chluicheadair dha bheil airgead-dìolaidh ga dhèanamh. Ann an dòigh mhath, cha bu chòir an suidheachadh aca gluasad a-steach don àm a dh'fhalbh: bu chòir don chluicheadair e fhèin fhaicinn anns an aon ùine anns a bheil e a-nis air an fhrithealaiche. Ach, bidh sinn cuideachd a ’toirt air ais luchd-bualadh a’ chluicheadair losgaidh, agus tha grunn adhbharan ann airson seo.

An toiseach, bidh e a’ leasachadh cruinneachadh: is urrainn dhuinn an aon staid corporra a chleachdadh airson a h-uile cluicheadair le pings dlùth.

San dàrna h-àite, anns a h-uile craoladh-ray agus tar-tharraing bidh sinn an-còmhnaidh a’ dùnadh a-mach luchd-bualadh a ’chluicheadair leis a bheil na comasan no na projectiles. Ann an Dino Squad, bidh smachd aig cluicheadairean air dineosairean, aig a bheil geoimeatraidh caran neo-àbhaisteach a rèir ìrean seilg. Fiù ma bhios an cluicheadair a’ losgadh aig ceàrn neo-àbhaisteach agus slighe a’ pheilear a’ dol tro inneal-losgaidh dineosaur a’ chluicheadair, bheir am peilear seachad aire dha.

San treas àite, bidh sinn ag obrachadh a-mach suidheachadh armachd an dineosaur no puing cur an gnìomh a’ chomais a’ cleachdadh dàta bhon ECS eadhon mus tòisich airgead-dìolaidh lag.

Mar thoradh air an sin, chan eil fìor shuidheachadh luchd-bualaidh a ’chluicheadair le dìoladh lag cudromach dhuinn, agus mar sin ghabh sinn slighe nas cinneasaiche agus aig an aon àm nas sìmplidhe.

Chan urrainnear latency lìonra a thoirt air falbh gu sìmplidh, chan urrainnear a chuir am falach. Coltach ri dòigh sam bith eile air falach, tha airgead-dìolaidh aig luchd-frithealaidh air a mhalairt. Bidh e a’ leasachadh eòlas cluich a’ chluicheadair a tha a’ losgadh aig cosgais a’ chluicheadair air a bheilear a’ losgadh. Airson Dino Squad, ge-tà, bha an roghainn an seo follaiseach.

Gu dearbh, dh'fheumadh seo a bhith air a phàigheadh ​​​​air a shon le barrachd iom-fhillteachd còd an fhrithealaiche gu h-iomlan - an dà chuid airson luchd-prògramaidh agus dealbhadairean geama. Ma bha an atharrais na bu thràithe na ghairm sìmplidh sreathach de shiostaman, an uairsin le dìoladh lag, nochd lùban neadachaidh agus geugan ann. Chuir sinn seachad tòrr oidhirp cuideachd gus a dhèanamh goireasach a bhith ag obair leis.

Anns an dreach 2019 (agus is dòcha beagan na bu thràithe), chuir Unity làn thaic ri seallaidhean corporra neo-eisimeileach. Chuir sinn an gnìomh iad air an t-seirbheisiche cha mhòr sa bhad às deidh an ùrachadh, oir bha sinn airson faighinn cuidhteas gu sgiobalta bhon t-saoghal chorporra a bha cumanta anns a h-uile seòmar.

Thug sinn a shealladh corporra fhèin do gach seòmar geama agus mar sin chuir sinn às don fheum air an t-sealladh “glanadh” bho dhàta an t-seòmair ri thaobh mus deach an atharrais a thomhas. An toiseach, thug e àrdachadh mòr ann an cinneasachd. San dàrna h-àite, thug e air faighinn cuidhteas clas slàn de bhiteagan a dh’ èirich ma rinn am prògramadair mearachd ann an còd glanadh an t-seallaidh nuair a chuir e eileamaidean geama ùra ris. Bha mearachdan mar seo duilich a dheasbad, agus gu tric bhiodh iad a 'ciallachadh gu robh staid stuthan corporra ann an sealladh aon rùm "a' sruthadh" a-steach do sheòmar eile.

A bharrachd air an sin, rinn sinn beagan rannsachaidh air an gabhadh seallaidhean fiosaigeach a chleachdadh gus eachdraidh an t-saoghail chorporra a stòradh. Is e sin, le cumhachan, chan e aon sealladh a roinn anns gach seòmar, ach 30 sealladh, agus dèan bufair cearcallach a-mach às an sin, airson an sgeulachd a stòradh. San fharsaingeachd, bha an roghainn ag obair, ach cha do chuir sinn an gnìomh e: cha do sheall e àrdachadh seòlta ann an cinneasachd, ach bha feum air atharrachaidhean caran cunnartach. Bha e duilich ro-innse ciamar a bhiodh an frithealaiche gan giùlan fhèin nuair a bha e ag obair airson ùine mhòr le uimhir de sheallaidhean. Mar sin, lean sinn an riaghailt: “Mura h-eil e air a bhriseadh, na cuir air dòigh e".

Source: www.habr.com

Cuir beachd ann