https://github.com/kijimaD/digger https://github.com/kijimaD/digger_rs diggerã¯ã·ã³ãã«ãšã³ã«ãŠã³ã/ããŒã°ã©ã€ã¯ãªèŠçŽ ãæã£ãgameã§ãããRubyããŒãžã§ã³ã¯éçºéäžã§ããããRustã§å¥ã®ã³ãŒããããŒã¹ã«åéãããã²ãŒã éçºã¯éçåä»ãã§ãªããšå³ãããã
- åç
- æ©èœè¿œå ã倧å€ã§æ«æãã
- ããŒã¿ããªããžã§ã¯ãã®å ¥ã£ãé åã§ç®¡çã倧å€ã ã£ãããã±ããªã¬ãŒãçºç
- UIãšæ©èœãäžäœå
- åèã«ãªãã³ãŒãããªãã£ã
- èªåãã¹ãã§æ€ç¥ã§ããªã
- ã²ãŒã æçš¿ãµã€ã or Steamã§ãªãªãŒã¹ããããšã
- äž»äººå ¬
- ããŒãã£ã¡ã³ããŒ
- ã¢ã³ã¹ã¿ãŒ
- ã·ã³ãã«ãçš®æã瀺ãããããããæŠè»ãç ããã©ãŽã³ãã©ã€ã
- çš®æã»ã¬ãã«ããšã®æµ
- ãã³ãžã§ã³ã®ãã¹
- NPC
- ã¢ã€ãã å±ãè£ åå±ãåžæ°ãåæå±
- è¡ãæ ç¹ã«ãéºè·¡ã®3ã€ã®ç ãæã«å ¥ãã
- ã²ãŒã ã¯è¡ããã¹ã¿ãŒããããè¡ã§ã¯å£²è²·ã§ããäŒè©±ãããã³ããåŸããã
- éºè·¡ã®ãã¹ãåããšç ãæã«å
¥ãã次ã®éºè·¡ãéžæã§ããããã«ãªã
- ãŸã³ããèããããç®æšãçãæ®ãããšãªã®ã§ãæ¹åä»ãã®æéãå¢ããããéºè·¡ã¯ãããããã
- 3ã€æã«å ¥ãããšã©ã¹ãã¹ãšæŠãã²ãŒã ã¯ãªã¢
- ã¯ãªã¢åŸã¯100éãã³ãžã§ã³
- ããŒã°ã©ã€ã¯
- ã·ã³ãã«ãšã³ã«ãŠã³ã
- RPGçæŠé
- åæ
- å šäœ: 3ã€ã®ç ãéãã
- çæ: æµãåããŠå ã«é²ããåºå£ãæ¢ã
- èœã¡ãŠããã¢ã€ãã ãæŸã£ããåæããããšã§ãã匷ããã
- ãã£ã©ãæé·ããã
- çš®é¡ã®ç°ãªããã³ãžã§ã³ãé²ã
- æŠç¥çãªåããAIã®æåãå°åœ¢ãç解ããŠãçåå¯èœæ§ãé«ãã
- æ°å€ã管çãããè£ ååãè¡åã®ããŒãã¹ãããŸã䜿ã£ãŠçåå¯èœæ§ãé«ãã
- è³æºã管çãããéããè£ ååã®å¶çŽããããªãã§ãçåå¯èœæ§ãé«ãã
ã²ãŒã ã¯æ§ã ãªã¢ã€ãã ãå«ãã
- é²å ·ãã¢ãŒããŒãæãåžœåãéŽ
- è£ é£Ÿåãæ茪ããå®ã
- çŸ
- è¿æ¥æŠåš
- éåš
- æ¶èåãå埩è¬ãæ é€å€ããã±ãã匟
- çŽ æã売åŽç©
- é£æ
- ããŒã¢ã€ãã ãç ãéµ
ã¢ã€ãã ã«ã¯éããããã ã¢ã€ãã ã¯ããŒãã«ã«ãã決å®ããã
- æµãåããšçµéšå€ãåŸãŠã¬ãã«ã¢ãããã
- ã¬ãã«ã¢ããããŠèœåãäžãã£ãããçåã«åœ¹ç«ã€ãã匷åãªæ¹æ³ã䜿ããããã«ãªã
- éãéããããšã«ã¬ãã«ãšé£æ床ãäžãããããŸã«ã¬ãã«ãã匷ãæµã«åºäŒãããšããã
- çäžå°œãªå¶ç¶ã§ãã¬ã€ã€ãŒã殺ããªã
- ã²ãŒã ãªãŒããŒã«ãªã£ãå ŽåãåŸãã¢ã€ãã ããã£ã©ã¯ã¿ãŒã倱ã
- ASCII
- äžåãªã
- Rust, rltk
- OpenGL, Web Assemblyã«å€æããã©ãŠã¶ã§ãã¬ã€ã§ãã
- ããŒã«ã«ã§ã®å®è¡åœ¢åŒããµããŒããã
- ç¡æã§å ¬éãã
- ãã¬ã€ã¯è±èª
- ãœãŒã¹ã³ãŒããéçºçšããã¥ã¡ã³ãã«æ¥æ¬èªãå«ã
- ãã¬ã€ã€ãŒã®ç®ç: 3ã€ã®ãã³ãžã§ã³ãã¯ãªã¢ããããšã
- ã¡ãã»ãŒãžã·ãŒã³ããã£ãŒã«ããæŠéã§æ§æ
- ãã£ãŒã«ãäžã¯ããŒã°ã©ã€ã¯
- ç©ºè ¹åºŠãååšãããŒãã«ãªããšãã¡ãŒãžãåãã
- 4人ããŒãã£æ§æ
- 4ã€ã®ã¹ãããã§æŠåšã»é²å ·ãéžæã§ãã
- ãã£ã©ã¯ã¹ãã«ãã¬ãã«ãæã€
- 3ã€ã®ãã³ãžã§ã³
- 5éããšã®è±åºæ©èœã䜿ãã»éºè·¡ã®ãã¹ãåããšåž°ããã¢ã€ãã ãæã¡åž°ãã
- ãã³ãžã§ã³ã«ãã£ãŠæµã»ã¢ã€ãã ã»ãããã®ã»ãããå€ãã
- åŸåã®ãã³ãžã§ã³ã¯æµã匷ããªã
- ãã³ãžã§ã³ã¯20éã§æ§æããããæäžå±€ã«ã¯ãã¹ãããŠãåããšã¯ãªã¢
- ã¢ã€ãã
- é貚ã«ãã£ãŠã¢ã€ãã ãè³Œå ¥ã§ãã
- çŽ æã«ãã£ãŠã¢ã€ãã ãäœæã§ãã
- ã¢ã€ãã ãå ¥æã§ããã¿ã€ãã³ã°: ãããã§æŸããè³Œå ¥ãæŠéã«åå©
- ã·ã³ãã«ãšã³ã«ãŠã³ãã®æŠé
- æ代èšå®
- äžçŽæ«
- ãšãã«ã®ãŒåäœãã
- ãããå©çšããå€ä»£æè¡ãšãçŸå®çãªç§åŠæè¡
- æ» äº¡åŸã«çãæ®ã£ã人é¡ã¯ãå»å¢ãæšãŠããéºè·¡ãã«å¯ãéãŸã£ãŠæ®ããã¯ããããéºè·¡åšèŸºã®ãªãŒããŒãããšãã«ã®ãŒãããŠã«ããŠãæ¢çŽ¢è ç£æ¥ãçãŸããçºå±ãã
- 3ã€ã®éºè·¡ãéäžããSasuboã®è¡
- 3ã€ã®ç ãéããããšã©ããããåé¡ãã€ãã³ãé¢åãããªãã ããªã
- 人ç©
- 䞻人å
¬
- ã©ãããŠéºè·¡ã«æ¥ãããšã«ãªã£ãã®ã
- 䞻人å
¬
1ç« ãš2ç« ã«åããã
- 1ç« : ã¹ããŒãªãŒæ§ã®ãããäœå±€ã®è€æ°ã®ãã³ãžã§ã³
- ã¹ããŒãªãŒéèŠ
- æéå¶éããã
- æ¡ä»¶ãæºãããŠããªããšã²ãŒã ãªãŒããŒ
- æ¡ä»¶ãæºãããŠãããšãã¹æŠãåå©ãããš2ç« ã«çªå ¥
- 仲éãå¢ããã
- 仲éãã£ã©ã¯ã¿ãŒã«å¯Ÿããæãäžã
- åãã³ãžã§ã³ã§ã¯ã€ãã³ãã«ãã£ãŠé²è¡ãã
- 2ç« : ã¹ããŒãªãŒæ§ã®ãªãã1ã€ã®100éãã³ãžã§ã³
- ãããã¿èŠçŽ
- ããå€æ§ãªã¢ã€ãã ãã¢ã³ã¹ã¿ãŒ
- ãã¹ã»ã€ãã³ãã¯ååšããªã
- [X] ãã¹ãŠã®ãã¥ãŒããªã¢ã«ãçµäº
- hands-on Rustããæã£ãŠãã â 延æ
- ã¯ãªã¢ãŸã§ãããããã«ãã
- hands-on rustããæã£ãŠãã
- ã¿ã€ã«ç»åã®å€æŽ
- æ¥æ¬èªè¡šç€º
- ãããã
- ã¹ãã«ã·ã¹ãã ãããŒãã£ã·ã¹ãã
- ãªãªãžãã«éšå
- ã¹ããŒãªãŒå®è£
- ä»®å®æãäžéããã¬ã€ããŠããããããã«ãã
- ãã¬ã€ããŠããã£ãŠããã£ãŒãããã¯ãããã
- ãªãªãŒã¹
- ãã¬ã¹ãªãªãŒã¹ãéã
- ããŒã°ã©ã€ã¯ã®ãŠãŒã¶ã°ã«ãŒãã«æçš¿ãã
- ã€ãã§ã«äœãéžèã«éã£ãŠã¿ã
- 人ã«çŽ¹ä»ãã
- é£ãããã®ãšæ§ããããŠãæ°ã¯ãããããèŠãŠããã°ãã¹ãŠåçŽã§ããããããã¯ç解ã§ããã³ãŒãã
- å®çžŸã·ã¹ãã ãeffectã·ã¹ãã ããããæ±çšæ§é«ããã³ãŒããæŽçããã
- æ¯åæžããŠãããäœãèŠãã«éçºã§ããŠããããããªãããšã«å±æ©æãæããŠããããŸããä»ãŸã§ãšåãããã«ãµã³ãã«ãåºãããã«ãããŠããŸãã®ã§ã¯ãäœãæ®ããªãã®ã§ã¯ãªããããš
- éèŠãªã®ã¯ã¹ããããèžãããšã ããããªãæžããããã«ã¯ãªããªãã®ã§ãèªã段éãããã®ã¯æ£ãããããããæžããä¿®æ£ããããšããæµããã¯ããã§ã身ã«ã€ããŠããæžããããã«ãªã
- ãã£ãšç解ã§ããããã«ãªã£ãŠããããããèªãã ãã§ãæžããšèšãããã°åºãŠããªãããã¹ã¯ã©ããã§æžãã®ã¯å šç¶ããããªãããŸã£ãããªç¶æ ã§èããŠã¿ããšãã©ãã ã身ã«ãªã£ãŠãããè©Šãããä»ã¯å šç¶ãã¡ã ãã段éçã«ããããŠããã°åé¡ãªãããã ãèªèŠããããšã
- ãã¥ãŒããªã¢ã«ããæã£ãŠããŠãæéãé·ãããŠèŸããªãèªäœããŒãã«å ¥ããªããšç解ã§ããŠãæããããªãããå®éã§ããŠãªã
- èªåã§ä¿®æ£ã§ããããã«ãªãã®ãã䜿ãããªããããã«ãªãã®ãããšããäžå®ãå®éã»ãšãã©ã®å Žåã¯ãèŠãã ãã§ã¯ç解ã§ããŠãªããäœãèŠãã«èããç¶æ³ã«ããªããšã身ã«ã€ããªãããšãå€ãã£ã
- ã³ãŒãã£ã³ã°ã§åœ¹ç«ã€éèŠãªæŠå¿µ
- ã¢ãžã¥ãŒã«ãçµã¿åãããŠãªããžã§ã¯ãã®æ§è³ªã決ããæ¹æ³
- ç¶æ¿ãäžå䜿ãããç¬ç«æ§é«ãã²ãŒã ãçµã¿ç«ãŠãŠããæ¹æ³
- withé¢æ°ã§çµã¿åãããŠãäžæ°ã«buildããæ¹æ³ããšãã«ããããšã³ãžã³
- ãã£ã«ã¿ãŒããã£ã«ã¿ãŒã§è€æ°ã®ãã«ããŒãçµã¿åãããããšãã§ãã
- enumã«ããå®å šãªåå²
- jsonã§ããŒã¿ãå®çŸ©ããŠãã«ãããæ¹æ³
- èªããšãã«æ確ã«ãããç解ããããšæ±ºããŠèªããšããããã ãããã§æŽçªãçæã§ãããããã§ãã£ãšã倧ãã建ç©ãæ±ããããšãã§ããããšã
- ç解ã§ããããšãå¢ããããäœãèŠãã«æ°ããæ©èœè¿œå ã§ãããšã¯å°åºèšããªããã©ãã䌌ããããªç®æãæ¢ããªãããæžããŠããããšããã§ããªã
is_some() ã䟿å©ã
if ecs.read_storage::<Player>().get(source).is_some() {
...
}
RLTKã¯åæã«åããªãœãŒã¹ãèªã¿æžãããããšããªãã®ã§ã競åãå¿é ããå¿ èŠããªããread, writeãåãããŠããã®ã§ãreadã ãã ãšäžŠåå®è¡ããŠé«éåããããããã
ã¹ããŒã¿ã¹ãè¿ããåã«ã·ã°ãã«ã«åŸ¹ããé¢æ°ããããæ¬åŠçã¯ã·ã°ãã«ãå ã«å¥ã§ããããšãããããªåãæ¹ãããããããšã§è²¬åã®åé¢ãã§ãããã€ã·ã°ãã«åŽã§å ±éåãããããæ¬åŠçã¯å šãå¥ã ããã·ã°ãã«èªäœã¯å ±éã®ããšã¯å€ããããšãã°ã䜿ããæšãŠããªã©ã®ã¢ã€ãã ç»é¢ãåçš®ã¢ã€ãã ç»é¢ã§è¡šç€ºããäžèº«ã¯ç°ãªãããè¿ãããå 容ã¯éžæã¢ã€ãã ã§åããããŒããŒããã³ãã«ãå ±éãéãã¯ã¢ã¯ã·ã§ã³ã ãã
- gui/cheat_menur.rs file is an easy refactor:
https://github.com/amethyst/rustrogueliketutorial/blob/33872fe582f226178436847e1f74eafcbf9c0d1a/chapter-61-townportal/src/movement_system.rs#L32
ãªãã§ãããããããªããç¹å®ã§ããªãããã«èŠããã
let player_entity = ecs.fetch::<Entity>();
getã§ç¹å®ã®poolãååŸã§ããã
let target_pools = pools.get(wants_melee.target).unwrap(); # targetã«ã¯Entityãå
¥ã£ãŠã
entityãåé€ããã
ecs.delete_entity(entity).expect("Unable to delete");;
entities.delete(entity).expect("Delete failed")
entityã«ä»å±ããcomponentãåé€ããã
let entity = ecs.fetch::<Entity>();
combatants.remove(*entity);
let mut battle = ecs.write_storage::<Battle>();
battle.clear();
fetchã䜿ã£ãŠååŸãããšãåå¥ã«åãã®ã§ã€ãã¬ãŒã·ã§ã³ã§ããªããentitiesã ãšã€ãã¬ãŒã·ã§ã³ã§ããã
let entity = ecs.fetch::<Entity>();
let entities = ecs.entities();
position componentãremove + InBackPackãinsertã§ãèœã¡ãŠããã¢ã€ãã ãã€ã³ãã³ããªãžå ¥ããæ±ãã«ãããèªç±ã«componentãä»ãå€ããã
for pickup in wants_pickup.join() {
positions.remove(pickup.item);
backpack
.insert(pickup.item, InBackpack { owner: pickup.collected_by })
.expect("Unable to insert backpack entry");
if pickup.collected_by == *player_entity {
gamelog
.entries
.push(format!("You pick up the {}.", names.get(pickup.item).unwrap().name));
}
}
ã¢ãžã¥ãŒã«ãçµã¿åãããæ¹åŒã§ããã°ã©ã ãèšèšããã
äŸãã°ãããŸããããªãã®ã¯ãæµãšããå±æ§ããã£ãŠãšã³ã«ãŠã³ãå¯èœã«ãããã移åæ¹æ³ã決ããããšã ãããããæµãšããå±æ§ããšã³ã«ãŠã³ãå¯èœãšããå±æ§ã移åæ¹æ³ã®å±æ§ãäœããçµã¿åãããŠçæã§ããããã«ãããåæ©æ§ã¯ç¬ç«ããŠããŠãå€æŽãããããããã«ãçµã¿åãããããšã§æ°ããåããã§ããã
let player = ecs
.create_entity()
.with(Position { x: player_x, y: player_y })
.with(Renderable {
glyph: rltk::to_cp437('@'),
fg: RGB::named(rltk::YELLOW),
bg: RGB::named(rltk::BLACK),
render_order: 0
})
.with(Player{})
.with(Viewshed{ visible_tiles : Vec::new(), range: 8, dirty: true })
.with(Name{name: "Player".to_string() })
.build();
let monster = ecs
.create_entity()
.with(Position { x: x, y: y })
.with(Renderable {
glyph: rltk::to_cp437('g'),
fg: RGB::named(rltk::YELLOW),
bg: RGB::named(rltk::BLACK),
render_order: 0
})
.with(Monster {})
.with(Name{name: "Goblin".to_string() })
.with(AiMove{})
.build();
ãã¡ã€ã«ããèªã¿åã£ãå€ãå ã«çæã§ãããšãããŒã¿ãšããžãã¯ãåå²ã§ããã
ãã¥ãŒã€ã³ã°ããªã¯ãšã¹ããšå®è£ ã®åé¢ããã¡ãŒãžçºçãã¢ãã¡ãŒã·ã§ã³çºçãã¢ã€ãã 䜿çšããã€ãã³ããšããŠåãããã«æ±ããããªã¬ãŒã察象ãå¹æã®çµã¿åãããããšã§åå©çšæ§ãããããªãããªã¯ãšã¹ãåŽã¯è©³çŽ°ãç¥ãããšãªãæ±ãããããã³ãŒããèªã¿ããããªãã
ãªãããã®ãã©ã¡ãŒã¿å€æŽãå³åº§ãäœã¿ãŒã³ãã«æž¡ã£ãŠãããããã®ã¯effectãæ°žç¶çãªå±æ§ã容ããã®ãè¡šããã®ã¯componentããããããã
æŠéã®å®è£ ãææ§ã«ããèããŠãªãã®ã§ãå³ã«ãŸãšããŠå®è£ ã§ããç¶æ ã«ãããæŠéé¢é£ã®ãªãã¡ã¯ã¿ã®åŸã«å®è£ ãããæ»æã®å±æ§ã
- æ»ææ¹æ³éžæã¡ãã¥ãŒ
- (âã«ãã£ãŠ)æ»æ察象éžæã¡ãã¥ãŒ
æŠéçšãšã³ãã£ãã£ãšåããã»ããããã®ã ãããã
UIã¢ãã¯ããèããŠã¿ããã
å€åŽããäœã£ãŠã¿ãããããŒã§æ»ææ¹æ³ãéžæã§ããããã«ããã
ä»ã¯ãã¬ã€ã€ãŒããããŒã§éžã¹ãã ãããã¡ãŒãžãžã®åæ ãšãã°ãžåºããããã«ããã
wants_to_meleeã«æ»ææ¹æ³ã®æ å ±ãè¿œå ããããåŸæ¥ã®æ¹åŒã¯è£ åããŠããæŠåšããã¡ãŒãžã®èšç®ã«äœ¿ã£ãŠãããããã¯æãæåã§ã¯ãªããè£ åããŠãããã§ã¯ãªããã³ãã³ãã§éžæããæ»ææ¹æ³ãèšç®ã«äœ¿ããããããã°ã«åºãããã
æ»ææ¹æ³ã¯ã ãããæŠåšã ããã¢ã³ã¹ã¿ãŒã¯åºæã®ãããã¥ãããšã䜿ãã®ã§æŠåšãšããååã«ã¯ããªããæ»ææ¹æ³ãweaponãæå®ããªãå Žåã¯natural attackã§äžæžãããã°ãããã
ä»ã®åé¡ç¹ã
- æµãæ»ææ¹æ³ãéžæã§ããªã
- naturalãskillããšã³ãã£ãã£ã«èšèŒã§ããªããã·ã³ãã«ãšæŠéçšãåé¢ããŠãªãã®ã§
ã·ã³ãã«ãšã³ãã£ãã£ãšæŠéãšã³ãã£ãã£ã¯1察å€ãªã®ã§ãæŠéé¢ä¿ãã·ã³ãã«ã«æžãããšã¯ã§ããªãããããåé¢ã§ããã°ããšã³ã«ãŠã³ãæã«ã©ã³ãã éžæããŠã¢ã³ã¹ã¿ãŒãåºããããŸããæŠéé¢ä¿ã®èšèŒãã§ããã®ã§ãnatural attack, skillãèšèŒããŠããã©ã«ãã®æ»ææ段ãå®è£ ã§ããã
rawãå¥ã«ããã°ããã®ããªãæ°ããæŠéçšentityã®é ç®ãäœã£ãŠãååã§spawnã§ããããã«ããã
- å³æ¹ãã£ã©ã¯combatantãä»ãæ¿ããŠæŠé察å¿ããŠãããåæ§ã«ä»ãæ¿ãã§äž»äººå
¬ä»¥å€ã¯renderããªããpositionãæããªããã§ãããã
- ãããããããåããã
- æµãã£ã©ã¯æŠéæã«combatantä»ãentityãçæããŠæŠéã«ããŠãã
- ã§ããã°æµå³æ¹ã§åãçæã«ãããã®ã ããã©ã€ããµã€ã¯ã«ãç°ãªããæµã¯æŠéã®ãã³ã«æ»ã«äœåãã®ä»ãä¿æããå¿ èŠã¯ãªãããå³æ¹ã¯ä¿æããŠããããããããããããåã«rawã«å³æ¹ãã©ã°ãè¿œå ããã°è¯ãã®ã§ã¯
- gold, initiative, weightãäœçœ®ããããããªããªãã ãã
- æŠé以å€ã®ã·ã³ãã«ãšã³ãã£ãã£ã«ã€ããã£ãŒã«ããå ¥ããæ§é äœ
ããŒãã£ã®ææé(party.gold)ãšãã¢ã³ã¹ã¿ãŒãããããæã€é(ããããããéãpools.gold)ãå¥ã«ããã
- [X] HUD
- [X] 売買
- [X] ãããã
poolsã®äžã«initiativeçšã®ãã£ãŒã«ãããã£ãŠéªéã
ããã¯æŠéçšãšã³ãã£ãã£ã«ã€ãã®ãã移åãšã³ãã£ãã£ã«ã€ãã®ããã€ã³ãã³ããªã¯partyã ããè£ åã¯åæŠéentityã ãéãå¶éã¯ã€ã³ãã³ããªéå®ã«ãããããªããããè£ ååã®éãããã«ãã£ã¯åæŠéãšã³ãã£ãã£ã®ã¹ããŒã¿ã¹ã«åæ ããããšã§å®çµã§ããinitiative systemã¯é¢ä¿ãªãã
ã€ã³ãã³ããª+è£ ååã®éãå¶éã®æ©æ§ã¯ããã§ããŠããŠæãããã©ãªãã
- æŠéçšã®è£ ååã®éé/ããã«ãã£ã¯åé€ããã
- 移åçšã®ææåã®éé/ããã«ãã£ã¯ä¿æ
- @ããæŠéé¢é£ãæããè£ ååé¢é£ããè£ ååãªã©ãå人ã«ããããã®ã¯ãã¹ãŠæŠéçšãšã³ãã£ãã£å¯Ÿå¿ã«ãªãã®ã倧å€ãã
- ãšã³ã«ãŠã³ãæã®æŠéåŠçãä¿®æ£ãããcombatantã®ä»ãæ¿ããããã
- ã²ãŒã éå§æã«ãå³æ¹ã®æŠéçšãšã³ãã£ãã£ãçæããŠããããæŠéã«äœ¿ããäœåãªã©ã¯æŠéçšãšã³ãã£ãã£ãæã€
ã¡ã¢ã
- æŠéé¢é£ãæããŠã¿ããhudã§ãšã©ãŒãäœåé¢é£ã ãã
- æŠéãšã³ãã£ãã£ãã察å¿ããã·ã³ãã«ãšã³ãã£ãã£ãåŒãã®ãã©ãããããPartyã«å ¥ããŠãããããããããåºæ¬æŠéãšã³ãã£ãã£ãçŽã«æã£ãŠããã®ã§ãªããã·ã³ãã«ãšã³ãã£ãã£ã®Partyçµç±ã®ã»ããã¢ã¯ã»ã¹ãããããã
- å³æ¹ä»¥å€ã¯ãšã³ã«ãŠã³ãæã«é次çæãªã®ã§ãèããªããŠãã
- componentã§ãã¯ã¿ãå®çŸ©ãããšãsaveloadãã¯ãã§ãã¡ãšããããããªã®ã§ä¿æãããããªã
- battle -> field ãš field -> battleãäž¡æ¹èŸ¿ããããã«ãããã
éžæããæŠéãšã³ãã£ãã£ã«é©çšããã
- itemã«target typeãæãããŠãæŠéçšãã·ã³ãã«ãšã³ãã£ãã£çšããšåããããã«ãã
- targetã¯ã¢ã€ãã ãšããããã¯effectã«åŸå±ããŠããª
- consumableã«å ¥ããããæŠåšãšãããããããªããªãè£ ååã¯åžžã«æŠéçštargetãåããããããããconsumableãã¿ãŒã²ããéãå¯èœæ§ããã£ãŠç¹æ®ãªã®ã§è¯ããããªæ°ããã
- ã¢ã€ãã åå¥ã«ä»äžãããšããããã«ããŽãªã«å¯ŸããŠåå²ãããããããã³ã³ããŒãã³ã圢åŒãªã®ã§ã«ããŽãªã«çžåœãããã®ã¯ãªããçµã¿åããã®èªç±ããåŸãããã¡ãªããã®è² ã®åŽé¢
- Target componentãäœã£ãã»ããããã®ããªãäžèº«ã«enumãå ¥ããŠ
- ãããŠç¶æ ã«enumã䜿ãã¹ãã ãª
æŠéãšã³ãã£ãã£ã®lootãšããã£ãŒã«ããšã³ãã£ãã£ã®lootäž¡æ¹ã«ããã
- æŠéã§ã¯çŽ æãèœãšããèªåæ ŒçŽããã
- ãã£ãŒã«ãã§ã¯ç¢ºçã§äœ¿çšã¢ã€ãã ããããã«èœãšã(ãã§ã«å®è£ ãã¿ã®ããã®ãŸãŸäœ¿ã)
çŸåšã¯HPã0ã«ãªã£ãç¬éãçµéšå€è¿œå ããŠããã¬ãã«ã¢ãããããããªãããæŠéã®åå©ã«å¯ŸããŠçµéšå€ãçºè¡ããããã«ããããbattleèªäœã«ååŸäºå®ã®çµéšå€ãä¿åããŠãæŠéãçµäºãããšãã«ç¢ºå®ããã°ãããããããŸããæŠéåå©ä»¥å€ã§ã¬ãã«ã¢ ããããããšã¯ãªãã®ã§ããã®ãžãã®è¡šç€ºãå€æŽããã
è£ ååãšããã¹ããŒã¿ã¹ã¯åãã£ã©ããšãªã®ã§ãèŠãããããã«ç»é¢ãè¿œå ãããè£ ååãã¹ããŒã¿ã¹ãŠã£ã³ããŠã¯å ±éã«ãããããŠã¹ãªãŒããŒã¯æ±çšæ§ãé«ããã ããã«ãŒãœã«äœçœ®ãšå¯Ÿå¿ãããã®ãé£ãããã§ããã
çŸåšã¯åºå®ããŠããã
- æŠéã®é£æ床ã決ããèŠçŽ
- ã¬ãã«
- æµã®ã¬ãã«ãäžãããšæ»æãé²åŸ¡ã«è£æ£ããããåãã«ãããªããåºæ¬ã¹ããŒã¿ã¹ã¯å€ãããªã
- æµã®çš®é¡
- æµ ãéå±€ã§ã¯è»œæŠè»ã ããæ·±ãéå±€ã§ã¯éæŠè»ãšãã£ãå ·å
- åºæ¬ã¹ããŒã¿ã¹ãé«ããªã
- è¡åãã¿ãŒã³ãå€ããããã匷åãªæã䜿ãããã«ãªããæã«ã¯ãã¡ãŒãžã®ã»ãã«å±æ§ãç¶æ ç°åžžä»ãããã
- ã¬ãã«
- éå±€
- æ·±ããªãã»ã©åŒ·ããªã
- ã·ã³ãã«ã®å²åãå€ããããã©ãŽã³ã®ã·ã³ãã«ã¯åŸåã«ããåºãªã
- æ¥è§Šããmapãšã³ãã£ãã£
- ã·ã³ãã«ã«ãã£ãŠããŒãã«ãå€ãã
- ãã³ãžã§ã³çš®å¥
- åŸåã®ãã³ãžã§ã³ã«ãªãã»ã©ãé£æ床ãé«ããªã
- ã·ã³ãã«ã®å²åãå€ãã
- 森ã®éºè·¡
- å¡ã®éºè·¡
- å±±ã®éºè·¡
- å°äžåºå°
- 100éãã³ãžã§ã³
ããããšã³ã«ãŠã³ãã¢ã³ã¹ã¿ãŒã決å®ããã2äœåºããšãããããmapçææã®ãšã³ãã£ãã£é 眮ãšäŒŒããããªæãã§ãããããã
äœã«ãã£ãŠé£æ床ãé«ããªãããšããããšã§ãéèŠãªç®æã®æ°ããããªããšããããã¯ã·ã³ãã«ã«åºã¥ããŠæŠéã¢ã³ã¹ã¿ãŒã決å®ã§ããããã«ãããããã¢é¢ä¿ãªãã
- æŠéãšã³ãã£ãã£ã®rawã«ã«ããŽãªãè¿œå ãã
- æŠéãšã³ãã£ãã£ãã«ããŽãªå ããã©ã³ãã ã«éžã¹ãããã«ãã
ããããã®ãã£ã©ã¯ã¿ãŒã§ã³ãã³ããéžæã§ããããã«ããã
ãã¹ãŠåãã¹ããŒã¿ã¹ã ãšåãæ¿ãã£ãŠããããããã¥ããã
- éšäœããšã«1ã€è£ åã§ãã
- è£ é£ŸåãæŠåšã¯éšäœå¶éããªã
- ã¹ãããã¯å šéšã§4ã€
- è£ åããŠãªããšãã¯ç©ºãã¹ããããšããŠè¡šç€ºãã
- æŠéåŸçŽ æã¢ã€ãã ç²åŸåŠçãè¿œå ãã
- ãšããããæ¶è²»ã¢ã€ãã ãã€ã³ãã³ããªã«å ¥ãã
- æŠéã®ãªã¶ã«ãç»é¢ã§åŠçãšè¡šç€ºãè¿œå ãã
- ç²åŸçŽ æäžèŠ§
- å仲éã®çµéšå€
- ç²åŸgold
- ã¢ã€ãã ã«æ¶è²»SPãã£ãŒã«ããè¿œå ãã
- æ»ææã«æ¶è²»ããåŠçãè¿œå ãã
é²åŸ¡åã®å€ãã¹ããŒã¿ã¹ç»é¢ã§è¡šç€ºã§ããããã«ãããã
è£ åå€ããã§ããªãç¶æ ãããŒæäœä»¥å€ã®è¡šç€ºã¯è£ åç»é¢ãšåãã§ãå€ãç»é¢ãäœæããã
å šæ» ãããã²ãŒã ãªãŒããŒã«ãããã
ä»ã¯ãã¹ãŠ1ã€ã®ãã³ãžã§ã³ã«ãªã£ãŠããŠãB2ã¯æ£®ãB3ã¯æŽçªããšããããã«åºå®ãããŠããããã³ãžã§ã³ãéžæããŠå ¥ãã¿ã€ããšã¯åããªãã®ã§ã察å¿ãããã
- è¡
- ãã³ãžã§ã³A(B20)
- ãã³ãžã§ã³B(B10)
- ãã³ãžã§ã³C(B100)
ãšããããã«æ倧éå±€ãå€ããããè¡ã®åºå£ã§éžæã§ããããã«ããã°è¯ãããã¯ãªã¢ããããšã«éžæè¢ãå¢ãããä»ã®ãããé¢ä¿ã®å®è£ ãããããã£ãŠãªããã ããªãdepthã¯ãããã®ã®ãå éšçãªãã®ã£ãœãã
çŸåšã®ã³ãã³ãã®stateé·ç§»ã¯è€æ°ã®å³æ¹ãã£ã©ã«å¯Ÿå¿ããŠãªãã
æŠéãè¡åã«ãã£ãŠã¹ãã«ãäžãããçåã«æå©ãªè£æ£ããããã
4ã€ã®ã¹ããããããèªç±ã«è£ åã§ãããåãéšäœã®è£ åã¯ã§ããªãã
ããããæŸã£ããšãã«è¡šç€ºãããµããã®ã§ãè€æ°ããã¢ã€ãã ç³»ã§å ±éã®åŠçã»è¡šç€ºã»æäœã«ãããã
ã·ãŒããæå®ãããšåãããããçæã§ããããããã°ã§äŸ¿å©ã
ã¢ãã¡ãŒã·ã§ã³ãå ¥ããããšãã«æŠéã«èæ¯ç»åãèšå®ããŠãããæ¥ã«æ床ãå€ããã®ã§ç®ã«ãæªãã
èªåãã¹ããããããããã©ããã£ããããã®ãããããªãããã°ãããã¹ããã¡ã€ã«ã«æžãåºãããã«ããã°ããã§ãã¯ã§ããã®ã§ã¯ãçµå±æ£ããæåããŠãããã¯ããããªãããå®è¡æãšã©ãŒã«ãªããªãã®ã¯ãããã
cargo installã§ãããå®è¡ã§ããããã«ããã
è¿œå ã¯chapter63ãåèã«ãªãããã
https://bfnightly.bracketproductions.com/chapter_63.html
åšå²ã®æŠç¥ã衚瀺ãããã¢ã€ãã ãæµãé段ã ããèŠçå ã«éå®ããã°ã
èŠééå®ããããã°ãå®è£ ããªããŠããããã
ããŸãã¡ç解ããŠãªããŸãŸã ã
ãã³ãšæ¥ãŠãªãã
- ã¬ã¢åºŠã®å®è£
- è²ãå€ãã
æ¢çŽ¢ãã ããã®ã§ãå¯èŠç¶æ ã«ãããã¢ã€ãã ãæµã¯èŠçå ã§ãªããšèŠããªãã
ã¢ã€ãã ãæŸããªã+é段ãçºèŠã§ããªããªãã®ã§ãé段äžã«çæããªãããããåžžã«é段ãäžã«è¡šç€ºããã
ãã¡ãã¡entitiesããåãåºãã®ãé¢åãã ãããã®å ŽåæŠéçšãšã³ãã£ãã£ã絡ãã®ã§ã³ãŒããè€éåãããç°¡åã«ã¢ã¯ã»ã¹ã§ããããã«ãããã
ããŽè¡šç€ºãšããããšããã£ãœãã
ãã©ã¯ãš8ã«ãã£ããããªæãã§ã
ã«ãŠã³ã¿ã«è¿œå ããŠãäœããéæãã or éæããŠãªã ã®ãããžåã®å®çžŸãå®è£ ããã
ã²ãŒã ãªãŒããŒã«ãªã£ãããšåéãããšå³æ¹battle entityããªãç¶æ ã§ã¹ã¿ãŒããã
æ»ã¬ãšå³æ¹ã§ãbattle entityãæ¶ããŠããŸãã®ã§ãåçæããªããšãããªããå³æ¹ã¯æ¶ããªãããã«ããããã
gitããŒãžã§ã³ããšã«ãã«ãããŠãããã€ããŠãããŒãžã§ã³éã®åäœç¢ºèªããããããã
åäœç¢ºèªçšãããã€ãåã«æ»ã£ãŠç¢ºèªãããããšãå²ãšãããWASMãåãããŒãžã«å±éããã°ããããã
åãšãã©ã€ãã«ãšãã
å®è¡ãããšåŒ·å¶çµäºããã
- http://www.roguebasin.com/index.php/Articles
- ããŒã°ã©ã€ã¯ã«é¢ããæ å ±ãéçŽãããŠããã
- http://www.roguebasin.com/index.php?title=How_to_Write_a_Roguelike_in_15_Steps
- ããŒã°ã©ã€ã¯ã®äœãæ¹ã®ãã³ãã
- https://countable.hatenablog.com/entry/20120717/1342505647
- âããŒãžã®åèš³
- https://techblog.sega.jp/entry/2018/08/27/100000
- ã²ãŒã ã®ãã¹ã
- https://www.amazon.co.jp/Programming-Patterns-%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E9%96%8B%E7%99%BA%E3%81%AE%E5%95%8F%E9%A1%8C%E8%A7%A3%E6%B1%BA%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC-impress-gear%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-ebook/dp/B015R0M8W0/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dchild=1&keywords=%E3%82%B2%E3%83%BC%E3%83%A0+%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3&qid=1627347211&sr=8-1
- ã²ãŒã ãã¶ã€ã³ãã¿ãŒã³
- https://www.amazon.co.jp/Hands-Rust-English-Herbert-Wolverson-ebook/dp/B09BK8Q6GY/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=26DQRMWP5RQIE&keywords=hands-on+rust&qid=1651655347&sprefix=hands-on+ru%2Caps%2C196&sr=8-1
- 2Dã²ãŒã ã®ãã³ãºãªã³
- å°åœ¢å€å®
- åç¬RSpec
- ã«ãã¬ããž
aaa aaa aaa
ããªã
äžè¡ãã€åºåããããšã§è§£æ±ºããã
2ã€ç®stateã ãŸã å 容ã¯ãªãã 察å¿ã®å¿ èŠãªããã¡ã€ã³ãŠã£ã³ããŠã«ãã¹ãŠè¡šç€ºããŠãããåå²ããã»ãããããããããªã®ã§åå²ããã ããããŠã£ã³ããŠãã¡ãã»ãŒãžãŠã£ã³ããŠãšãã
ãã®å ŽåããŠã£ã³ããŠæ§æãã¢ãŒãã«ãã£ãŠå€ãããã©ããã£ãŠè¡šçŸããã°ããã ããã ããŒãããã£ã±ãé¢åãªã®ã§ã¡ã€ã³ãŠã£ã³ããŠã«åº§æšæ¿å ¥ã§ããããã
stateã«ãã£ãŠäœ¿ãåããããªã
ããã«ãã£ãã¬ãŒã«ããããšãã£ããèããŠããããããã«äžžãã¯ã¯ã§ããªãã®ã§ãæ··ãããã ããããã©ãããä»æ§ã«ããã決ããªããšãããªã段éãåæã·ã¹ãã ã¯ã«ã³ã¿ã³ã«å®è£ ã§ããŠå¥¥æ·±ãããªãã ããªã ãªã®ã§ã·ã¹ãã çã«ã¯ãã£ãã¬ãŒãããã¿äººéã
- ã¢ã€ãã åæ
- Press Start 2p
- æšªå¹ çã«ã¯äžçª
- misaki font
- æ¥æ¬èªå¯Ÿå¿
game_objectã«update, drawã¡ãœããããããšãcomponentã®draw, updateãäžæžããããããèµ·ããã ai_inputã¯componentã§updateã䜿ã£ãŠå ¥åãçæããŠãããplayer_inputã¯button_downã®ãããåé¡ãèµ·ãããèµ·ããªãã£ããããã
drawã§ã¯æ©èœããªãã®ã¯ãªãã ãåŠçã®é çªããfield_stateã®åŠçã®é çªã䞊ã¹æ¿ãããšã§ããã object_pool.draw map.draw ã®é çªã«ããªããšãããªãã
game_objectã®ã¢ã€ãã ãšãææåãšããŠã®ã¢ã€ãã ãã©ãåããã°ããã ããã å°ãªããšãåèªãåããããšãå¿ èŠãããpickupã¯ããã»ã³ãã£ãŠãããåäœã£ãœãã ãŸãããããåŸããã©ããããæ確ã«ãªã£ãŠããã§ã
衚瀺æåããã£ã©ã«ãã£ãŠå€ããå¿ èŠãããã inputã«ãã£ãŠåå²ããããã«ããã ç»é¢è¿œå ã ãã§ããããããšã¯ã«ãŒãœã«ç§»åãšããã CDDAã¿ããã«ãèšå®é¡ã¯ãã¹ãŠjsonãymlã«ããã ãã£ã©ã¯ã¿ãŒã¯å®äºããšã¯ããã·ã«ãšããã ããªã®ã§ãããªã«ãã©ã¡ãŒã¿ã¯ãªãã äžå¿ã¯ã§ãããããããtype objectãšèªä¿¡ãããŠãªããcharacterã¯ãããã®ã·ã«ãšãããšããŠäœ¿ããããã ããããŸãå¿ èŠæ§ãªããã ããªã getchã§ãªããšãªãã¿ãŒã³ãœããªã£ãŠãããã移å以å€ã§ãã¿ãŒã³ãé²ãã§ããŸãã ã¿ãŒã³ãé²ãã®ã¯ç§»åã ãã§ãããããããŒã°ã©ã€ã¯ã ã£ããæ»æã§ãé²ããããã®ã²ãŒã ã«ã¯ãªããplayer_inputãã€ã移åãã§ãããšãã ãexecuteãã©ã°ããªã³ã«ããã
ã«ãŒãœã«ç§»åã¯ã¡ã³ãã€ã®ã§ããªãã ã³ãŒãã§çŽã«å°åœ¢å€å®ãããŠããããã å°åœ¢çšã®ã¯ã©ã¹ã«åãåããã Terrainãªããžã§ã¯ãã¯ç¶æ³éäŸåãã€ãŸãèå°ã¿ã€ã«ã¯ãã¹ãŠåäžã ãªã®ã§ãTerrainãªããžã§ã¯ãã®æ Œåã«ããã®ã§ã¯ãªããTerrainãªããžã§ã¯ããžã®ãã€ã³ã¿ã«ããã- å°åœ¢æ å ±ã«ã¢ã¯ã»ã¹ããããã«ãworldããåãå¿ èŠããªããªãã
- ã¿ã€ã«ããçŽã«ã¢ã¯ã»ã¹ã§ããããã«ã
ãŸãæååã®ãããããªããžã§ã¯ãã®ãããã«ããã ã©ããã£ãŠããã°ãããã ã
äœãããšæã£ããã©ãããããã©ããã£ãããããã£ãæã€ãã- ã¢ã€ãã ã®äžèº«
ãšããããã€ã¡ãŒãžããããããã«ååãåãåºããããã«ããã ãã£ãŒã«ããªããžã§ã¯ãããŠã¯ååãããããå¿ èŠã§ãªãã
ã¢ã€ãã ãæŸã£ããšããã€ã³ãã³ããªã«è¿œå ããã ãã£ãŒã«ãã®ã¯ã¢ã€ãã ã ããããããå¥ã®ãªããžã§ã¯ãã«ããããæ¶è²»ç©ãçŽ æã¯åãªãæ°å€ã ããè£ åã¯ããŸããŸãªãã©ã¡ãŒã¿ãæã£ãå¥ãªããžã§ã¯ãã ã
åã«ãªããžã§ã¯ããé åã«è¿œå ããã ãã ããä»®ã§å®äºã
è¡çªé¢ä¿ãããããããªã£ãŠããã®ã§ãã¹ãã§ç¢ºãããããšã«ããã ã¢ã€ãã ããã£ã©ã¯ã¿(Ai, Player) ãªãŒããã¬ã€ããããã system specçãªã å®éã®ããŒããŒãå ¥åãã·ãã¥ã¬ãŒããããä»ã¯getchã§æ¢ãŸãã®ã§ã§ããªããçŽã«button_downãåãä»ããããã«ãããšãã§ããªããã ããããgetchããããªã説ããããã¢ãã¡ãŒã·ã§ã³ã¯äžåã§ããªããããªã å ¥åã¯ä»»æã§ããããããå ¥åããªããŠãã²ãŒã ã«ãŒãã¯é²ãã ã¿ãŒã³ããŒã¹ã ãããšãã²ãŒã ã«ãŒãã¯åãã»ããè¡šçŸè±ãã
ãã¹ãã®ãšãã¯ã²ãŒã ã«ãŒããæåã§é²ããã°ããã®ã§ã¯ã ããŒããŒãå ¥åã¯ã§ããªãããçŽã«å ¥åããã°ãããäžå¿ã§ããã
ãã¬ã€ã€ãŒããã¡ãã¡bundle installãšãããªããŠããããã«exeãšãå®è¡åœ¢åŒã«ãããããã©ãããã°ãããã ããã ruby-packerãšããã®ããããããã ããã§åç°å¢çšã«ã³ã³ãã€ã«ããããã«ããã°ããã倧å€ãããªã®ã§æ念ã
çŽ æç³»ã®ãšãã¯ããªããžã§ã¯ãã¯ä¿æããåã«ã«ãŠã³ãã¢ããããã ãã«ããã æŠåšãšãæ¶è²»ã¢ã€ãã ã¯ãªããžã§ã¯ããšããŠä¿æãããitem_typeã«countãä¿æããããšã«ãããããäžèªç¶ã ããitemããçŽã«æ°ãå¢ããæäœãã§ããããåãåãããã«ã³ã¿ã³ã ããã¡ãã¡åæåããŠããå¿ èŠããªãã
ä»ã¯ããããå¥ã®ãªããžã§ã¯ãã«ãªã£ãŠããã®ã§ãå ±éãªããžã§ã¯ãã«ããã jsonã§èªãã§ãããåèªã€ã³ã¹ã¿ã³ã¹å€æ°ã«å ¥ããã¿ãããªããšã£ãŠã§ããã®ããªãäžæ°ã«å šã€ã³ã¹ã¿ã³ã¹ãé åã«å ¥ããé åãã€ã³ã¹ã¿ã³ã¹å€æ°ã«ãããšã§ãããæ£ç¢ºã«ãããšãitem_typeãå ±éã§ãããitemãªããžã§ã¯ãèªäœã¯ãŠããŒã¯ã§ãããååŸããŠæ¶ããã座æšãæã£ãŠãããã
ããšãã°âcâã¯ã©ã®stateã§ãçµäºã«ããããæœè±¡ã¯ã©ã¹ã«ç§»åããã
çµè·¯éžæãã©ãããã°ããã®ã ãããæãã«ã¿ãŒã²ããããããšãã©ããã£ãŠãžã°ã¶ã°ãå€å®ãããã æŠéã¢ãŒããžé·ç§»ããã ãŸãæŠéã®ãŸãã«ãã£ã¡ãããããã é£ããŠã仲éãHP,SPã衚瀺ãããAIãšã¯ç§»åã競åããã®ã§ã移ååã®ãã®ã«ãªã£ãŠããã æŠéã«ãªã£ãç¬éã²ãŒã ãªããžã§ã¯ããæ¶ãã®ã§ã移åã§ããŠããããããããŒã§ããããããšéããããšãã§ããªãã®ããéãããšãã¯åã®äœçœ®ã«ç§»åããããšããã åå©: èªåãåãããšããŠããå Žæãžç§»åããã éèµ°: èªåãåãåã®å Žæãžç§»åããã
Gosuã®ããŒããŒãã ãæåã§ããããªãšæã£ãããGosuã®ãŠã£ã³ããŠã«ãã©ãŒã«ã¹ãåœãããªããšæ€ç¥ã§ããªããããããããããªã®ã§ncurseséšåãæžãæããå¿ èŠãããã
çŸç¶ncurseã®åé¡ç¹ã
- ã¢ãã¡ãŒã·ã§ã³ãäžåã§ããªãã
- ãã©ã³ããå€ããããªãã
- æç»åäœã1ãã¹ã
CLIã§ãè¡šçŸåãäžããã
ãã¹ãé¢ä¿ãå€ããªããšãããªãããCIã§gosuå®è¡ãããšã©ããªããã ããã åäœãã¹ãã¯OKããã ããçµåã¯ã©ããªããã ãããã²ãŒã ã«ãŒãå ã§æäœã§ããã®ãã é åçã ããå¥ã«ããšã§ãããããã
ã©ã³ãã ã«å ããŠåºå®ã§ãé 眮ã§ããããã«ããã å°å³ãšæã£ããã移åãã¿ãŒã³ãšãæå®ãããã®ã§çµå±ããã¹ãã§ãããªããšãããªããã
ãã¹ãŠã®ããŒã¹ã¯mapã®é åã
- character,itemãåã蟌ãã
- cameraã®ã¡ãœããã§é åãåãåã£ãŠãæç»ããŠããã
- æ¯ã¿ãŒã³ãªã»ãã
ãããªãã®ã¯ããã¹ãŠmapã®é åæäœã§å¯çµåããŠããããšã ã
æžãæããã®ã§ããã£ã©ããããšå°åœ¢ããŒã¿ãåããªããªããå¥ã¬ã€ã€ã§åŠçãããã banbandonã§ã¯ã©ãããŠãã®ã ãããã«ã¡ã©ãšãããã¯åé¢ããŠããããã«èŠããã
bbdã§ã¯ãããäžã«æç»ããŠããã®ã«å¯ŸããŠãdiggerã§ã¯ç»é¢ã®ãã¯ã»ã«ãæå®ããŠæç»ããªããšãããªãéãã
çµå±å°åœ¢å€å®ã¯flyweightã®worldé åã§ãã£ãŠãã®ã§ãé¢ä¿ãªããªã£ããæç»ã ãã«äœ¿ãããæååé åã
ãšããããstateåãæ¿ãã ãè¿œå ããã æŠéã®ããã«ã¯ããã€ãã®ã¯ã©ã¹ããã©ã¡ãŒã¿ãçšæããŠããå¿ èŠãããã
- party
- member
- enemy
actorãããã©ã¡ãŒã¿ãã³ããŒããŠã1ã¿ãŒã³åã®çµæãå ã«èšç®ã ããŠãæŒåºçšã¡ãã»ãŒãžãçæããã ã³ãŒãã®èŠéãããããªãã
inventoryãšãã¯äŒŒããããªç¶æ³ã§ãsingletonã«ãªã£ãŠããã ä¹±ç«ããã®ãå«ãªã®ã§1ã€ã®singletonã«ãinventoryãšãpartyãšããå«ãããã«ããããªã ã¡ãã»ãŒãžãªã©ããã£ã¡ã«ä¿æããããcharacterããšã§ãªãã
ã¹ããŒããåãæ¿ããŠãæã£ãŠãªããšãããªããã®ãããã 仲éã®HPãšãè£ åãšããããããã®ãã©ãã§ä¿æããã°ãããã ããã
ãšããããsignletonã«ããŠããã°è¯ãããªã
ãšã³ã«ãŠã³ãåã«ãããšãmapäžã®ã·ã³ãã«ãè€æ°ã®ãã£ã©ã¯ã¿ãŒãæã€ããšãããããã çŸç¶ã®Characterãšåããªããªããããªæ°ãããã mapäžãšbattleäžã®characterã¯å¥ç©ã ã
=>ãããã®æ¹ã¯partyã«ããã æŠéã®æ¹ãcharacterã«ã ããŸãçŽæçã§ã¯ãªããªã
æŠéã®æ¹ã¯memberã«ãããšããå±ããŠããã¥ã¢ã³ã¹ã¯åºãã
ããããéãã®ã§æµãšä»²éã¯å¥ã«ããããããªãå ±éããŠãããšãããããã®ã§çµã¿åãããªããã
æµãã¹ãã«ãæã£ãŠãã
ä»ã®ç¶æ³ã¯ãããŒããŒãã€ã¹ã³ããšã¡ãœãããçŽã«çµã³ã€ããŠãã
ãªãã¶ãŒããã¿ãŒã³ã çµ±èšæ å ±âŠç§»åããåæ°ãçµéã¿ãŒã³ãåããæµã®æ°ã åæ©ã¥ãã«ãªãã
èŠçãé£ããããAIã«ã§ãããªããã¬ã€ã€ãŒã«ãè¿œå ãããšé¢çœãããcataclysmã¿ããã«ãå£ã®åããåŽã¯äžå¯èŠã«ããã
æ°ã¥ããŸã§ã¯ãåºå®ã®åãããããTåã§å·Šæããæ³åã
ã«ãŒãœã«ãã¿ããã ããã äœããŠãŒãã£ãªãã£ãäœã£ãŠãããã
inventoryãã·ã³ã°ã«ãã³ã«ããã®ã¯ããããããã¹ããã ããã ãšã¯ãããstateãéå®ããªãããŒã¿ãªã®ã§ããããªãã®çç±ã¯ããã
statsãæã£ãŠãã®ã¯ããããæ°ãããã ãã¬ã€ã€ãŒã ããç¥ã£ãŠããã°ããããšãªã®ã§ã ãã¡ãã¡characterãã蟿ãã®ã¯ã¡ã³ãã€ããçŽæçã§ãªãã
oo`'._..---.___..- oo`'._..---.___..- (_,-. ,..'` (_,-. ,..'` `'. ; `'. ; : :` : :` _;_; _;_; ãã£ã©ã ãã£ã©ã ãã£ã©ã> äœåœãããã çœç¬> 10ã®ãã¡ãŒãžãåãã 怿> 察ç©ã©ã€ãã« â ãã£ã©ãã«30ã®ãã¡ãŒãž ç³å> æšå â ãã£ã©ãã«5ã®ãã¡ãŒãž -------------------------------- âæŠããã|çœç¬ HP: 55/20 SP: 40/30 **--- ****- éããã|怿ã HP: 90/84 SP: 50/20 ****- ***-- ã¢ã€ãã |ç³å HP: 80/80 SP: 50/24 ***** **--- ãããã|
æ ç¹ã
âäŒæ© åæ ã¢ã€ãã 仲é è£ å ã»ãŒã ããŒã
ãã£ãŒã«ãã§ã¯ã¡ãã¥ãŒã«ã¯ã¢ã¯ã»ã¹ããªãã ã¹ããŒã¿ã¹ãã¢ã€ãã ãžã®ã·ã§ãŒãã«ããããŒãçšæããã
- ã¿ãŒã³ããŒã¹
- ã€ãã³ããªããžã§ã¯ãã«æ¥è§ŠããŠãå¥ã¢ãŒãã«é·ç§»ãã
ã¹ããŒã¿ã¹ãã¢ã€ãã ãè£ åãžã®ã·ã§ãŒãã«ããããŒãçšæããã
æ¥è§Šãããšãã«ãã©ã°ãç«ãŠãŠãstateã«å ¥ãã wants_toç³»ãã çŽã«stateãå€æŽãããšããããããã©ã°ã䜿ã£ãŠstateãéæ¥çã«ç§»åããã wants_to_meleeã®åå¥èŠçŽ ã«ã¢ã¯ã»ã¹ã§ããªããwants_to_attackãå ¥ããŠãããŠãsystemãäžåºŠåãã°ããããªã äžåºŠå®è¡ãããã³ã«ã¡ãã»ãŒãžã衚瀺ããŠãenterã®å ¥ååŸ ã¡ã«ããã
ä»ã¯ãšã³ã«ãŠã³ãã·ã³ãã«ãšæµã1察1ãªã®ã§ãèªç±åºŠãäœãã battle_entityãäœã£ãŠæŠéã¯å®å šã«ãã£ã¡ã«ç§»ãã wants_to_encounterã§å entityãä¿æããŠãã®ã§ãããããåé€ã§ããªããã- æ¢åã®æŠééšåã¯äœ¿ããªãã®ã§æ¶ã
- é è·é¢ã¢ã€ãã ã¯æ¶ã
combat_stats ãæã€=æŠéãšã³ãã£ãã£ã§åé¡ãªããmonster, playerãããã®ã¯åºå¥ãå¿ èŠãªã®ã§ä»æ¹ãªãã ãªã®ã§OKã
ãã¥ãŒããªã¢ã«ã®ããŒãã£ã¯ã«ã¯ãããçšã positionã«ã©ã€ãã¿ã€ã ã®ããentityãé 眮ããŠãæ¬äŒŒçã«ã¢ãã¡ãŒã·ã§ã³ã«ããŠããã entityã«ããããšã§ãmapæç»ã·ã¹ãã ã䜿ããmapäžãäžæžããã圢ã§è¡šç€ºã§ããã æŠéã§ã¯printããŠãã®ã§ããã®ãŸãŸäœ¿ãããšã¯ã§ããªããprintããšã«åº§æšèšç®ããŠæå®ããŠãã®ã§ãéããããã«ã¯ããžãã¯ãã³ããããªããšãããªãã
builderã®å®è£ æ¹æ³ã¯åèã«ãªããããªã®ã§ããšããããã³ããè¿œå ã
æŠéã«å ¥ããšãã¡ãŒãžãåæ ãããã field_stateã§damage_systemãåããŠãªãããã ã£ãã ãã¥ãŒããªã¢ã«ã®å 容ã LEX paintãWINEã§ããŸãå®è¡ã§ããªãã å€æããŒã«ãããŸãæ©èœããŠãªãã®ã§ããã£ãããã¥ãŒããªã¢ã«ã®ãæµçšããŠåŸåãããã·ã¹ãã ã ãå ¥ããŠã³ã¡ã³ãã¢ãŠããåé¢ããã圱é¿ç¯å²ãåºãã
è£ ååã®ownerããã£ã©ã«ãªã£ãŠãããããã€ã³ãã³ããªã«è¡šç€ºãããŠãªããšãããã®ã ã£ãã è£ åäžã®ãã®ã¯ownerãåæŠéçšentityã«ãªããè£ åããŠãªããšownerã¯player_entityã«ãªãã party_entityãšãã«ããã»ãããããããªã ããããããhc = hunger_clock.get(entity);
ã®ããã«ãentityããããã£ãŠããã°getã§å±æ§ãã³ã³ããŒãã³ããååŸã§ããããã¡ãã¡forã«é·ãæžãå¿ èŠããªãã
æŠéé¢é£ã®ãªãã¡ã¯ã¿ããããããŸããããªããªâŠã ã³ã³ãã€ã«åŸã®ãã©ãŠã¶è¡šç€ºãäœåãè©ŠããããããŸããã£ãŠãªããã²ãŒã å 容ãšé¢ä¿ããªãã®ã§ãè¿œå ããªãã
- ã¢ã€ãã ã®è²
dispatcher modelã®å°å ¥ãé·ãç« ã
åªãè£ åæ©èœã¯è¿œå ããªãã®ã§ããã£ãšèŠãã ãã
chapter65ãåæ°ãå¹æã¿ãŒã³ã¯å®è£ ããªããå¹æã®ã¿ãŒã³æ°ã¯ãåŸã®æŠéã§ããããããã£ãŒã«ãç»é¢ã§ã¯ãããªãã®ã§ãã¹ã«ãŒã
åå äžæãthread 'main' panicked at 'Tried to fetch data of type "alloc::boxed::Box<dyn shred::world::Resource>", but it was already borrowed mutably.', /home/green/.cargo/registry/src/github.com-1ecc6299db9ec823/shred-0.10.2/src/cell.rs:268:33
ã¹ã¿ãã¯ãã¬ãŒã¹ãåºããŠãæªãããšãããã¹ã³ãŒãã«å ¥ãããšè§£æ±ºããããªãã³ã³ãã€ã©ã§æ€ç¥ã§ããªãã®ãã¯ããããããªãã
Chapter66ãã¢ã€ãã ãªãã§äœ¿çšã§ããéæ³ãè¿œå ããç« ãèŠããã¢ã€ãã ã䜿ããšãéæ³ã䜿ããããã«ãªãã¿ã€ãããããåŸåãã«ãªããããä»ã®ãšãããã£ãŒã«ãã§äœã䜿ããããã«ããäºå®ã¯ãªãããæŠéã§äŒŒããããªããšãããã¯ãã
æŠåšã«ããç¶æ ç°åžžãªã©ãå®è£ ããŠããã
- ããããäœæ
- ã¹ããŒã³ãæ¹è¯(MasterTable)
- è€æ°ã¿ã€ã«ãå°æãããã¹ãåœããå€å®ãAI調æŽ
- ã¬ãã«ã¢ããæã®ã¹ããŒã¿ã¹èª¿æŽ
該åœããªããããªã®ã§ãã»ãŒå®è£ ãªãã
- è¿å¯ã£ããšãã®èªçæ»æ
- ã¢ã€ãã è¿œå
- Chapter69
- æŠåšã®æ¡åŒµãåèã«ãªã
- ã¢ã€ãã ã®ãã³ãã¬ãŒãã+1ãšã+2ãå¥ã¢ã€ãã ãšããŠãã¡ãã¡è¿œå ããªããŠããããã«ãã
- æŠåšã®effectãå¥ã«ããŠãã¬ã€ããšããŠãŸãšãããããšãã°name: venomous, effect: [damage_over_time: 2â]ãšå®çŸ©ããŠãã
- ãã¬ã€ããšãã³ãã¬ãŒããçµã¿åãããŠãå€ãã®ããªãšãŒã·ã§ã³ãçã¿åºã
- Chapter70
- é£ã³éå ·
ã¿ãŒã²ããåšããããŸãããããããªããããŸãå©çšã§ããããªãšããã¯ãªãã£ãã
ããã§ãããã°ã¯å®çžŸã®ãã€ãã»ãŒãã«ãä¿åãããããã«ãããã·ã³ãã«ã§åèã«ãªãã
- çŸåšã®ãã©ã³ãã§ã¯é·ãæç« ãèªã¿ã¥ããã®ã§ããã°ã ãå¥ã®ãã©ã³ãã«ãã
- ãŸãrltkã®å šæ©èœãç¥ããªããšãããããæ©èœãéžæã§ããªãã
- ãã©ã³ãå€ãããšã ãã¶å°è±¡ãå€ãã£ãã工倫ã®ãããããããšããã«æ°ã¥ããªãã®ã§ãæ¢åã®ãã®ããã¬ã€ããŠã¿ãå¿ èŠããããã
- 巚倧ãªguiãã¡ã€ã«ãã¢ãžã¥ãŒã«åå²
73ç« ãsystemããã«ãã¹ã¬ãã察å¿ã«ããŠé«éåãããããšã§ããã
ãããè¿œå ã ãããšãã«èŠããšããã¯ãªãã®ã§ã¹ãããã
1ã¿ãŒã³é¢ããªããšãæµãæ¶ããªããããäžåºŠãšã³ã«ãŠã³ãããããšã¯ãªãã®ã§ãäœãããéãã®ã ãã- run_systemãäžåºŠå®è¡ãããšæµã·ã³ãã«ã¯æ¶ãããããã¢ã€ãã ãèŠããã®ã ãããã®åº§æšã«1ã¿ãŒã³çµéããªããšç§»åã§ããªãç¶æ ã«ãªã
- run_systemsã2床å®è¡ãããšèªç¶ãªç¶æ ã«ãªããããããããªã
- delete_the_deadãã¿ãŒã³ã®é¢ä¿ã§æµãæ¶ããŠãªãã®ã§ã¯
ããããsystemã«åå²ããããããŸãåããªãã1ã¿ãŒã³é²ããªããšãæ»äœãæ¶ããªããæŠéåå©å€å®ãå ¥ããªããå°ã£ããã¹ããŒããåãæ¿ãããªããªãã»ãã®ã·ã¹ãã ãšã®é£åããã€ã¡ãŒãžãšç°ãªãããã ã
- éããã®ã¯æ©æ§ãå¥ãªã®ã§ã§ãããmainãã¡ã€ã«ããæ£ããstateãåãæ¿ãã£ãŠãã
- ãã¬ã€ã€ãŒã®äœåå€å®ãåããŠãªã
- ãµã³ãã«ã®delete_the_deadãsystemã«ãªã£ãŠããªãããšã¯ãã³ãããrun_systemã§å®è¡ãããstateå ±éã§æ¯ã«ãŒãå®è¡ããããã«ãªã£ãŠãã
- ãšã¯ããããšã¡ãã£ãšã§ã§ããããªãã ããªãåé¡ã¯æ»äœãæ¶ããäœåã1ã¿ãŒã³ãã€ãã¹ã«ãªãããšã ãã ãecs.maintain()ããããšåé€ã§ããããã«ãªã£ããsystemå ã§ã®entityåé€ã¯ãecs.maintain()ãå®è¡ããªããšåé€ãããªãããã
- ãšã¯ãããã¢ã€ãã ããããã«ecsãå¿ èŠã§systemã§ã©ããã察å¿ããã°è¯ãããããã
stateããã£ã¡ãã«ãªã£ãŠããã®ã§å¥ã«ãããsystemã¯å¥ã§ãããuse super::{ gamelog::BattleLog, Attributes, Combatant, Equipped, InBackpack, LootTable, Map, Monster, Name, OnBattle, Player, Pools, Position, RunState, }; use specs::prelude::*;
pub struct DamageSystem {}
impl<âa> System<âa> for DamageSystem { type SystemData = ( ReadStorage<âa, Pools>, ReadStorage<âa, Player>, ReadStorage<âa, Name>, ReadStorage<âa, Combatant>, Entities<âa>, WriteExpect<âa, BattleLog>, WriteExpect<âa, RunState>, );
fn run(&mut self, data: Self::SystemData) { let ( pools, players, names, combatant, entities, mut log, mut runstate, ) = data;
let mut dead: Vec<Entity> = Vec::new(); // Using a scope to make the borrow checker happy
for (entity, pools, _combatant) in (&entities, &pools, &combatant).join() { if pools.hit_points.current < 1 { let player = players.get(entity); match player { None => { let victim_name = names.get(entity); if let Some(victim_name) = victim_name { log.entries.push(format!(â{} is deadâ, &victim_name.name)); } dead.push(entity); } Some(_) => { *runstate = RunState::GameOver; } } } }
// HPã0ã«ãªã£ãentityã®åé€ // entityåé€ãããŠãååšãç¶ããŠããããã«èŠãã for victim in dead { entities.delete(victim).expect(âDelete failedâ); }
// åå©å€å® // if maybe_win { // check_battle_win(ecs); // } } }
pub struct WinSystem {}
impl<âa> System<âa> for WinSystem { type SystemData = ( Entities<âa>, ReadStorage<âa, Pools>, ReadStorage<âa, Monster>, ReadStorage<âa, Combatant>, WriteStorage<âa, OnBattle>, WriteStorage<âa, Equipped>, WriteStorage<âa, InBackpack>, WriteStorage<âa, Position>, ReadStorage<âa, LootTable>, WriteExpect<âa, rltk::RandomNumberGenerator>, WriteExpect<âa, BattleLog>, WriteExpect<âa, RunState>, );
fn run(&mut self, data: Self::SystemData) { let ( entities, pools, monster, combatant, mut on_battle, mut equipped, mut carried, mut positions, loot_tables, rng, mut log, mut runstate ) = data;
let mut dead: Vec<Entity> = Vec::new();
if (&entities, &pools, &monster, &combatant).join().count() == 0 { for (_entity, on_battle) in (&entities, &on_battle).join() { dead.push(on_battle.monster); } }
for victim in dead { log.entries.push(format!(âYou win!â)); entities.delete(victim).expect(âDelete failedâ); *runstate = RunState::BattleResult; on_battle.clear(); } } }
- è€æ°ã®åããšããããšããorã£ãŠã©ããããã ãenumã§ã
- stateã®enumããã¹ãããenumã«ããã°ããã®ã§ã¯ããšèãããããŸãããã
GUIéšåã«æžããŠãããå šäœçã«åé¢ãããŠãªãã®ã§ãåé¢ã
- systemã«ãããšããããŸãéèµ°æåæã®ãšã³ãã£ãã£åé€ãããŸããããªã
- ãšã³ãã£ãã£åé€éšåãå®è¡ãããŠãªãããã§ãéèµ°æåã¡ãã»ãŒãžãåºãªã + 次ã®æŠéæã«2äœè¡šç€ºããã
- éèµ°ã§ã¯å³stateãåãæ¿ããããã«ãªã£ãŠãããããã®ãžããªæ°ããããsystemã䜿ãå Žåã ãšãwants_run_awayçæâã¿ãŒã³åŠçâéèµ°ãšãªãå®è¡ã¿ã€ãã³ã°ãããããããªãããšã«ãªããdelete_the_deadãšåãããã«ãã¿ãŒã³åŠçãåŸ ããã«å³å®è¡ãããæããªã®ã§systemã«ããªã
æ»æäž»ãšå¯Ÿè±¡ãåãã®ããããã¡ãŒãžãéããªããªã£ãŠãããè ¹æžãæã®effectã®æ»æäž»ãNoneã«èšå®ããŠå®äºã
å€ããŠãã£ã¬ã¯ããªããããã¥ãããªã£ãŠããããã¥ãŒããªã¢ã«ã®æçµç€ã«ãã£ãããŸã ãã£ãŠãªãã 衚瀺ããŒã¿ãç°ãªãã ãã§ãæäœã¯åããªã®ã§ãåŒæ°ã§ããŒã¿ãéžæã§ããããã«ããã ãã£ãŒã«ãUIãšåã圢åŒã§æåã衚瀺ããããã£ãŒã«ãUIã¯ãã¥ãŒããªã¢ã«ã®ãªãã¡ã¯ã¿ã§å ±éåãããŠãããã¯ããªã®ã ããæ§ã®éšåãæ®ã£ãŠããæ°ããããã¿ãŒã²ããéžæéšåã¯åãé¢æ°ãªã®ã«ããã£ãŒã«ããšæŠéã§çµæã«å·®ãåºããæŠéã®éžæè¢ãBãã衚瀺ãããè¥å¹²è¡šç€ºãä¹±ããŠããã察象ããã¬ã€ã€ãŒã«éå®ããããããããªããªã£ããã©ããä»ã¯å³æ¹ã«ããæå³ã®ããã¢ã€ãã ã ããªã®ã§è¯ãã
å°æ¥çã«ã¯ã¢ã€ãã ã«å¯Ÿè±¡ãå³æ¹åäœãæµåäœãå³æ¹å šäœãæµå šäœãšãã颚ã«ããããŠãã¢ã€ãã ããšã§ãããã®ã¿ãŒã²ããéžæç»é¢ãåºãåºããªãã決ãããã
äžç·ããã«battle.rsãžå ¥ã£ãŠããŠãããã¥ããã®ã§ããã£ãŒã«ããšåæ§ã«åå²ããããšãããããã£ãŒã«ããšã®å ±éåã¯èããªããããã§ã«ã¢ã€ãã 䜿çšã¯åãé¢æ°ã«ãªã£ãŠããã
guiãã£ã¬ã¯ããªãbattleçšããã£ãŒã«ãçšã§ããã«åããŠãããã®ã ãããããªã«æå³ãªããããªæãããããbattleã¯ãããªã«å€ããªããããªã
ãã¡ãã¡æµãæ¢ãã®ãã ããã®ã§ç®ã®åãžå¬åã§ããããã«ããã
åã«ååãå€ããã ããéæ³ã¯åºãŠããªãããã©ãŠã¶çããã©ãŠã³ç®¡ã®èæ¯ç»åãèšå®ããééãããããããããã£ãœããªã£ãã
ã¡ã€ã³ã¡ãã¥ãŒãšæŠéã®ç»é¢ãèšå®ãããæŠéã®èæ¯ã¯ã¹ããŒãžã«ãã£ãŠå€åããããã
äž»èŠOSã§ãã«ãããŠãªãªãŒã¹ã«æ·»ä»ããã- Linuxã§ã¯waylandé¢ä¿ã§å®è¡ãšã©ãŒã«ãªããWindows(wine)ã¯ããŸããã£ããã¯ãã¹ãã«ãçšã®ã©ã€ãã©ãªã䜿ãã°ããããã
- Macã§ã¯ããŸããããªãã£ãã®ã§ç¡èŠãcrossã®ãã«ã察象ã«ãªãã£ã
use rltk::BTermBuilder;
const SCREEN_WIDTH: i32 = 80;
const SCREEN_HEIGHT: i32 = 60;
const DISPLAY_WIDTH: i32 = SCREEN_WIDTH / 2;
const DISPLAY_HEIGHT: i32 = SCREEN_HEIGHT / 2;
let context = BTermBuilder::new()
.with_title("Dungeon Crawler")
.with_fps_cap(30.0)
.with_dimensions(DISPLAY_WIDTH, DISPLAY_HEIGHT)
.with_tile_dimensions(8, 8)
.with_resource_path("resources/")
.with_font("dungeonfont.png", 32, 32)
.with_simple_console(DISPLAY_WIDTH, DISPLAY_HEIGHT, "dungeonfont.png")
.with_simple_console_no_bg(DISPLAY_WIDTH, DISPLAY_HEIGHT, "dungeonfont.png")
.build()?;
- è€æ°ã®ãã©ã³ããèšå®ããããšã§ãæµãã¢ã€ã³ã³ã«ãã€ã€ãUIã®ã¢ã«ãã¡ãããã¯ãã®ãŸãŸã«ã§ããããã ãããããªã
- æ¥æ¬èªè¡šç€ºã¯æ°ãå€ãããããå³ããããããã©ã³ããšç»åããããã³ã°ããŠããä»çµã¿ã¯ã©ããªã£ãŠããã®ã ãããã²ãããªã«ã¿ã«ãã§ãé£ããããã«èŠãã
- éå§ãã£ã¬ã¯ããªãå€ãããããããã«ãããšãã£ã¿ããã§ããªããªããã·ã§ã«ãããããªããšããã¡ã€ã«ãèŠã€ãããªããšã©ãŒã«ãªã
- ãã³ãºãªã³ãèŠãéãããã©ã³ãã¯åäžã®ãµã€ãºãšããããã§ã¯ãªããã¢ã€ã³ã³ãã©ã³ãã¯ã§ããããŠãæ®éã®æåãã©ã³ãã¯å°ããããããšãã§ãã
- consoleããšã«fontãèšå®ããå ¥å察象ã®consoleãåãæ¿ããããšã§è€æ°ã®fontãäž¡ç«ã§ãããéãªãé ããã
- ãšãã£ã¿ãã«ãã¯compileæã«ãããžã§ã¯ããããã«ç§»åããããšã§ã§ãããcdããªããšresourceãèŠã€ãããããã«ããšã©ãŒã«ãªã
- wasmãreleaseãã«ãããŠããã©ãŠã¶ã§ç¢ºèªãããšç©ºçœã«ãªã£ãŠããããã«ãã¯æåãã
- jsã®ãšã©ãŒãèŠããšããã¯ãfonté¢ä¿ã®ãã
- 解決ã§ãããã«ãªã+ã¬ã€ã€ãŒã®è€éåãé¿ããããã«ç»åã¯ããããããããšããšãã¹ãã§ããããããšã¯æŠéæã®æµãã£ã©ã®è¡šç€ºã ã£ãããããã¯ããã©ã«ãã§å
¥ã£ãŠããã©ã³ããå°ããããããã§xpãã¡ã€ã«ã衚瀺ããããšã§éæã§ãã
- ãšã¯ãããããããšãééãã§ããªããèæ¯ã¯ãŽã£ãã衚瀺ããã®ã§åé¡ãªãããæµç»åã§ãããããšããªãã ãã
- ãããã¯ããã€ããªå®è¡ã®ã»ããããŸãããã®ã§ããã°äžæçã«wasmã¯æŸæ£ããã®ãããããå ã«ãã€ããªãã«ããå®è¡ã§ããäœå¶ãæŽããã
- with_sprite_sheet ã䜿ããããªäºæ
- exampleãåèã«ããŠããã£ã¬ã¯ããªæå®ã調æŽãããšè§£æ±ºãã
- WASMãã«ã以å€ã§æšªç·ãå ¥ãã®ãæ°ã«ãªããEXWMã§ã ãçºçããããã ãcinnamonç°å¢ã®wineãšãã€ããªèµ·åã ãšã暪ç·ã¯å ¥ããªã
æåã®äžäººåãã衚瀺ãããªããŠãäœäººããã®ããããã«ããã®ã§ã
ããŒããŒãã§éžæã§ããã®ã¯çŽ æŽãããããã¢ã€ãã ã®èª¬æãèŠãããªãã®ã«æ°ã¥ãããã«ãŒãœã«ç§»åãå®è£ ããªããšãããªãããã¢ã€ãã ã®å¹æã«å ããŠããã¬ãŒããŒããã¹ããå ¥ãããã
ã¢ã€ãã 詳现ã®å ±éããŒã«ããããè¿œå ããã- x, y, entityãmenusã§å ¥ãããguiã§è¡šç€ºåŠçãããmenuã§itemsã䜿ã£ãŠäœ¿çšããx, yãéèŠã«ãªãã
- ãããã®tooltipã®å Žåã¯ãçŽã«æž¡ããªããŠãpositionã§åŸããæ±ããããšãã§ãããtooltipãåžžã«è¡šç€ºããéšåãšãtooltipãè¿œå ããéšåã®2ã€ããã
- ã¡ãã¥ãŒã¢ã€ãã ã®tooltipã®å Žåã¯ãx, yã¯åŸããããããªãã衚瀺ããŠããã®ãšåãç®æã§ãtooltipãæå¹ã«ããå¿ èŠããã
ã¢ã€ãã ã®èª¬ææããã¬ãŒããŒããã¹ããšããããã¯ãã¡ãããšãã説æã
ã¢ã€ãã ãæŸã£ãã䜿ããšééãåæ ããããããåºã§å£²è²·ãããšãã¯å€ãããªãã売買æã«dirtyãè¿œå ããããã«ãããããäžæ©æ©ããªããšåèšç®ãããªãããšããããããã§è¯ãã