上节课我们学习了变量和条件判断,完成了第一部分的学习,今天,我们来学习c#中的循环

让游戏自动循环——循环 (for 和 while)

还记得上一章学习的战斗吗?打一下,程序就结束了。真正的游戏是连续攻击,直到一方倒下。这个“直到一方倒下,否则一直打”的重复过程,就是循环

简单来说就是不断重复一间事情,与此配合较多的就是条件判断,停止循环

首先是while

while 循环:只要……就一直做

while (条件) 
{
    // 只要条件为true,这里面的代码就会一遍又一遍地执行
}

举一个自动战斗直到一方死亡的例子

// 角色数据
int playerHp = 100;
int enemyHp = 60;
int playerAttack = 15;
int enemyAttack = 10;

Console.WriteLine("=== 自动战斗开始! ===\n");

// 只要玩家和敌人的血量都大于0,就继续战斗
while (playerHp > 0 && enemyHp > 0) 
{
    // --- 玩家攻击敌人 ---
    Console.WriteLine("玩家攻击敌人,造成" + playerAttack + "点伤害");
    enemyHp = enemyHp - playerAttack; // 敌人掉血
    Console.WriteLine("敌人剩余血量:" + enemyHp);

    // 检查敌人是否死了
    if (enemyHp <= 0) 
    {
        Console.WriteLine("\n敌人被击败了!");
        break; // 立刻跳出整个循环,战斗结束
    }

    // --- 敌人攻击玩家 ---
    Console.WriteLine("敌人攻击玩家,造成" + enemyAttack + "点伤害");
    playerHp = playerHp - enemyAttack;
    Console.WriteLine("玩家剩余血量:" + playerHp);

    // 检查玩家是否死了
    if (playerHp <= 0) 
    {
        Console.WriteLine("\n你被击败了...");
        break;
    }

    Console.WriteLine("-------------------"); // 每一轮的分隔线
}

Console.WriteLine("战斗结束!");

while (playerHp > 0 && enemyHp > 0)&& 是“并且”的意思。只要玩家敌人都活着,就执行大括号里的东西。

执行一遍大括号里的代码,称为一次循环一轮

这一轮打完后,程序会自动回到 while 那行,再次检查条件。如果都还活着,就再打一轮。如此反复。

break; 是紧急出口,立刻终止整个循环,破坏。

上一章认真学习的小伙伴在这里应该能看懂代码,全是我们学过的代码

接下来是for循环

for 循环:做固定次数的事

for (初始化; 条件; 每次循环后做的事) 
{
    // 循环体
}

我们来写一个模拟十连抽的代码

Console.WriteLine("\n=== 金币十连抽 ===");

Random rand = new Random(); // 随机数生成器,用来模拟概率

for (int i = 1; i <= 10; i++) // i从1开始;只要i<=10就循环;每轮结束后i加1
{
    Console.Write("第" + i + "抽:"); // Write不换行
    
    int result = rand.Next(1, 101); // 生成1到100之间的随机整数
    
    if (result <= 5) // 5%概率出SSR
    {
        Console.WriteLine("🌟🌟🌟 SSR!");
    }
    else if (result <= 20) // 15%概率出SR (5到20)
    {
        Console.WriteLine("⭐⭐ SR");
    }
    else // 其他80%概率是R
    {
        Console.WriteLine("⭐ R");
    }
}
Console.WriteLine("十连抽结束!");

(这里有可能无法识别星号,换成*即可)

简单吧,仅仅只用了24行代码就完成了最简单的十连抽。我们来分析一下

int i = 1:只在循环开始前执行一次,创建一个计数器 i,初始为1。

i <= 10:每次循环开始前都会检查这个条件。如果为 true,就执行循环体;如果为 false,循环结束。

i++:每次循环体执行完毕后,都会执行这一步。i++ 就是 i = i + 1 的简写,让计数器加1。

如果还不理解的话,我给你解释一下运行逻辑

  1. 初始化,i = 1。检查 1 <= 10,通过。执行循环体,打印“第1抽”。

  2. 跑完循环体后,执行 i++i 变成 2

  3. 检查 2 <= 10,通过。执行循环体,打印“第2抽”。

  4. ……重复……

  5. 当第10次抽完后,i++ 变成 11

  6. 检查 11 <= 10不通过!循环结束。

好了,我们已经学习完了循环,学会了怎么制作抽卡模拟,接下来我们来学习一下如何制作背包类内容,关于数组和集合

你现在有10个抽卡结果,但之前的写法只是打印出来,无法保存。我们需要一个能装下多个同类型数据的容器。

数组 (Array):固定大小的盒子
// 创建一个能装5个分数的整数数组
int[] scores = new int[5]; // new int[5] 意思是“在内存里开辟5个连续的int大小的空格子”

// 给格子赋值。数组的序号(索引)是从0开始的!
scores[0] = 90; // 第1个格子放90
scores[1] = 85; // 第2个格子放85
scores[2] = 99;
scores[3] = 70;
scores[4] = 88;

// 打印第3个分数(索引是2)
Console.WriteLine("第三个分数是:" + scores[2]); // 输出 99

// 也可以用更简单的方式创建并直接装填
string[] team = { "战士", "法师", "牧师", "盗贼" };
Console.WriteLine("队伍第三人是:" + team[2]); // 输出"牧师",因为索引0是战士
  • 索引从 0 开始数,不是1。scores[2] 是第三个格子。

  • 数组一旦创建,大小就不能改变

列表 (List<T>):可以伸缩的背包

它就像是游戏里的背包,可以随时获得新物品,也可以丢弃物品。这是游戏开发最常用的容器。

// 引入集合的命名空间,放在代码文件最上面
using System.Collections.Generic; 

// ... 在Main方法里 ...

// 创建一个空列表,只能装 string
List<string> inventory = new List<string>();

// 往背包里加东西
inventory.Add("铁剑");
inventory.Add("生命药水");
inventory.Add("魔法卷轴");

Console.WriteLine("背包里有 " + inventory.Count + " 件物品。"); // .Count 获取列表元素数量

// 用 for 循环遍历背包,打印所有物品
Console.WriteLine("物品清单:");
for (int i = 0; i < inventory.Count; i++) 
{
    Console.WriteLine("  第" + (i+1) + "格: " + inventory[i]); // 像数组一样用索引访问
}

// 冒险者使用了药水,从背包里移除
inventory.Remove("生命药水");
Console.WriteLine("\n使用了生命药水后,还剩 " + inventory.Count + " 件物品。");

  • Add(东西):往里加,背包自动变大。

  • Remove(东西):移除一个物品,背包自动变小。

  • 你不需要在创建时就知道它要装多少东西,非常灵活。

ok,今天的学习就到这里了,今天我们学习了循环,数组和列表,大家巩固复习一下,关注我,下一章内容更精彩

更多推荐