395|3

171

帖子

10

TA的资源

一粒金砂(高级)

《Rust实战》读书笔记——第8章,游戏和rust [复制链接]

本章号称要做个rpg出来:

use rand;
use rand::seq::SliceRandom;
use rand::Rng;

#[derive(Debug)]
struct Dwarf {}

#[derive(Debug)]
struct Elf {}

#[derive(Debug)]
struct Human {}

#[derive(Debug)]
enum Thing {
  Sword,
  Trinket,
}

trait Enchanter: std::fmt::Debug {
  fn competency(&self) -> f64;

  fn enchant(&self, thing: &mut Thing) {
    let probability_of_success = self.competency();
    let spell_is_successful = rand::thread_rng()
      .gen_bool(probability_of_success);      // <1>

    print!("{:?} mutters incoherently. ", self);
    if spell_is_successful {
      println!("The {:?} glows brightly.", thing);
    } else {
      println!("The {:?} fizzes, \
             then turns into a worthless trinket.", thing);
      *thing = Thing::Trinket {};
    }
  }
}

impl Enchanter for Dwarf {
  fn competency(&self) -> f64 {
    0.5                                       // <2>
  }
}
impl Enchanter for Elf {
  fn competency(&self) -> f64 {
    0.95                                      // <3>
  }
}
impl Enchanter for Human {
  fn competency(&self) -> f64 {
    0.8                                       // <4>
  }
}

fn main() {
  let mut it = Thing::Sword;

  let d = Dwarf {};
  let e = Elf {};
  let h = Human {};

  let party: Vec<&dyn Enchanter> = vec![&d, &h, &e];// <5>
  let spellcaster = party.choose(&mut rand::thread_rng()).unwrap();

  spellcaster.enchant(&mut it);
}

可是这只有输出没输入的是rpg,反正我不信。其实就是想 给 &dyn Trait、&mut dyn、Box<dyn Trait>里面的&dyn Trait举例子嘛。

后面还有rust语言的知识点:如何支持同一个函数在不同情况下抛出不同的Error。解决方案一是用Box<dyn Error>兼容任意的error,另一个,是自己定义一个包含了该函数所能出现的所有错误类型的枚举,还有就是用unwrap()和expect()。

此帖出自编程基础论坛

最新回复

游戏好呀,我最近在看godot  详情 回复 发表于 2024-6-17 17:40

回复
举报

6722

帖子

9

TA的资源

版主

这知识点有大量需要学习呀。
此帖出自编程基础论坛

回复

716

帖子

1

TA的资源

纯净的硅(高级)

真做出也给好用实在的游戏,这本书就可以大卖了。。。

此帖出自编程基础论坛

回复

4381

帖子

12

TA的资源

版主

游戏好呀,我最近在看godot
此帖出自编程基础论坛

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表