A 'cluich Rust ann an 24 uairean: eòlas leasachaidh pearsanta

A 'cluich Rust ann an 24 uairean: eòlas leasachaidh pearsanta

San artaigil seo bruidhnidh mi mun eòlas pearsanta agam air geama beag a leasachadh ann an Rust. Thug e timcheall air 24 uairean airson dreach obrach a chruthachadh (bha mi ag obair mar as trice air an fheasgar no air deireadh-sheachdainean). Tha an geama fada bho bhith deiseil, ach tha mi a’ smaoineachadh gum bi an t-eòlas buannachdail. Roinnidh mi na dh’ ionnsaich mi agus cuid de na beachdan a rinn mi fhad ‘s a bha mi a’ togail a ’gheama bhon fhìor thoiseach.

Tha Skillbox a’ moladh: Cùrsa practaigeach dà bhliadhna "Tha mi nam leasaiche lìn PRO".

Tha sinn a ’cur nar cuimhne: airson a h-uile leughadair de "Habr" - lasachadh de 10 rubles nuair a chlàraicheas tu ann an cùrsa sam bith Skillbox a 'cleachdadh a' chòd adhartachaidh "Habr".

Carson Rust?

Thagh mi an cànan seo oir tha mi air tòrr rudan math a chluinntinn mu dheidhinn agus tha mi ga fhaicinn a’ fàs nas mòr-chòrdte ann an leasachadh geama. Mus do sgrìobh mi an geama, cha robh mòran eòlais agam a bhith a’ leasachadh thagraidhean sìmplidh ann an Rust. Bha seo dìreach gu leòr airson faireachdainn saorsa a thoirt dhomh fhad ‘s a bha mi a’ sgrìobhadh a ’gheama.

Carson a tha an geama agus dè an seòrsa geama?

Tha e spòrsail a bhith a’ dèanamh gheamannan! Tha mi a’ guidhe gum biodh barrachd adhbharan ann, ach airson pròiseactan “dachaigh” tha mi a’ taghadh cuspairean nach eil ro dhlùth ris an obair àbhaisteach agam. Dè an gèam a tha seo? Bha mi airson rudeigin mar simuladair teanas a dhèanamh a cothlamadh Cities Skylines, Zoo Tycoon, Prison Architect agus teanas fhèin. San fharsaingeachd, b 'e geama a bh' ann mu dheidhinn acadamaidh teanas far am bi daoine a 'tighinn a chluich.

Trèanadh teicnigeach

Bha mi airson Rust a chleachdadh, ach cha robh fios agam dè an ìre de bhun-stèidh a bheireadh e airson tòiseachadh. Cha robh mi airson sgàilearan picteil a sgrìobhadh agus drag-n-drop a chleachdadh, agus mar sin bha mi a’ coimhead airson na fuasglaidhean as sùbailte.

Lorg mi goireasan feumail a bhios mi a’ roinn leat:

Rannsaich mi grunn einnseanan geama Rust, a 'taghadh Piston agus ggez aig a' cheann thall. Thàinig mi tarsainn orra fhad ‘s a bha mi ag obair air pròiseact a bh’ ann roimhe. Aig a’ cheann thall, thagh mi ggez oir bha e a’ coimhead nas freagarraiche airson geama beag 2D a chuir an gnìomh. Tha structar modular Piston ro iom-fhillte airson leasaiche ùr (no cuideigin a tha ag obair le Rust airson a 'chiad uair).

Structar geama

Chuir mi seachad beagan ùine a 'smaoineachadh air ailtireachd a' phròiseict. Is e a 'chiad cheum "fearann" a dhèanamh, daoine agus cùirtean teanas. Feumaidh daoine gluasad timcheall nan cùirtean agus feitheamh. Feumaidh sgilean a bhith aig cluicheadairean a leasaicheas thar ùine. A bharrachd air an sin, bu chòir neach-deasachaidh a bhith ann a leigeas leat daoine agus cùirtean ùra a chuir ris, ach chan eil seo an-asgaidh tuilleadh.

An dèidh smaoineachadh air a h-uile càil, fhuair mi obair.

Geamannan a chruthachadh

Tòiseachadh: Cearcallan agus Abtractions

Thug mi eisimpleir bho ggez agus fhuair mi cearcall air an sgrion. Iongantach! A-nis cuid de ghearraidhean. Bha mi a 'smaoineachadh gum biodh e math a bhith a' tarraing air falbh bhon bheachd air rud geama. Feumaidh gach nì a bhith air a thoirt seachad agus air ùrachadh mar a chaidh a ràdh an seo:

// the game object trait
trait GameObject {
    fn update(&mut self, _ctx: &mut Context) -> GameResult<()>;
    fn draw(&mut self, ctx: &mut Context) -> GameResult<()>;
}
 
// a specific game object - Circle
struct Circle {
    position: Point2,
}
 
 impl Circle {
    fn new(position: Point2) -> Circle {
        Circle { position }
    }
}
impl GameObject for Circle {
    fn update(&mut self, _ctx: &mut Context) -> GameResult<()> {
        Ok(())
    }
    fn draw(&mut self, ctx: &mut Context) -> GameResult<()> {
        let circle =
            graphics::Mesh::new_circle(ctx, graphics::DrawMode::Fill, self.position, 100.0, 2.0)?;
 
         graphics::draw(ctx, &circle, na::Point2::new(0.0, 0.0), 0.0)?;
        Ok(())
    }
}

Thug am pìos còd seo dhomh liosta snog de stuthan a b’ urrainn dhomh ùrachadh agus a thoirt seachad ann an lùb a cheart cho snog.

mpl event::EventHandler for MainState {
    fn update(&mut self, context: &mut Context) -> GameResult<()> {
        // Update all objects
        for object in self.objects.iter_mut() {
            object.update(context)?;
        }
 
        Ok(())
    }
 
    fn draw(&mut self, context: &mut Context) -> GameResult<()> {
        graphics::clear(context);
 
        // Draw all objects
        for object in self.objects.iter_mut() {
            object.draw(context)?;
        }
 
        graphics::present(context);
 
        Ok(())
    }
}

tha feum air main.rs oir tha a h-uile loidhne de chòd ann. Chuir mi seachad beagan ùine a 'sgaradh nam faidhlichean agus a' dèanamh an fheum as fheàrr de structar an eòlaire. Seo mar a bha e coltach às deidh sin:
goireasan -> seo far a bheil a’ mhaoin gu lèir (ìomhaighean)
SRC
- buidhnean
— geama_object.rs
— cearcall.rs
— main.rs -> prìomh lùb

Daoine, làir agus dealbhan

Is e an ath cheum rud geama Person a chruthachadh agus ìomhaighean a luchdachadh. Bu chòir a h-uile dad a thogail air bunait leacan 32 * 32.

A 'cluich Rust ann an 24 uairean: eòlas leasachaidh pearsanta

Cùirtean teanas

Às deidh dhomh sgrùdadh a dhèanamh air cò ris a tha cùirtean teanas coltach, chuir mi romham an dèanamh bho leac 4 * 2. An toiseach, bha e comasach ìomhaigh den mheud seo a dhèanamh, no 8 leacan fa leth a chuir ri chèile. Ach an uairsin thuig mi nach robh feum air ach dà leac sònraichte, agus seo carson.

Gu h-iomlan tha dà leac mar sin againn: 1 agus 2.

Tha gach earrann den chùirt air a dhèanamh suas de leac 1 no leac 2. Faodaidh iad a bhith air an cur sìos mar as àbhaist no air an tionndadh gu 180 ceum.

A 'cluich Rust ann an 24 uairean: eòlas leasachaidh pearsanta

Modh togail bunaiteach (co-chruinneachadh).

Às deidh dhomh a bhith comasach air làraich, daoine agus mapaichean a thoirt seachad, thuig mi gu robh feum air modh cruinneachaidh bunaiteach cuideachd. Chuir mi an gnìomh e mar seo: nuair a thèid am putan a bhrùthadh, tha an nì air a thaghadh, agus bidh an cliog ga chuir san àite a tha thu ag iarraidh. Mar sin, leigidh putan 1 leat cùirt a thaghadh, agus leigidh putan 2 leat cluicheadair a thaghadh.

Ach feumaidh sinn cuimhneachadh fhathast dè tha 1 agus 2 a’ ciallachadh, agus mar sin chuir mi frèam-uèir ris gus a dhèanamh soilleir dè an nì a chaidh a thaghadh. Seo mar a tha e coltach.

A 'cluich Rust ann an 24 uairean: eòlas leasachaidh pearsanta

Ceistean airson ailtireachd agus ath-sgrùdadh

A-nis tha grunn rudan geama agam: daoine, cùirtean agus làir. Ach gus am bi frèamaichean uèir ag obair, feumar innse do gach eintiteas a bheil na nithean fhèin ann am modh taisbeanaidh, no a bheil frèam dìreach air a tharraing. Chan eil seo gu math goireasach.

Bha e coltach riumsa gum feumadh an ailtireachd ath-bheachdachadh ann an dòigh a nochd cuid de chuingealachaidhean:

  • Tha e na dhuilgheadas a bhith a’ faighinn eintiteas a bheir seachad agus ag ùrachadh e fhèin oir cha bhith e comasach don eintiteas sin “fios” dè a bu chòir a thoirt seachad - ìomhaigh agus frèam uèir;
  • dìth inneal airson feartan agus giùlan iomlaid eadar buidhnean fa leth (mar eisimpleir, seilbh is_build_mode no toirt seachad giùlan). Bhiodh e comasach dìleab a chleachdadh, ged nach eil dòigh cheart air a bhuileachadh ann an Rust. Is e an rud a bha a dhìth orm gu mòr an cruth;
  • bha feum air inneal airson eadar-obrachadh eadar buidhnean gus daoine a shònrachadh gu cùirtean;
  • bha na buidhnean fhèin mar mheasgachadh de dhàta agus loidsig a chaidh a-mach à smachd gu sgiobalta.

Rinn mi tuilleadh rannsachaidh agus lorg mi an ailtireachd ECS - Siostam co-phàirteach eintiteas, a tha gu tric air a chleachdadh ann an geamannan. Seo na buannachdan bho ECS:

  • dàta air a sgaradh bho loidsig;
  • sgrìobhadh an àite oighreachd;
  • ailtireachd stèidhichte air dàta.

Tha trì bun-bheachdan bunaiteach aig ECS:

  • aonadan - an seòrsa nì air a bheil an aithnichear a’ toirt iomradh (dh’ fhaodadh gur e cluicheadair, ball no rudeigin eile a th’ ann);
  • co-phàirtean - tha buidhnean air an dèanamh suas dhiubh. Eisimpleir - pàirt tairgse, àiteachan agus feadhainn eile. Is iad sin stòran dàta;
  • siostaman - bidh iad a 'cleachdadh an dà chuid nithean agus co-phàirtean, agus tha giùlan agus loidsig ann a tha stèidhichte air an dàta seo. Is e eisimpleir eisimpleir siostam tairgse a bhios ag ath-aithris tro gach eintiteas le co-phàirtean tairgse agus a nì an toirt seachad.

An dèidh sgrùdadh a dhèanamh air, dh'fhàs e soilleir gu bheil ECS a 'fuasgladh nan duilgheadasan a leanas:

  • cleachdadh cruth an àite oighreachd gus buidhnean a chur air dòigh gu riaghailteach;
  • faighinn cuidhteas jumble còd tro shiostaman smachd;
  • a’ cleachdadh dhòighean mar is_build_mode gus loidsig frèam-uèir a chumail san aon àite - anns an t-siostam tairgse.

Is e seo a thachair às deidh dha ECS a chuir an gnìomh.

goireasan -> seo far a bheil a’ mhaoin gu lèir (ìomhaighean)
SRC
- co-phàirtean
- suidheachadh.rs
— duine.rs
— tennis_court.rs
— ùrlar.rs
- wireframe.rs
— mouse_tracked.rs
- goireasan
-luch.rs
- siostaman
- a' toirt seachad.rs
— seasmhach.rs
— goireasan.rs
— world_factory.rs -> gnìomhan factaraidh an t-saoghail
— main.rs -> prìomh lùb

Bidh sinn a’ sònrachadh dhaoine gu na cùirtean

Tha ECS air beatha a dhèanamh nas fhasa. A-nis bha dòigh rianail agam airson dàta a chuir ri buidhnean agus loidsig a chuir ris stèidhichte air an dàta sin. Agus rinn seo, an uair sin, e comasach cuairteachadh dhaoine a chuir air dòigh am measg nan cùirtean.

Dè rinn mi:

  • dàta a chur ris mu chùirtean ainmichte don Duine;
  • dàta a bharrachd mu dhaoine sgaoilte gu TennisCourt;
  • chuir CourtChoosingSystem ris, a leigeas leat daoine agus cùirtean a sgrùdadh, cùirtean a tha rim faighinn a lorg agus cluicheadairean a sgaoileadh thuca;
  • chuir e PersonMovementSystem ris, a bhios a’ coimhead airson daoine a tha air an sònrachadh gu na cùirtean, agus mura h-eil iad ann, an uairsin a chuireas daoine far am feum iad a bhith.

A 'cluich Rust ann an 24 uairean: eòlas leasachaidh pearsanta

A 'togail suas

Chòrd e rium gu mòr a bhith ag obair air a’ gheama shìmplidh seo. A bharrachd air an sin, tha mi toilichte gun do chleachd mi Rust airson a sgrìobhadh, oir:

  • Bheir meirge dhut na tha a dhìth ort;
  • tha sgrìobhainnean sàr-mhath aige, tha Rust gu math eireachdail;
  • tha cunbhalachd fionnar;
  • chan fheum thu a dhol gu clonadh, copaidh no gnìomhan eile den aon seòrsa, a rinn mi gu tric ann an C ++;
  • Tha roghainnean gu math furasta an cleachdadh agus làimhseachadh mhearachdan glè mhath;
  • ma bha am pròiseact comasach air a chur ri chèile, an uairsin 99% den ùine a bhios e ag obair, agus dìreach mar a bu chòir. Tha mi a’ smaoineachadh gur e na teachdaireachdan mearachd compiler an fheadhainn as fheàrr a chunnaic mi.

Tha leasachadh geama ann an Rust dìreach a’ tòiseachadh. Ach tha coimhearsnachd seasmhach agus meadhanach mòr ann mu thràth ag obair gus Rust fhosgladh don h-uile duine. Mar sin, bidh mi a’ coimhead air àm ri teachd a’ chànain le dòchas, a’ coimhead air adhart ri toraidhean ar n-obair chumanta.

Tha Skillbox a’ moladh:

Source: www.habr.com

Cuir beachd ann