掌握C#循环:for、while、break与continue详解及游戏案例

Langchain系列文章目录

01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南
02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖
03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南
04-玩转 LangChain:从文档加载到高效问答系统构建的全程实战
05-玩转 LangChain:深度评估问答系统的三种高效方法(示例生成、手动评估与LLM辅助评估)
06-从 0 到 1 掌握 LangChain Agents:自定义工具 + LLM 打造智能工作流!
07-【深度解析】从GPT-1到GPT-4:ChatGPT背后的核心原理全揭秘

PyTorch系列文章目录

Python系列文章目录

C#系列文章目录

01-C#与游戏开发的初次见面:从零开始的Unity之旅
02-C#入门:从变量与数据类型开始你的游戏开发之旅
03-C#运算符与表达式:从入门到游戏伤害计算实践
04-从零开始学C#:用if-else和switch打造智能游戏逻辑
05-掌握C#循环:for、while、break与continue详解及游戏案例


前言

在编程中,重复执行任务是常有的事。比如在游戏开发中,我们可能需要生成多个敌人、处理玩家输入,或者让角色持续移动。这些重复性工作如果手动编写代码,不仅效率低下,还容易出错。这时,控制流中的循环就派上了用场。通过循环,我们可以让程序自动完成重复任务,既省时又省力。

本文将带你从零开始,深入掌握C#中的循环结构,包括for循环while循环,以及如何使用breakcontinue控制循环流程。无论你是初学者还是有一定经验的开发者,都能在这里找到适合自己的内容。我们还会通过一个实际的游戏案例——生成10个敌人,让你看到循环在游戏开发中的强大应用。准备好了吗?让我们开始吧!


一、循环基础:重复任务的利器

循环是编程中用来重复执行代码的核心工具。通过它,我们可以轻松处理大量重复性任务,而无需手动复制粘贴代码。

1.1 什么是循环

循环是一种控制流结构,允许一段代码在特定条件下重复运行。比如,想象你在玩一款射击游戏,每次开火都需要生成一颗子弹。如果没有循环,你需要为每颗子弹写一行代码;有了循环,只需几行就能搞定。

1.1.1 循环的核心思想

循环的核心在于条件重复执行。只要条件满足,代码就会一直运行,直到条件不再成立。例如,生成10个敌人时,循环会检查是否已达到10个,如果没有,就继续生成。

1.1.2 生活中的循环例子

生活中也有很多循环的例子,比如每天刷牙、吃饭,或者流水线上的工人重复组装零件。编程中的循环正是将这些重复任务交给计算机自动完成。

1.2 C#中的循环类型

C#提供了多种循环结构,常见的有for循环while循环do-while循环。本文将重点讲解前两者,因为它们在游戏开发中最为常用。

1.2.1 for循环:已知次数的重复

当你明确知道需要重复多少次时,for循环是最佳选择。比如,生成10个敌人。

1.2.2 while循环:条件驱动的重复

当重复次数不确定,但依赖某个条件时,while循环更合适。比如,等待玩家按下某个键。


二、for循环:精确掌控重复次数

for循环是编程中最常用的循环之一,尤其适合已知重复次数的场景。让我们详细了解它的用法。

2.1 for循环的语法

for循环的基本结构如下:

for (int i = 0; i < 10; i++)
{
    // 循环体:需要重复执行的代码
}
  • 初始化(int i = 0):设置循环的起点,通常是一个计数器变量。
  • 条件(i < 10):每次循环开始前检查,如果为真则继续,否则退出。
  • 迭代器(i++):每次循环结束后执行,通常用来更新计数器。

2.1.1 语法分解

  • i:循环变量,记录当前循环到了第几次。
  • i < 10:条件,限制循环执行10次。
  • i++:每次循环后i加1,确保最终退出循环。

2.1.2 常见问题:无限循环

如果忘记更新迭代器(比如漏写i++),循环条件永远为真,会导致无限循环。排查时,检查条件和迭代器是否正确。

2.2 for循环的应用场景

for循环适用于需要精确控制重复次数的情况,比如:

  • 打印1到10的数字。
  • 在游戏中生成固定数量的敌人。
  • 遍历数组中的元素。

2.2.1 示例:打印数字

for (int i = 1; i <= 10; i++)
{
    Console.WriteLine(i); // 输出:1, 2, 3, ..., 10
}

2.2.2 游戏中的应用

在Unity中,for循环常用于批量生成对象,比如敌人、子弹等。

2.3 代码实战:用for循环生成敌人

让我们看一个实际例子:在Unity中用for循环生成10个敌人。

using UnityEngine;

public class EnemySpawner : MonoBehaviour
{
    public GameObject enemyPrefab; // 敌人的预制体

    void Start()
    {
        for (int i = 0; i < 10; i++)
        {
            Vector3 position = new Vector3(i * 2, 0, 0); // 敌人位置,间隔2单位
            Instantiate(enemyPrefab, position, Quaternion.identity); // 生成敌人
        }
    }
}
  • 关键代码解析
    • i * 2:让敌人沿x轴排列,间隔2个单位。
    • Instantiate:Unity中用于实例化对象的函数。

运行这段代码,你会在场景中看到10个敌人整齐排列!


三、while循环:灵活应对未知次数

与for循环不同,while循环更适合重复次数不确定的情况。它完全依赖条件来决定是否继续。

3.1 while循环的语法

while循环的结构如下:

while (条件)
{
    // 循环体
}
  • 条件:每次循环前检查,如果为真则执行循环体,否则退出。

3.1.1 语法特点

while循环没有内置的初始化或迭代器,需要手动设置和更新变量。

3.1.2 常见问题:忘记更新条件

如果条件永远不会变为假(比如忘记更新变量),会导致无限循环。排查时,确保条件会随循环改变。

3.2 while循环的应用场景

while循环适用于依赖外部条件的情况,比如:

  • 等待玩家输入。
  • 敌人移动直到到达目标位置。
  • 游戏运行直到某个事件发生。

3.2.1 示例:等待输入

string input = "";
while (input != "exit")
{
    Console.WriteLine("请输入指令:");
    input = Console.ReadLine();
}

3.2.2 游戏中的应用

在Unity中,while循环可以用来控制动态行为,比如敌人持续移动。

3.3 代码实战:用while循环生成敌人

我们可以用while循环改写上面的敌人生成代码:

using UnityEngine;

public class EnemySpawner : MonoBehaviour
{
    public GameObject enemyPrefab;

    void Start()
    {
        int count = 0;
        while (count < 10)
        {
            Vector3 position = new Vector3(count * 2, 0, 0);
            Instantiate(enemyPrefab, position, Quaternion.identity);
            count++; // 更新计数器
        }
    }
}
  • 关键代码解析
    • count++:手动更新计数器,确保循环最终结束。

虽然效果与for循环相同,但while循环更灵活,适合条件复杂的场景。


四、break与continue:掌控循环的“魔法”

循环虽好,但有时我们需要更精细的控制。这时,breakcontinue就派上用场了。

4.1 break语句:强制退出循环

break语句可以立即终止整个循环,常用于提前结束。

4.1.1 示例:提前退出

for (int i = 0; i < 10; i++)
{
    if (i == 5)
    {
        break; // 当i等于5时退出循环
    }
    Console.WriteLine(i); // 输出:0, 1, 2, 3, 4
}

4.1.2 游戏应用:限制敌人生成

假设我们只在特定条件下生成敌人:

for (int i = 0; i < 10; i++)
{
    if (SomeCondition()) // 假设某个条件成立
    {
        break;
    }
    Instantiate(enemyPrefab, new Vector3(i * 2, 0, 0), Quaternion.identity);
}

4.2 continue语句:跳过本次循环

continue语句会跳过当前循环的剩余代码,直接进入下一次循环。

4.2.1 示例:跳过偶数

for (int i = 0; i < 10; i++)
{
    if (i % 2 == 0)
    {
        continue; // 跳过偶数
    }
    Console.WriteLine(i); // 输出:1, 3, 5, 7, 9
}

4.2.2 游戏应用:跳过特定位置

在生成敌人时,跳过某些位置:

for (int i = 0; i < 10; i++)
{
    if (i == 5)
    {
        continue; // 跳过x=10的位置
    }
    Instantiate(enemyPrefab, new Vector3(i * 2, 0, 0), Quaternion.identity);
}

五、游戏案例:生成10个敌人

让我们通过一个完整的游戏案例,巩固所学知识。

5.1 案例背景

在Unity游戏中,我们需要生成10个敌人,排列在场景中。循环是实现这一需求的最佳工具。

5.2 使用for循环生成

完整代码如下:

using UnityEngine;

public class EnemySpawner : MonoBehaviour
{
    public GameObject enemyPrefab;

    void Start()
    {
        for (int i = 0; i < 10; i++)
        {
            Vector3 position = new Vector3(i * 2, 0, 0);
            Instantiate(enemyPrefab, position, Quaternion.identity);
        }
    }
}
  • 效果:10个敌人沿x轴排列,间隔2单位。

5.3 使用while循环生成

改用while循环:

using UnityEngine;

public class EnemySpawner : MonoBehaviour
{
    public GameObject enemyPrefab;

    void Start()
    {
        int count = 0;
        while (count < 10)
        {
            Vector3 position = new Vector3(count * 2, 0, 0);
            Instantiate(enemyPrefab, position, Quaternion.identity);
            count++;
        }
    }
}
  • 效果:与for循环相同,但逻辑更灵活。

5.4 添加break与continue

让我们增加一些控制逻辑:

using UnityEngine;

public class EnemySpawner : MonoBehaviour
{
    public GameObject enemyPrefab;

    void Start()
    {
        for (int i = 0; i < 10; i++)
        {
            if (i == 5)
            {
                continue; // 跳过x=10的位置
            }
            if (i == 8)
            {
                break; // 在第8个敌人后停止
            }
            Vector3 position = new Vector3(i * 2, 0, 0);
            Instantiate(enemyPrefab, position, Quaternion.identity);
        }
    }
}
  • 效果:生成0、2、4、6、12、14共7个敌人,跳过了x=10,且在x=16前停止。

六、总结

通过本文,我们系统学习了C#中的循环结构及其在游戏开发中的应用:

  • for循环:适合已知次数的重复任务,语法简洁。
  • while循环:适合条件驱动的场景,灵活性强。
  • break:强制退出循环,适用于提前终止。
  • continue:跳过本次循环,适用于过滤特定情况。
  • 游戏案例:通过生成10个敌人,我们看到了循环的实际威力。

循环是编程的基础,尤其在游戏开发中,它能帮你高效处理重复任务。希望你能通过实践进一步掌握这些知识,写出更棒的代码!


控件正支持全部Office菜单,支持Office的打印预览,控件强大的B/S通讯技术, 能够将服务器数据库中的数据或者用户自定义的数据插入当前文档的指定位置,而且 还可以将文档中的指定数据随时保存到服务器数据库或者指定的目录中.控件能够在浏 览器窗口中直接编辑Word文档并保存到Web服务器上。实现文档和数据库的统一管理。 控件同时支持痕迹保留,手写签名,电子印章等办公自动化系统必备的功能。 控件采用标准HTTP协议,支持任意后台Web服务器,任意后台编程语言(Asp, Jsp, Php,VB.NET,C#.NET等) 控件功能: 1.控件采用xml数据格式传输,有良好的扩展性. 2.控件支持多种网络传输协议(Ftp,http). 3.控件支持标准的http协议80端口(自已可定义端口),可以有效地跨过防火墙对控件的影响. 4.控件支持多种存储方式,可以直接存放在指定的目录也可以存储在数据库中方便管理. 5.存储在数据库中或存储在目录中的文档数据是加密处理(需要密钥)大大加强文档的安全性. 6. 数据库支持功能 支持文件保存到服务器数据库中,可以支持多种数据库,如SQL Server,Oracle,Sybase,MySql,Access等。 7.控件支持数据模板拟稿时选择模版套红. 8.强制留痕受到密码保存,文档就算脱离控件也可以继续强制留留痕. 9.手写签名,可支持任意的手写板(可以鼠标画)签名或签意见. 10.可以准确检测有效的签名,还可以做到对有效签名进行特显,使得更形象展示有效的签名. 11.控件电子盖章功能实现印章或签名资源预保存功能,用户可以通过密码的方式来获得自己的签名或印章,印章和签名与 文档保存在一起,印章或签名可以功过系统的验证来判断真伪。 12.盖章数据是根据标准的加密方式.用户只有通过明钥和密钥的认证后才可以得到用户的盖章数据.大大加强了盖章的安全性. 13.控件的二次开发提供强大的函数库,支持多种系统环境,多种开发语言,多种数据库。 14.控件支持日志功能,文档的每一个修改操作都可以记录以供用户校对. 15.控件完全支持office菜单功能. 16.控件可以做到打印预览. 17、模版套红.控件支持数据模板拟稿或定搞时选择模版套红。 18.插入透明浮动图片.支持从服务器插入透明浮动图片到Word文档支持将服务器图片插入到Word文档的指定位置。 19.版本控制功能.版本控制功能,能够让您对WORD和EXCEL文档有更多的控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吴师兄大模型

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值