C语言探索之旅:第一个C语言小游戏-1.jpg (37.05 KB, 下载次数: 0)

2018-10-8 19:23 上传

内容简介

1、课程纲领

2、第一部分第八课:第一个C语言小游戏

3、第一部分第九课预告: 函数

课程纲领

我们的课程分为四大部分,每一个部分结束后城市有练习题,并会公布谜底。还会带巨匠用C语言编写三个游戏。

C语言编程基础知识

什么是编程?

工欲善其事,必先利其器

你的第一个程序

变量的世界

运算那点事

条件表达式

循环语句

拭魅战:第一个C语言小游戏

函数

练习题

习作:完善第一个C语言小游戏

C语言高级技术

模块化编程

进击的指针,C语言王牌

数组

字符串

预措置

建立你自己的变量类型

文件读写

动态分派

拭魅战:“悬挂小人”游戏

平安的文本输入

练习题

习作:用自己的语言解释指针

用基于C语言的SDL库开发2D游戏

安装SDL

建立窗口和画布

显示图像

事件措置

拭魅战:“超等玛丽推箱子”游戏

掌握时间的使用

用SDL_ttf编辑文字

用FMOD控制声音

拭魅战:可视化的声音谱线

练习题

数据结构

链表

堆,栈和队列

哈希表

练习题

第一部分第八课:第一个C语言小游戏

经过前七课的努力,我们终于来到了第一个比较正式的程序:一个C语言小游戏。虽然暂时还不介绍C语言的图形编程,这个游戏还是命令行的形式,可是非论怎样,这都是一个小小的里程碑。我们的目的是让巨匠看到经过之前几课的学习,你已经可以完成一些有意思的事了。虽然我们知事理论是很好的,可是如果我们不克不及把所学的理论付诸实践,那也很没有意思,我们不就白学了那么多理论。

信不信由你,你其实已经有水平实现自己的第一个有意思的程序了。

准备工作和建议

程序的原理

在脱手编程之前,得先跟巨匠说一下这个程序是干什么的。

我们可以称号这个游戏为《或多或少》。

游戏的原理是这样:

每一轮电脑从1到100中随机抽一个整数

电脑请求你猜这个数字,因此你要输入一个1到100之间的整数

电脑将你输入的数和它抽取的数进行比较,并告知你的数比它的数大了还是小了

然后它会再次让你输入数字,并告诉你比较的结果

一直到你猜到这个数为止,一轮结束

游戏的目的,固然就是用最少的次数猜到这个“神秘”数字。虽然没有绚丽的图形界面,可是或多或少,这都是你的第一个游戏了,应该值得骄傲。

下面演示了一轮的样式,你要编程来实现它:

这个数字是什么?50

猜小了!

这个数字是什么?75

猜小了!

这个数字是什么?85

猜大了!

这个数字是什么?80

猜大了!

这个数字是什么?78

猜小了!

这个数字是什么?79

太棒了,你猜到了这个神秘数字!!

随机抽取一个数

但巨匠要问了:怎么来随机地抽取一个数呢?不知道怎么办啊,臣妾做不到啊。

诚然,我们还没学习如何来产生一个随机数。让亲爱的电脑兄来做这个是不简单的:它很会做运算,可是要它随机选择一个数,它还不知道怎么做呢。

事实上,为了“测验考试”获得一个随机数,我们不克不及不让电脑来做一些复杂的运算,好吧,归根结底还是做运算。

我们有两个解决方案:

请用户通过scanf函数输入这个神秘数字,那么就需要两个玩家咯。一个选数字,一个猜数字。

孤注一掷地让电脑来为我们自动产生一个随机数。好处是:只需要一个玩家,可以自娱自乐。缺点是:需要学习该怎么做...

我们来学习用第二种方案编写这个游戏,固然你也可以之后自己编写第一种方案的代码。

为了生成一个随机数,我们要用到rand()函数(rand是英语“random:随机” 的缩写)。顾名思义,这个函数能为我们生成随机数。可是我们还要这个随机数是在1到100的整数规模内(如果没有限定规模,那会很复杂)。

我们会用到以下的形式:

srand(time(NULL));

mysteryNumber=(rand()%(MAX-MIN+1))+MIN;

第一行(srand函数)用于初始化随机数的生成器。srand其实是seed random的缩写,seed在英语中是“种子”的意思。

给出 百度百科 的简单解释:

【srand和rand配合使用产生伪随机数序列。rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数。如果系统提供的种子没有转变,每次挪用rand函数生成的伪随机数序列都是一样的。srand(unsigned seed)通过参数seed改变系统提供的种子值,从而可以使得每次挪用rand函数生成的伪随机数序列不合,从而实现真正意义上的“随机”。通常可以利用系统时间来改变系统的种子值,即srand(time(NULL)),可以为rand函数提供不合的种子值,进而产生不合的随机数序列】

【所谓的“伪随机数”指的其实不是假的随机数,这里的“伪”是有规律的意思。其实绝对的随机数只是一种理想状态的随机数,计算机只能生成相对的随机数即伪随机数。计算机生成的伪随机数既是随机的又是有规律的 —— 一部分遵守一定的规律,一部分则不遵守任何规律。好比“世上没有两片形状完全相同的树叶”,这正点到了事物的特性 —— 规律性;可是每种树的叶子都有近似的形状,这正是事物的共性 —— 规律性。从这个角度讲,我们就可以接受这样的事实了:计算机只能产生伪随机数而不是绝对的随机数。】

【通过time()函数来获得计算机系统当前的日历时间(Calendar Time),措置日期时间的函数都是以本函数的返回值为基础进行运算。其原型为:time_t time(time_t * t); 如果你已经声明了参数t,你可以从参数t返回现在的日历时间,同时也可以通过返回值返回现在的日历时间,即从一个时间点(例如:1970年1月1日0时0分0秒)到现在此时的秒数。如果参数为空(NULL),函数将只通过返回值返回现在的日历时间。】

如果我们在使用rand函数前没有用srand函数制定seed的值,或者虽然用了srand函数,可是给它的参数是一个常量,好比srand(1),那么每次程序运行rand产生的数字都是一样的。只有用例如time()函数来给一个每次都不一样的seed值,才能使得rand的返回值不一样,才能做到“随机”。

srand函数只需要在rand函数前面挪用一次就够了,也只能挪用一次,之后你想要挪用rand函数几次都无所谓,可是每个程序中不克不及用两次srand函数,切记。

上面代码格式中的MAX和MIN是常量,MAX是英语的“最大”Maximum的缩写,MIN是“最小”Minimum的缩写。顾名思义,MAX和MIN别离是你规定的规模的最大值和最小值。

建议在程序的一开始界说这两个常量:

const int MAX = 100, MIN = 1;

引入的库

为了程序能够顺利运行,我们需要引入三个库:

stdio.h

stdlib.h

time.h

我们以前的课说过库的作用,库里面提供一些界说好的函数,好比time.h里面就有我们的time()函数,stdlib中有rand和srand函数。

好啦,我不继续透露了。我们已经说明了游戏的原理,也给出了一轮游戏的运行例子,也给出了主要的随机数生成代码,该轮到你来完成游戏的代码了。加油。

我的代码

希望巨匠自己先写代码,查阅一些资料,或温习前面几课的内容。运行成功了或实在写不出来才来看谜底。

以下给出我的版本,固然了,这个游戏的代码可以有不合的版本。你完全可以自己阐扬。

#include

#include

#include

int main (int argc, char** argv)

{

int mysteryNumber = 0, guessNumber = 0;

const int MAX = 100, MIN = 1;

// 生成随机数

srand(time(NULL));

mysteryNumber = (rand() % (MAX - MIN + 1)) + MIN;

/* 程序的循环部分, 如果用户没料中数字,就一直进行循环 */

do

{

// 请求用户输入所猜数字

printf("这个数字是什么 ? ");

scanf("%d", &guessNumber);

// 比较用户输入的数字和神秘数字

if (mysteryNumber >guessNumber)

printf("猜小了 !\n\n");

else if (mysteryNumber

printf("猜大了 !\n\n");

else

printf ("太棒了,你猜到了这个神秘数字 !!\n\n");

} while (guessNumber!= mysteryNumber);

return 0;

}

程序的解释(从上到下的顺序):

预措置指令:就是开头的那三行,以#开始,include是英语“包含,引入”的意思。所以暗示引入什么库。之前我已经给巨匠这部分的代码了,所以如果你的程序运行起来出错是在这部分的话,那你也是够够的了 :P

变量:这个游戏中,不需要太多变量,只有一个用于记录用户输入的数字的变量guessNumber,和一个电脑随机抽取的数字mysteryNumber。同时也界说了两个常量(const变量,其实叫只读变量比较准确)MAX和MIN,值别离是100和1。这样界说的好处是,如果你后面要改这两个数值,会很便利,直接改这一行的两个值就好了。如果没有用MAX和MIN而是在程序里每一个处所写100和1的话,那如果以后要改数值,工作量就大了。

随机数:srand和rand那两行,产生在1和100之间的一个随机数,值赋给mysteryNumber。

循环:我选择了用do...while循环。理论上一个while循环也可以做到,但我觉得这里用do...while可能更合逻辑。为什么呢?还记得do...while循环的特点吗?就是循环体里的指令至少会执行一次,不像while循环可能一次也不执行。这里我们至少要让用户输入一次数字,不成能用户一次也不输入就猜到了数字。

在每一次进入循环体里运行时,我们都请求用户输入一个数字,并且把这个数字的值赋给guessNumber变量,接下来就比较guessNumber和mysteryNumber(需要猜的数字)的巨细:

mysteryNumber大于guessNumber,那么输出“猜小了”,继续循环

mysteryNumber小于guessNumber,那么输出“猜大了”,继续循环

mysteryNumber等于guessNumber,也就是else语句的情况,即是说我们猜对了,输出“太棒了,你猜到了这个神秘数字!”,结束循环

循环也需要一个条件,我们给出的条件是:只要猜的数字和神秘数字不一样,循环就继续。

现在这个游戏还是很基础很简单的,可是可以有以下的改进方案:

增加一个记录步数的计数器,在你猜对的时候输出:“太棒了,你用**步猜到了这个神秘数字!”

目前的程序只进行一轮就结束了,如果玩家不过瘾,还想继续下一轮怎么办呢?可以加入一个问题:“你还想继续玩吗?”,期待用户输入数字来回答。界说一个布尔值continue来存储用户输入的回答,好比continue的默认值是1,就是用户默认是继续玩下一轮的,但如果用户输入0,那么程序停止,游戏结束

增加一个模式:两人模式。可以你出题我来猜。可是我希望你能够在程序一开始就让用户选择是玩哪一种模式,是经典的人机对战,还是人人对战。如果是两人模式的人人对战,那么就不是用srand和rand来产生神秘数字了,而是让玩家一通过scanf来输入这个数字

设置几个难度级别,让玩家选择:初级(1-100中的一个数),中级(1-1000中的一个数),高级(1-10000中的一个数)。如果你这样设计,就需要改写MAX值了,而此时MAX就不克不及再是一个const变量了,必须要把MAX前面的const去失落,MIN的还能保存。

你也可以自己增设难度,想出更多好玩的点子来丰富这个游戏。通过完善和改进这个小游戏,你会学到更多。

第一部分第九课预告:函数

今天的课就到这里,一起加油咯。

下一次我们学习第九课,来认识函数这个极为重要和有用的内容吧!

C语言探索之旅:第一个C语言小游戏-2.jpg (57.68 KB, 下载次数: 0)

2018-10-8 19:23 上传

新朋友请关注「程序员联盟」微信搜公众号 ProgrammerLeague

小编的微信号: frogoscar

小编的邮箱: enmingx@gmail.com

更多内容回复查看:

游客,如果您要查看本帖隐藏内容请回复

c语言小游戏vc,C语言探索之旅:第一个C语言小游戏相关推荐

  1. C语言在main中输入2个整数ab,请教一个C语言问题。若输入3个整数3,2,1,则以下程序输出的结果是.,c 语言问题 输入三个整数 按从小到大输出...

    导航:网站首页 > 请教一个C语言问题.若输入3个整数3,2,1,则以下程序输出的结果是.,c 语言问题 输入三个整数 按从小到大输出 请教一个C语言问题.若输入3个整数3,2,1,则以下程序输 ...

  2. Unity 2D游戏开发快速入门第1章创建一个简单的2D游戏

    Unity 2D游戏开发快速入门第1章创建一个简单的2D游戏 即使是现在,很多初学游戏开发的同学,在谈到Unity的时候,依然会认为Unity只能用于制作3D游戏的.实际上,Unity在2013年发布 ...

  3. 《零基础看得懂的C语言入门教程 》——(三)轻轻松松理解第一个C语言程序

    一.学习目标 了解C语言代码的一般结构 了解函数的概念 了解printf函数的使用方法 了解头文件的概念 了解system函数的使用方法 目录 C语言真的很难吗?那是你没看这张图,化整为零轻松学习C语 ...

  4. 游戏AI探索之旅:从AlphaGo到MOBA游戏

    背景:7月28日,腾讯云在北京举办云+社区沙龙,邀请来自腾讯与四川云检科技的五位AI技术专家,分享他们在专业领域的AI开发经验,帮助开发者在具体行业场景中实践AI技术.本文根据王亮在[7.28日腾讯云 ...

  5. 手机游戏AI探索之旅:从AlphaGo到MOBA游戏

    讲师介绍 王亮,腾讯AI高级研究员.2013年加入腾讯,从事大数据预测以及游戏AI研发工作.目前主要从事MOBA类游戏AI相关的研发工作. 本次分享大纲 今天分享的课题是游戏AI探索之旅.本次分享分为 ...

  6. 【Python游戏】Python基于第三方库pygame实现一个魂斗罗小游戏,毕业设计必备 | 附源码

    前言 halo,包子们下午好 今天给打击整一个魂斗罗小游戏 很多小伙伴接触魂斗罗应该是在小时候的一个手柄游戏上面吧 我记得作为90后的我,玩这一款游戏是在小学的时候 废话不多说,直接上才艺 今天给大家 ...

  7. python编写赛车游戏单机版_使用Python中OrderedDict模拟一个简单的竞速游戏排名

    上一篇,我们梳理了Python中关于字典排序的一些常用方法(杂乱无章的数据结构如何进行排序,简明讲述Python字典排序那些事).其中,我们讲到了Python的collections模块中的Order ...

  8. html小工具在线翻译,调用百度API写了一个js翻译小工具

    目前还未完成的功能有:textarea高度自适应,移动端与pc端都写了. 效果如图: html: js翻译工具 textarea:disabled{ background-color: #fff; } ...

  9. c语言控制台数字键打地鼠,自己用C写的一个简单的打地鼠游戏代码出了个问题(鼠标和循环不能...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 b=0; /*保证上面不出界*/ if(a>getmaxx()-R) a=getmaxx()-R; /*保证右边不出界*/ if(b>getm ...

  10. c语言 spawn函数,我在electron程序中spawn了一个C语言程序作为子进程,我该如何与这个子进程通信?...

    C语言的代码为: #include int main(){ int i = 0; scanf`("%d", &i);` printf`("%d\n",  ...

最新文章

  1. Struts2返回json
  2. HDU1599(最小环)
  3. CentOS6.5更改ssh端口问题
  4. ITK:Mersenne Twister随机数生成器
  5. 十道解分式方程及答案_100道八年级分式方程及答案.
  6. 关于discuz 不能全文搜索的问题
  7. GOF之结构型模式Ⅱ(重点)
  8. 【深入理解Java虚拟机学习笔记】第三章 垃圾收集器与内存分配策略
  9. 真正的程序员(转贴)
  10. Webrtc中stun和turn的理解
  11. java判断string字符串是不是json格式
  12. 独立站客服如何友好推送折扣券
  13. [渝粤教育] 天津科技大学 化工原理A 参考 资料
  14. 【网络安全】企业内网中的横向移动
  15. 超详细的抖音养号上热门技巧,看完这一篇就够了
  16. excel换行按什么键_excel中关于自动换行和强制换行那些事儿
  17. python PDF文件拆分与合并
  18. 利用JavaScript在canvas中画一棵树
  19. android调色器的实现
  20. NAB展会BOSMA博冠8K全系8K摄像机产品惊艳亮相

热门文章

  1. Day6:比尔·盖茨 2018 年书单分享
  2. vue 基础入门:vue 的调试工具
  3. 无心剑中译哈罗德·布罗克曼《经验论与客观论,孰是孰非?》
  4. 2020南京邮电大学Mooc—在线期末考试客观卷
  5. 最炫学习风8月24号在成都传智播客刮起
  6. 信息与网络安全(五)——网络安全协议与AES算法
  7. Jenkins定时构建项目
  8. 月薪5万,全靠这款高质量Web前端开发框架!
  9. 【JavaEE】认识Tomcat
  10. Springboot毕业设计毕设作品,人脸识别公司考勤系统 开题报告