通过编写一个简单的游戏学习 C 语言

这款“猜数字”游戏是学习新编程语言时的绝佳入门程序。以下是如何用 C 语言编写它。
88 位读者喜欢这篇文章。
Business woman on laptop sitting in front of window

图片来源:Mapbox Uncharted ERG, CC-BY 3.0 US

在小学时自学了编程。我的第一个程序是在 Apple II 上编写的,但最终,我通过读书和实践学习了 C 语言。而练习编程的最佳方式是编写示例程序,以帮助运用你的新知识。

我喜欢用新语言编写的一个程序是一个简单的“猜数字”游戏。计算机从 1 到 100 中随机选择一个数字,你必须通过猜测来找出它。在另一篇文章中,我展示了如何用 Bash 编写这个“猜数字”游戏,我的 Opensource.com 同事也撰写了关于如何用 JavaJulia 和其他计算机语言编写该游戏的文章。

“猜数字”游戏的优点在于它练习了几个编程概念:如何使用变量、如何比较值、如何打印输出以及如何读取输入。

在夏天,我录制了一个视频系列,教人们如何用 C 编程语言编写程序。从那时起,我收到了许多通过观看该系列学习 C 编程的人的消息。所以,我想我应该跟进,用 C 语言编写一个“猜数字”游戏。

选择一个随机数

通过编写一个函数来选择一个随机数,开始“猜数字”游戏。在编写函数时,优秀的程序员会尝试使其具有灵活性,以便他们可以重复使用它们来解决略有不同的问题。因此,与其硬编码函数以选择 1 到 100 之间的随机数,不如编写函数以选择 1 到某个整数值 maxval 之间的随机数

#include <stdio.h>
#include <sys/random.h>

int
randnum(int maxval)
{
  /* pick a random number from 1 to maxval */

  int randval;

  getrandom(&randval, sizeof(int), GRND_NONBLOCK);

  /* could be negative, so ensure it's positive */

  if (randval < 0) {
    return (-1 * randval % maxval + 1);
  }
  else {
    return (randval % maxval + 1);
  }
}

该函数使用 Linux 系统调用 getrandom 来生成一系列随机位。你可以在手册页上了解有关此系统调用的更多信息,但请注意,getrandom 将用随机的 0 和 1 填充变量。这意味着最终值可能是正数或负数,因此你需要稍后进行测试以确保你的 randnum 函数的结果为正值。

编写程序

你可以使用此函数来编写你的“猜数字”程序

#include <stdio.h>
#include <sys/random.h>
 
int
randnum(int maxval)
{
  ...
}

int
main(void)
{
  int number;
  int guess;

  number = randnum(100);

  puts("Guess a number between 1 and 100");

  do {
    scanf("%d", &guess);

    if (guess < number) {
      puts("Too low");
    }
    else if (guess > number) {
      puts("Too high");
    }
  } while (guess != number);

  puts("That's right!");

  return 0;
}

该程序首先使用 randnum 函数选择一个 1 到 100 之间的随机数。在向用户打印提示后,程序进入一个 do-while 循环,以便用户可以猜数字。

在循环的每次迭代中,程序都会测试用户的猜测。如果用户的猜测小于随机数,程序会打印“太小”,如果猜测大于随机数,程序会打印“太大了”。循环继续,直到用户的猜测与随机数相同。

当循环退出时,程序会打印“猜对了!”然后立即结束。

$ gcc -o guess -Wall guess.c

$ ./guess
Guess a number between 1 and 100
50
Too high
30
Too low
40
Too low
45
Too high
42
Too low
43
Too low
44
That's right!

试用一下

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

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

接下来阅读什么
标签
photo of Jim Hall
Jim Hall 是一位开源软件倡导者和开发者,最著名的是他在 GNOME 中的可用性测试以及作为 FreeDOS 的创始人兼项目协调员。

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.