TranslateProject/sources/tech/20201209 Program a simple game with Elixir.md
DarkSun d5466d1fda 选题[tech]: 20201209 Program a simple game with Elixir
sources/tech/20201209 Program a simple game with Elixir.md
2020-12-11 05:03:23 +08:00

5.4 KiB

Program a simple game with Elixir

Learn Elixir by programming a "guess the number" game and comparing the language against ones you know. A die with rainbow color background

To you learn a new programming language, it's good to focus on the things most programming languages have in common:

  • Variables
  • Expressions
  • Statements

These concepts are the basis of most programming languages. Because of these similarities, once you know one programming language, you can start figuring another one out by recognizing its differences.

Another good tool for learning a new language is starting with a standard program. This allows you to focus on the language, not the program's logic. We're doing that in this article series using a "guess the number" program, in which the computer picks a number between one and 100 and asks you to guess it. The program loops until you guess the number correctly.

The "guess the number" program exercises several concepts in programming languages:

  • Variables
  • Input
  • Output
  • Conditional evaluation
  • Loops

It's a great practical experiment to learn a new programming language.

Guess the number in Elixir

The Elixir programming language is a dynamically typed functional language designed for building stable and maintainable applications. It runs on top of the same virtual machine as Erlang and shares many of its strengths—but with slightly easier syntax.

You can explore Elixir by writing a version of the "guess the number" game.

Here is my implementation:

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

To assign a value to a variable, list the variable's name followed by the = sign. For example, the statement random = 0 assigns a zero value to the random variable.

The script starts by defining a module. In Elixir, only modules can have named functions in them.

The next line defines the function that will serve as the entry point, guess(), which:

  • Calls the Enum.random() function to get a random integer
  • Prints the game prompt
  • Calls the function that will serve as the loop

The rest of the game logic is implemented in the guess_loop() function.

The guess_loop() function uses tail recursion to loop. There are several ways to do looping in Elixir, but using tail recursion is a common one. The last thing guess_loop() does is call itself.

The first line in guess_loop() reads the input from the user. The next line uses parse() to convert the input to an integer.

The cond statement is Elixir's version of a multi-branch statement. Unlike if/elif or if/elsif in other languages, Elixir does not treat the first nor the last branch in a different way.

This cond statement has a three-way branch: The guess can be smaller, bigger, or equal to the random number. The first two options output the inequality's direction and then tail-call guess_loop(), looping back to the beginning. The last option outputs That's right, and the function finishes.

Sample output

Now that you've written your Elixir program, you can run it to play the "guess the number" game. Every time you run the program, Elixir will pick a different random number, and you can guess until you find the correct number:

$ 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!

This "guess the number" game is a great introductory program for learning a new programming language because it exercises several common programming concepts in a pretty straightforward way. By implementing this simple game in different programming languages, you can demonstrate some core concepts of the languages and compare their details.

Do you have a favorite programming language? How would you write the "guess the number" game in it? Follow this article series to see examples of other programming languages that might interest you.


via: https://opensource.com/article/20/12/elixir

作者:Moshe Zadka 选题:lujun9972 译者:译者ID 校对:校对者ID

本文由 LCTT 原创编译,Linux中国 荣誉推出