昨天我们使用这两个 struct 来代表整个游戏的状态,那我们今天就实际的来定义他们
在开始之前,我来快速讲一下 struct 是什麽:
在开始讲 struct 之前,我来快速讲一下 map 是什麽XD
elixir 的 map 长这样 %{"key" => "value"}
用法跟 ruby 的 hash 几乎一样,只差前面有%
如果前面的 key 是 atom 的话 %{:key => "value"}
则可以缩写成 %{key: "value"}
常常这样子用 apple = %{size: "large", color: "green", prize: 99}
struct 的话是被定义在 module 底下的特殊 map ,
我们可以帮他设定固定的 key 与 预设 value。
假如我们帮 Apple module 定义一个 struct :
defmodule Apple do
defstruct size: "normal", color: "red", prize: 5
end
在我们呼叫 %Apple{}
的时候,就会得到 %Apple{size: "normal", color: "red", prize: 5}
我们开始把这些结构写一写吧
%Game{
rounds: [%Round{...}]
host_hand: [],
guest_hand: [],
round: 1,
winner: nil
}
%Round{
host_desk: [],
guest_desk: [],
winner: nil
}
我们先新增一个档案叫 game.ex 来装这些东西,暂时先都写在里面就好,之後再搬。
首先定义 Game module 与 Round module,
# game.ex 档案
defmodule Game do
end
defmodule Round do
end
再帮他们定义昨天设计好的 struct
# game.ex 档案
defmodule Game do
defstruct rounds: [], host_hand: [], guest_hand: [], round: 1, winner: nil
end
defmodule Round do
defstruct host_desk: [], guest_desk: [], winner: nil
end
完成之後打开我们可以在 iex 打开 game.ex 看看
(iex 是 elixir 附赠的互动模式)
$ iex game.ex
Erlang/OTP 24 [erts-12.0.3] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1]
Interactive Elixir (1.12.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> %Game{}
%Game{guest_hand: [], host_hand: [], round: 1, rounds: [], winner: nil}
iex(2)> %Round{}
%Round{guest_desk: [], host_desk: [], winner: nil}
iex(3)>
在我们打出 %Game{}
他就回传给我们整包预设的状态了
也可以直接指定里面的内容给他
iex(3)> %Game{guest_hand: ["黑魔导", "神圣彗星反射力量"]}
%Game{
guest_hand: ["黑魔导", "神圣彗星反射力量"],
host_hand: [],
round: 1,
rounds: [],
winner: nil
}
明天我们就可以开始写游戏本身了
我推荐使用 asdf 这个多语言版本管理工具 来安装 elixir 与 erlang (elixir 需要 erlang)
在这篇文章的当下 elixir 是 1.12.3 erlang 是 24.0.6
安装有问题可以留言,我看看能不能帮上忙,有时候装环境真的很难搞。
<<: [区块链&DAPP介绍 Day11] Solidity 教学 - units and globally available variables-2
范例: # -*- coding: utf-8 -*- import pandas as pd im...
鬼故事 - 不是,你偷这些干嘛 Credit: System32Comics 灵感来源:UCCU H...
不知道跑了多久,可能有一世纪的感觉,山姆终於累得停了下来。 上帝关起了一道门,总会为你开启另一扇窗...
今天就来完成登入验证的部分! 昨天已经完成发送帐号密码到api,验证ok即发送一笔JWT给clien...
今天要利用之前学到的东西写一个猜数字游戏,此猜数字游戏要符合以下条件: 1 猜数字范围介於0-99间...