通过编写一个简单的游戏来练习 C++ 编程

C++ 语言很复杂,但它可以教会你很多关于数据类型、内存管理和代码链接的知识。
72 位读者喜欢这篇文章。
A bunch of question marks

Opensource.com

学习编程语言的方法有很多种。如果你是编程新手,你通常会学习一些基本的计算机编程概念,并尝试应用它们。如果你已经掌握了另一种编程语言,你会重新学习如何在新的语言中表达编程概念。

在任何一种情况下,学习这些新原则的便捷方法是创建一个简单的猜谜游戏。这迫使你理解一种语言如何接收输入和发送输出,如何比较数据,如何控制程序的流程,以及如何利用条件语句来影响结果。它还可以确保你了解一种语言如何构建其代码;例如,Lua 或 Bash 可以轻松地作为脚本运行,而 Java 则需要你创建一个类。

在本文中,我将演示如何在 C++ 中为终端实现一个猜谜游戏。

安装依赖项

要跟随本文进行操作,你需要 C++ 和一个编译器。

你可以通过从你的发行版的软件仓库安装 Qt Creator IDE,在 Linux 上获取你所需的一切。

在 Fedora、CentOS 或 RHEL 上

$ sudo dnf install qt-creator

在 Debian、Ubuntu、Chromebook 或类似系统上

$ sudo apt install qtcreator

本文不使用 Qt Creator IDE,但它是获取所需一切的一种简单方法,对于复杂的 C++ 项目(包括带有 GUI 的项目),它是一个必不可少的工具。在 macOS 或 Windows 上,请按照 Qt 网站上的安装说明进行操作。

设置包含和命名空间

C++ 的核心语言非常精简。即使是一个简单的应用程序也需要使用额外的库。此应用程序使用 iostream 来访问 coutcin 关键字。

此外,请确保程序使用 std 命名空间

#include <iostream>
#include <stdlib.h>  // srand

using namespace std;

这不是绝对必要的,但如果不将命名空间设置为 std,iostream 库中的所有关键字都需要命名空间前缀。例如,我必须写 std::cout,而不是写 cout

C++ 中的语句以分号结尾。

创建一个函数

每个 C++ 应用程序至少需要一个函数。C++ 应用程序的主函数必须名为 main,并且必须返回一个整数 (int),这符合 POSIX 的期望,即进程在成功时返回 0,失败时返回其他值。你可以通过提供其返回类型,然后提供其名称来创建一个新函数

int main() {
 // code goes here
}

实现程序逻辑

游戏代码必须首先生成一个随机数供玩家猜测。在 C++ 中,你可以通过为伪随机数生成建立一个种子来实现这一点。一个简单的种子是当前时间。一旦种子启动,你就可以通过调用 rand 函数并设置上限为 100 来检索一个介于 1 到 100 之间的数字。这将生成一个从 0 到 99 的随机数,因此将选定的数字加 1,并将结果分配给一个名为 number 的变量。你还必须声明一个变量来保存玩家的猜测。为了清晰起见,我将其命名为 guess

此示例代码还包含一个调试语句,它会告诉你随机数到底是什么。这对猜谜游戏来说不是很好,但它可以使测试速度更快。稍后,你可以删除该行,或者只是用 // 在其前面添加注释来注释掉它

 srand (time(NULL));
 int number = rand() % 100+1;
 int guess = 0;

 cout << number << endl; //debug

添加 do-while 和 if 语句

C++ 中的 do-while 语句以关键字 do 开头,并将你希望 C++ 执行的所有操作都括在大括号中。用关键字 while 结束语句,后跟必须满足的条件(在括号中)

do {
 // code here
} while ( number != guess );

游戏代码出现在 if 语句中,其中包含 else ifelse 语句,以向玩家提供提示。

首先,使用 cout 语句提示玩家进行猜测。cout 函数将输出打印到 stdout。由于 cout 语句没有附加 endl(换行)函数,因此不会发生换行。紧随此 cout 语句之后,告诉 C++ 使用 cin 函数等待输入。你可能会猜到,cin 等待来自 stdin 的输入。

接下来,程序进入 if 控制语句。如果玩家的猜测大于 number 变量中包含的伪随机数,则程序会打印出一个提示,后跟一个换行符。这会中断 if 语句,但 C++ 仍被困在 do-while 循环中,因为它的条件(number 变量等于 guess)尚未满足。

如果玩家的猜测小于 number 变量中包含的伪随机数,则程序会打印出一个提示,后跟一个换行符。这再次中断了 if 语句,但程序仍然被困在 do-while 循环中。

guess 等于 number 时,关键条件最终满足,else 语句被触发,do-while 循环结束,并且应用程序结束

do {
  cout << "Guess a number between 1 and 100: ";
  cin >> guess;

  if ( guess > number) { cout << "Too high.\n" << endl; }
  else if ( guess < number ) { cout << "Too low.\n" << endl; }
  else { 
    cout << "That's right!\n" << endl;
    exit(0);
  } // fi
 } while ( number != guess );
return 0;
} // main

构建代码并玩游戏

你可以使用 GCC 构建你的应用程序

$ g++ -o guess.bin guess.cpp

运行二进制文件来试用它

$ ./guess.bin
74
Guess a number between 1 and 100: 76
Too high.

Guess a number between 1 and 100: 1
Too low.

Guess a number between 1 and 100: 74
That's right!

成功!

尝试一下 C++

C++ 语言很复杂。为终端编写 C++ 应用程序可以教会你很多关于数据类型、内存管理和代码链接的知识。尝试用 C++ 编写一个有用的实用程序,看看你能发现什么!

接下来阅读什么
标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,而且经常同时进行。

评论已关闭。

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.