Ag imirt meirge i 24 uair an chloig: taithí forbartha pearsanta

Ag imirt meirge i 24 uair an chloig: taithí forbartha pearsanta

San Airteagal seo beidh mé ag caint faoi mo thaithí phearsanta ar fhorbairt cluiche beag i Rust. Thóg sé thart ar 24 uair an chloig chun leagan oibre a chruthú (d'oibrigh mé sa tráthnóna nó ar an deireadh seachtaine den chuid is mó). Tá an cluiche i bhfad ó bheith críochnaithe, ach is dóigh liom go mbeidh an taithí sásúil. Roinnfidh mé an méid a d'fhoghlaim mé agus roinnt tuairimí a rinne mé agus mé ag tógáil an chluiche ón tús.

Molann Skillbox: Cúrsa praiticiúil dhá bhliain "Is forbróir gréasáin OCP mé".

Meabhraímid: do léitheoirí uile "Habr" - lascaine de 10 rúbal nuair a chláraíonn siad in aon chúrsa Scilbox ag baint úsáide as an gcód bolscaireachta "Habr".

Cén fáth meirge?

Roghnaigh mé an teanga seo mar tá a lán rudaí maith cloiste agam faoi agus feicim go bhfuil ag éirí níos coitianta í i bhforbairt cluichí. Sular scríobh mé an cluiche, ní raibh mórán taithí agam ag forbairt feidhmchláir shimplí i Rust. Ba leor é seo chun mothú na saoirse a thabhairt dom agus an cluiche á scríobh.

Cén fáth an cluiche agus cén cineál cluiche?

Is iontach an rud é cluichí a dhéanamh! Ba mhian liom go mbeadh níos mó cúiseanna ann, ach do thionscadail “bhaile” roghnaím topaicí nach bhfuil gaol ró-dhlúth acu le mo ghnáthobair. Cén cluiche é seo? Bhí mé ag iarraidh rud éigin cosúil le insamhlóir leadóige a dhéanamh a chomhcheanglaíonn Cities Skylines, Zoo Tycoon, Prison Architect agus leadóg féin. Go ginearálta, d'éirigh sé amach a bheith ina cluiche faoi acadamh leadóige nuair a thagann daoine a imirt.

Oiliúint theicniúil

Bhí mé ag iarraidh Rust a úsáid, ach ní raibh a fhios agam go díreach cé mhéad bunobair a thógfadh sé chun tosú. Ní raibh mé ag iarraidh scáthaitheoirí picteilín a scríobh agus drag-n-drop a úsáid, agus mar sin bhí na réitigh is solúbtha á lorg agam.

Fuair ​​​​mé acmhainní úsáideacha a roinnim leat:

Rinne mé iniúchadh ar roinnt inneall cluiche Rust, ag roghnú Piston agus ggez ar deireadh thiar. Tháinig mé trasna orthu agus mé ag obair ar thionscadal roimhe seo. Sa deireadh, roghnaigh mé ggez toisc go raibh an chuma air níos oiriúnaí chun cluiche beag 2D a chur i bhfeidhm. Tá struchtúr modúlach Piston ró-chasta d'fhorbróir novice (nó do dhuine atá ag obair le Rust den chéad uair).

Struchtúr an chluiche

Chaith mé roinnt ama ag smaoineamh ar ailtireacht an tionscadail. Is é an chéad chéim ná "talamh", daoine agus cúirteanna leadóige a dhéanamh. Caithfidh daoine bogadh timpeall na gcúirteanna agus fanacht. Caithfidh scileanna a bheith ag imreoirí a fheabhsaíonn le himeacht ama. Ina theannta sin, ba cheart go mbeadh eagarthóir ann a ligeann duit daoine agus cúirteanna nua a chur leis, ach níl sé seo saor in aisce a thuilleadh.

Tar éis dom a bheith ag smaoineamh ar gach rud, chuaigh mé ag obair.

Cluiche a chruthú

Tús: Ciorcail agus Astarraingt

Ghlac mé sampla ó ggez agus fuair mé ciorcal ar an scáileán. Iontach! Anois roinnt astarraingtí. Shíl mé go mbeadh sé deas teibí ar shiúl ón smaoineamh ar réad cluiche. Ní mór gach réad a rindreáil agus a nuashonrú mar a luaitear anseo:

// 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 an píosa cód seo liosta deas rudaí dom a d'fhéadfainn a nuashonrú agus a sholáthar i lúb chomh deas.

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(())
    }
}

tá gá le main.rs toisc go bhfuil na línte cód go léir ann. Chaith mé beagán ama ag scaradh na gcomhad agus ag uasmhéadú struchtúr an eolaire. Seo an chuma a bhí air ina dhiaidh sin:
acmhainní -> seo an áit a bhfuil na sócmhainní go léir (íomhánna)
src
- eintitis
— cluiche_object.rs
— ciorcal.rs
— main.rs -> príomhlúb

Daoine, urláir agus íomhánna

Is é an chéad chéim eile ná réad cluiche Duine a chruthú agus íomhánna a luchtú. Ba chóir gach rud a thógáil ar bhonn tíleanna 32 * 32.

Ag imirt meirge i 24 uair an chloig: taithí forbartha pearsanta

Cúirteanna leadóige

Tar éis dom staidéar a dhéanamh ar an gcuma atá ar chúirteanna leadóige, chinn mé iad a dhéanamh as tíleanna 4*2. Ar dtús, bhí sé indéanta íomhá den mhéid seo a dhéanamh, nó 8 tíleanna ar leith a chur le chéile. Ach ansin thuig mé nach raibh ach dhá tíleanna uathúla ag teastáil, agus seo an fáth.

San iomlán tá dhá thíl den sórt sin againn: 1 agus 2.

Tá gach cuid den chúirt comhdhéanta de tíl 1 nó tíl 2. Is féidir iad a leagan amach mar is gnách nó iompaithe 180 céim.

Ag imirt meirge i 24 uair an chloig: taithí forbartha pearsanta

Modh tógála bunúsach (tionóil).

Tar éis dom rindreáil suíomhanna, daoine agus léarscáileanna a bhaint amach, thuig mé go raibh gá le modh tionóil bhunúsach freisin. Chuir mé i bhfeidhm é mar seo: nuair a bhrúitear an cnaipe, roghnaítear an réad, agus cuireann an cliceáil é san áit atá ag teastáil. Mar sin, ligeann cnaipe 1 duit cúirt a roghnú, agus ligeann cnaipe 2 duit imreoir a roghnú.

Ach ní mór dúinn cuimhneamh fós cad is brí le 1 agus 2, agus mar sin chuir mé fráma sreang leis chun a dhéanamh soiléir cén réad a roghnaíodh. Seo an chuma atá air.

Ag imirt meirge i 24 uair an chloig: taithí forbartha pearsanta

Ceisteanna ailtireachta agus athmhonatóireachta

Anois tá roinnt rudaí cluiche agam: daoine, cúirteanna agus urláir. Ach le go n-oibreoidh sreangfhrámaí, ní mór a chur in iúl do gach aonán oibiachta an bhfuil na rudaí féin i mód taispeána, nó an bhfuil fráma simplí tarraingthe. Níl sé seo an-áisiúil.

Chonacthas dom gur ghá an ailtireacht a athmhachnamh ar bhealach a léirigh roinnt teorainneacha:

  • Is fadhb é eintiteas a bheith ann a fhágfaidh agus a nuashonraíonn é féin mar ní bheidh an t-aonán sin in ann “fios” a bheith aige ar a bhfuil sé ceaptha a sholáthar - íomhá agus sreangfhráma;
  • easpa uirlis chun maoine agus iompar a mhalartú idir aonáin aonair (mar shampla, an mhaoin is_build_mode nó rindreáil iompraíochta). Bheadh ​​​​sé indéanta oidhreacht a úsáid, cé nach bhfuil aon bhealach cuí ann chun é a chur i bhfeidhm i Rust. An rud a bhí ag teastáil uaim i ndáiríre ná an leagan amach;
  • bhí gá le huirlis idirghníomhaíochta idir eintitis chun daoine a shannadh do chúirteanna;
  • meascán de shonraí agus de loighic a bhí sna heintitis féin a d’éirigh as smacht go tapa.

Rinne mé níos mó taighde agus fuair mé amach an ailtireacht ECS - Córas Comhpháirte Aonáin, a úsáidtear go coitianta i gcluichí. Seo na buntáistí a bhaineann le ECS:

  • tá sonraí scartha ón loighic;
  • comhdhéanamh in ionad oidhreachta;
  • ailtireacht sonraí-lárnach.

Tá trí choincheap bhunúsacha ag ECS:

  • eintitis - an cineál oibiachta a dtagraíonn an t-aitheantóir dó (d'fhéadfadh sé a bheith ina imreoir, ina liathróid, nó rud éigin eile);
  • comhpháirteanna - tá aonáin comhdhéanta díobh. Sampla - comhpháirt rindreála, láithreacha agus daoine eile. Is stórais sonraí iad seo;
  • córais - úsáideann siad an dá rudaí agus comhpháirteanna, chomh maith go bhfuil iompar agus loighic atá bunaithe ar na sonraí seo. Sampla is ea córas rindreála a athraíonn trí gach aonán a bhfuil comhpháirteanna rindreála aige agus a dhéanann an rindreáil.

Tar éis staidéar a dhéanamh air, ba léir go réitíonn ECS na fadhbanna seo a leanas:

  • leagan amach a úsáid in ionad oidhreachta chun eintitis a eagrú go córasach;
  • fáil réidh le jumble cód trí chórais rialaithe;
  • ag baint úsáide as modhanna cosúil le is_build_mode chun an loighic sreangfhráma a choinneáil san áit chéanna - sa chóras rindreála.

Seo an méid a tharla tar éis ECS a chur i bhfeidhm.

acmhainní -> seo an áit a bhfuil na sócmhainní go léir (íomhánna)
src
- comhpháirteanna
—suíomh.rs
— duine.rs
— leadóg_chúirt.rs
— urlár.rs
- sreangfhráma.rs
— mouse_tracked.rs
- acmhainní
—luch.rs
- córais
— rindreáil.rs
— tairisigh.rs
— utils.rs
— world_factory.rs -> feidhmeanna monarchan domhanda
— main.rs -> príomhlúb

Sannaimid daoine chuig na cúirteanna

Rinne ECS an saol níos éasca. Anois bhí bealach córasach agam chun sonraí a chur le heintitis agus loighic a chur leis bunaithe ar na sonraí sin. Agus rinne sé seo, ina dhiaidh sin, indéanta dáileadh na ndaoine i measc na gcúirteanna a eagrú.

Cad atá déanta agam:

  • sonraí curtha leis faoi chúirteanna sannta don Duine;
  • sonraí curtha leis faoi dhaoine dáilte chuig TennisCourt;
  • Chuir CourtChoosingSystem leis, a ligeann duit anailís a dhéanamh ar dhaoine agus cúirteanna, cúirteanna atá ar fáil a bhrath agus imreoirí a dháileadh orthu;
  • chuir Córas Gluaiseachta Pearsanta leis, a lorgaíonn daoine a shanntar do na cúirteanna, agus mura bhfuil siad ann, cuireann sé daoine chuig na háiteanna ar gá dóibh a bheith.

Ag imirt meirge i 24 uair an chloig: taithí forbartha pearsanta

Achoimre

Bhain mé an-taitneamh as a bheith ag obair ar an gcluiche simplí seo. Thairis sin, tá áthas orm gur úsáid mé Rust chun é a scríobh, mar gheall ar:

  • Tugann Rust duit an méid a theastaíonn uait;
  • tá doiciméadú den scoth aige, tá Rust go leor galánta;
  • tá comhsheasmhacht fionnuar;
  • ní gá duit dul i muinín chlónáil, cóipeáil nó gníomhartha eile dá samhail, rud a rinne mé go minic i C++;
  • Tá roghanna an-éasca le húsáid agus láimhseálann siad earráidí go han-mhaith;
  • má bhí an tionscadal in ann a chur le chéile, ansin 99% den am a oibríonn sé, agus go díreach mar ba chóir. Sílim gurb iad na teachtaireachtaí earráide tiomsaitheora an ceann is fearr atá feicthe agam.

Tá forbairt cluiche i Rust díreach tosaithe. Ach tá pobal seasmhach agus measartha mór ag obair cheana féin chun Rust a oscailt do chách. Mar sin, breathnaím ar thodhchaí na teanga le dóchas, ag tnúth le torthaí ár gcomhoibre.

Molann Skillbox:

Foinse: will.com

Add a comment