c语言for循环语句用法 continue只结束本次循环对吗

ainer">重要的事情说三遍对于人类自身而言,长时间重复性的做同样一件事情,很容易疲劳并出错 。但对于计算机而言,这却是它们的特长 。我们已经学习过使用printf()函数向屏幕输出文本,假定现在要完成“重要的事情说三遍”这一壮举,我们可以这么做 。

c语言for循环语句用法 continue只结束本次循环对吗

文章插图
然而,如果重要的事情要说三百遍呢?显然我们需要有更有效的方式去完成这件事,因此有了循环语句 。
循环语句具有一个条件测试部分与循环体部分 。
循环体部分由一条或多条语句构成,当测试通过时执行循环体,否则结束循环 。循环体语句还拥有一个控制部分,用于促使测试条件到达不成立状态 , 以达到退出循环的目的 。
while语句while语句的语法如下:
c语言for循环语句用法 continue只结束本次循环对吗

文章插图
while语句中,条件表达式测试在循环执行之前进行,所以如果测试一开始为假 , 循环体就根本不会执行 。下面的程序输出数字序列1-10,循环结束后i的值为11 。
c语言for循环语句用法 continue只结束本次循环对吗

文章插图
for语句for语句是while语句的一种简写,因此更为常用,语法如下所示:
c语言for循环语句用法 continue只结束本次循环对吗

文章插图
表达式1为初始化部分,它只在循环开始时执行一次 。表达式2为条件部分 , 它在循环体每次执行前都要执行一次 。表达式3为控制部分,它在循环体每次执行完毕 , 在条件部分即将执行之前执行 。
下面这个程序与上面的程序有同样的输出,但也有不同的一点 。现代C语言中,允许在for语句初始化部分定义变量,如这里的i,这个变量的作用域是整个for循环 , 当for语句整体结束后,这个i便是无效的符号了 。
c语言for循环语句用法 continue只结束本次循环对吗

文章插图
break/continue【c语言for循环语句用法 continue只结束本次循环对吗】在循环语句中使用break语句,可以永久终止循环 。在执行完break语句之后,程序将会跳转到循环正常结束后应该执行的那条语句处 。continue语句仅用于终止本次循环 。
下面的示例中 , for循环在输出数值1/2/3/4后便终止了循环体的运行 , 而while循环则是除了5之外的数值都被输出 。你可以将这个while语句改为for语句,就会发现使用for语句更简明 。
另外需要注意是,在while中,当continue执行后,程序会跳转到循环的条件判断部分 , 而在for中 , 则会执行递增部分 。因此while语句中在continue之前,需要改写循环条件变量,保证程序不会出现无限循环 。
c语言for循环语句用法 continue只结束本次循环对吗

文章插图

c语言for循环语句用法 continue只结束本次循环对吗

文章插图
无限循环for语句中的3个三表达式都是可选的 , 这表示它们可以省略掉 。如果省略掉条件部分(即表达式2),表示测试的值始终为真,这时程序将进入无限循环状态(也称为死循环) 。这相当于while语句的表达式部分给定真值一样 。
c语言for循环语句用法 continue只结束本次循环对吗

文章插图
如果运行了上面的程序,它将会不停的输出语句,这时可以通过任务管理器强行结束 。显然无限循环并不是我们设计的目的,然而这样的设计结构确是在实际开发中存在的 。比如说游戏引擎,运行于一个无限循环中:捉捕用户输入、渲染场景、输出画面等 。当然,无限循环之所以存在,主要得益于break的存在:永久退出循环 。
c语言for循环语句用法 continue只结束本次循环对吗

文章插图
使用循环铺砖在2D游戏地形实现中,通常是将地图切分许多称之为Tile的小块,然后根据地表信息使用对应的贴图对其进行装饰,比如哪里放置地面,哪里放置水域,又或者建筑等 。对于现阶段的练习,出于简易性,我们将仅使用一张“地面碎石泥土”图片(Ground.png)来对地形进行填充 。使用图片浏览器查看Group.png,可以知道它的大小是64×64,这代表地形中一个Tile的大小 。
c语言for循环语句用法 continue只结束本次循环对吗

文章插图
为了便于理解,我们先看一下最终效果图 。需要注意的是,网格线与数字标号是后期加上去的 。
c语言for循环语句用法 continue只结束本次循环对吗

文章插图
地图水平方向我们使用10张贴图进行重复,宽度为:64×10=640(像素) 垂直方向没有完整标出,它是使用8张贴图完成,高度为:64×8=512(像素)
据此,我们创建的窗口大小为640×512 。窗口的大小也就是地图的大?。饬礁鲋迪衷诒槐4嬖趙idth/height变量中 。
int width = 640; // 窗口宽度int height = 512; // 窗口高度首先 , 我们计算地图可容纳Tile的行列数 。
int cols = width / 64; // 地图宽度可容纳的列数int rows = height / 64; // 地图高度可容纳的行数在当前地图范围下,cols=10,rows=8,这表明地图被分割为80个Tile,也暗示我们需要将ground.png贴花80次 , 才能铺满整个地面 。按照本节的理念 , 重复的事情用循环,这里我们选择for语句 。
for ( int i = 0; i < cols * rows; i++ )接下来看绘图部分,glmxDrawImage函数需要一个确切的x/y坐标,因此我们需要根据当前被绘制Tile索引计算出正确的坐标来 。由于已经知道了地图宽度可容器的列数cols,计算当前Tile索引对应的行列值就很简单了 。
int row = i / cols; // 当前tile所在的行int col = i % cols; // 当前tile所在的列每一行可以放置cols个Tile,因此i/cols就得到了当前Tile所在的行索引 。i%cols则可以计算出了正确的列索引,有了这两个数据后,根据图片大?。?就可以计算出当前Tile的坐标了 。
int x = col * 64;int y = row * 64;至此 , 整个地面绘制流程如下 。
c语言for循环语句用法 continue只结束本次循环对吗

文章插图
更新飞机单独一个地面也显得有些过于无趣,在上一个例子中,我们已经加入了可飞行的飞机,只是它的方向有那么点不正确,这次我们一并修正一下 。首先我们加入一个bool变量,表明飞机是否需要“调头” 。
bool flip = false; // 飞机是否需要转向我们的飞机默认行为是从屏幕右边飞向左边,这与图示中的方向一致 , 因此这个变量初始化为false,表明不需要转向 。接下来 , 我们更新边界判断语句 , 当飞机到达左边时 , 让其转向 。
c语言for循环语句用法 continue只结束本次循环对吗

文章插图
不要以为这样就完事了,这里只是设置了转向变量而已 。观察图像可以看到 , 真正的转向只需要把飞机水平反转一下就有“调头”的效果了,这是使用glmxDrawImageEx()函数实现的 。
glmxDrawImageEx( pic2, xpos, 80, 38, 34, GLMX_FLIP_HORIZONTAL);前三个参数与glmxDrawImage()函数一致,38,34是指飞机图像的宽度与宽度,最后一个是绘制标志值 , 它是一个枚举类型,暂时可以认同这个类型与int一致,只是预定义了一组值供你使用罢了 。这里的传递的是GLMXFLIPHORIZONTAL , 如其名:水平翻转 。
为了让我们有更好的理解,在源代码中,飞机正常飞行时 , 我们仍旧使glmxDrawImage函数,如果你理解了程序,可以统一使用glmxDrawImageEx函数改写,以消除这种使用不一致性,让程序代码更漂亮 。
最后,看看飞机飞行的效果图 。
c语言for循环语句用法 continue只结束本次循环对吗

文章插图


    以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

    「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: