使用 Elixir 编写一个简单的游戏

通过编写“猜数字”游戏学习 Elixir,并将该语言与您已知的语言进行比较。
44 位读者喜欢这篇文章。
Using open source tools to play Dungeons and Dragons

Peaches&Cream 在 Flickr 上发布,CC BY 2.0 许可

要学习一门新的编程语言,最好专注于大多数编程语言的共同之处

  • 变量
  • 表达式
  • 语句

这些概念是大多数编程语言的基础。由于这些相似之处,一旦你掌握了一门编程语言,你就可以通过识别其差异来开始了解另一门语言。

学习新语言的另一个好方法是从一个标准程序开始。这使您可以专注于语言本身,而不是程序的逻辑。在本系列文章中,我们正在使用“猜数字”程序来做到这一点,其中计算机选择一个介于 1 到 100 之间的数字,并要求您猜测。程序循环直到您猜对数字为止。

“猜数字”程序练习了编程语言中的几个概念

  • 变量
  • 输入
  • 输出
  • 条件判断
  • 循环

这是一个学习新编程语言的绝佳实践实验。

在 Elixir 中猜数字

Elixir 编程语言是一种动态类型的函数式语言,旨在构建稳定且可维护的应用程序。它与 Erlang 运行在相同的虚拟机之上,并具有许多相同的优点,但语法略微简单。

您可以通过编写一个“猜数字”游戏版本来探索 Elixir。

这是我的实现

defmodule Guess do
  def guess() do
     random = Enum.random(1..100)
     IO.puts "Guess a number between 1 and 100"
     Guess.guess_loop(random)
  end
  def guess_loop(num) do
    data = IO.read(:stdio, :line)
    {guess, _rest} = Integer.parse(data)
    cond do
      guess < num ->
        IO.puts "Too low!"
        guess_loop(num)
      guess > num ->
        IO.puts "Too high!"
        guess_loop(num)
      true ->
        IO.puts "That's right!"
    end
  end
end

Guess.guess()

要为变量赋值,请列出变量名,后跟 = 符号。例如,语句 random = 0 将零值赋给 random 变量。

该脚本首先定义一个模块。在 Elixir 中,只有模块可以包含命名的函数。

下一行定义了将作为入口点的函数 guess(),它

  • 调用 Enum.random() 函数以获取一个随机整数
  • 打印游戏提示
  • 调用将作为循环的函数

游戏的其余逻辑在 guess_loop() 函数中实现。

guess_loop() 函数使用 尾递归 进行循环。在 Elixir 中有几种循环方式,但使用尾递归是一种常见的方式。guess_loop() 做的最后一件事是调用自身

guess_loop() 函数的第一行读取用户的输入。下一行使用 parse() 将输入转换为整数。

cond 语句是 Elixir 版本的多分枝语句。与其他语言中的 if/elifif/elsif 不同,Elixir 不会以不同的方式对待第一个或最后一个分支。

cond 语句具有三向分支:猜测可以小于、大于或等于随机数。前两个选项输出不等式的方向,然后尾调用 guess_loop(),循环回到开头。最后一个选项输出 That's right,函数结束。

示例输出

既然您已经编写了 Elixir 程序,您就可以运行它来玩“猜数字”游戏。每次您运行程序时,Elixir 都会选择一个不同的随机数,您可以不断猜测直到找到正确的数字。

$ elixir guess.exs
Guess a number between 1 and 100
50
Too high
30
Too high
20
Too high
10
Too low
15
Too high
13
Too low
14
That's right!

“猜数字”游戏是学习新编程语言的绝佳入门程序,因为它以非常直接的方式练习了几个常见的编程概念。通过用不同的编程语言实现这个简单的游戏,您可以演示这些语言的一些核心概念并比较它们的细节。

您有最喜欢的编程语言吗?您将如何用它编写“猜数字”游戏?关注本系列文章,了解可能让您感兴趣的其他编程语言的示例。

接下来阅读
标签
Moshe sitting down, head slightly to the side. His t-shirt has Guardians of the Galaxy silhoutes against a background of sound visualization bars.
Moshe 自 1998 年以来一直参与 Linux 社区,帮助举办 Linux “安装派对”。他自 1999 年以来一直从事 Python 编程,并为核心 Python 解释器做出了贡献。Moshe 在 DevOps/SRE 这些术语出现之前就一直是 DevOps/SRE,他非常关心软件可靠性、构建可重现性以及其他此类事情。

评论已关闭。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.