撰写了文章 更新于 2020-01-10 20:29:56
从C#开始的编程入门——猜数字
至此,我们学习了变量、if分支结构、循环等等。看起来似乎没多少东西,但是利用这些东西,我们已经可以做一个像模像样的小程序。那就是经典的猜数小游戏。
规则
有一个秘密的数,玩家输入自己猜的数,如果大了就输出大了,小了就输出小了。设置一个可以猜的次数,达到次数没猜出来就输了。
很多讲编程语言的书籍、文章等等,都爱讲这样一个猜数游戏。我认为这是很好的一个练习,因为它把编程中非常基础但很重要的东西都结合在了一起,可能这也是大家写教程都爱写这个原因之一。所以我们就开始实现这样一个小游戏吧。
准备
这将是一个独立且完整的小游戏,我们最好不再把它和HelloWorld挤在一起了。我们创建一个单独的项目,最后你甚至可以把它分享给你的朋友。
回忆之前的介绍,我们使用dotnet new命令创建新项目。找到一个合适的文件夹,然后在终端输入以下命令:
dotnet new console -n GuessTheNumber
然后进入到目录中开始我们的工作。
输入与输出
用于输出内容的方法我们已经讲到了,WriteLine方法。这里我们再介绍用于输入的方法:ReadLine。
ReadLine仍然是Console类中的函数,它用于读取一行内容,当我们输入内容,最终输入一个回车(也就是换行)后,程序会把回车之前的内容返回。我们把结果保存到变量中就可以使用了。这个函数返回的是string类型的值,所以我们也就可以直接使用一个string类型的变量去接受。
随后在这里隆重介绍插值字符串。插值字符串也是字符串,不过它的开头有个美元符号。这有什么用呢?
会输出"HI, I'm Siri"
插值字符串中可以在字符串中的花括号中直接插入表达式,最终输出的字符串会把表达式的值直接插入字符串,是不是很方便。
接受输入
我们先输出一句话提示用户输入。随后定义用户猜测的数。
然后保存用户的输入,就像这样。
把字符串转换为数字
问题来了。
这样显然是不行的,我们不能把一个字符串给一个表示数字的变量,并且也不能和数字直接比较。由于C#的强类型特性,编译器也不会自己尝试把字符串转换为数字。
这个时候我们需要手动把字符串转换为数字。实际上,表示数字的类型也有它们各自的方法,这里我们介绍我们需要的一个方法:Parse。
Parse会尝试把字符串转换为等价的数字。如果字符串的内容并不能被转换为一个数字,则会发生错误。你可以尝试把一个内容不是数字的字符串丢进Parse方法中。
当然这个方法是不那么安全的,因为有可能我们输入的根本不是一个数字,但至少在目前我们假定我们的玩家都是乖孩子。
判断大小
接收到用户的猜测之后,我们和数字进行比较,然后输出提示。这里我们先自己定义一个数字保存我们的神必数字。
请尝试自己写出后续的判断逻辑。而猜的数刚好是神必数字时,我们输出内容告诉玩家获胜了。
循环
嗯,基本的流程我们做到了,但是现在只能猜一次,这太无聊了。
我们修改判断逻辑,使用循环让用户可以重复猜。并在猜对时跳出循环,输出玩家赢了。
我们计划可以让玩家猜三次,然后作为终止循环的条件。记得在循环结尾把chance减一。
很显然,既然我们需要一个变量控制循环次数,那么这个循环可以改用for循环,尝试使用for循环试一下?
随机
怎么样?是不是很简单?依靠所学的知识我们完成了这样一个简单但是让我们学以致用的小游戏。
我们可以让它更好,这里介绍另一个函数让我们的游戏更有意思,我们使用这个函数生成一个随机数,这样每次启动游戏的时候只有程序知道这个数是多少。
Random是一个类,它用来生成随机数,Next方法可以生成指定范围内的随机数,上面的代码表示生成1到100的随机数。这里暂时只需记住其用法即可。
这篇文章虽然不长,但是我们实际运用了前所学的各种知识,怎么样,是不是喜欢上编程了???
尝试根据自己的喜好修改自己的程序,完成后可以直接把位于项目目录/bin/Debug/netcoreapp3.0中的exe或者可执行文件直接分发给(已经安装了.NET Core)运行时的朋友。
完整的程序我已经上传至了一个GitHub仓库,教程中后续的小东西我预计也会上传到这个仓库中。如果有问题可以参照上面的代码。在这里。
下一篇文章,我们介绍数组,一种把多个数据放在一起的类型。