首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

从零开始学C#:用if-else和switch打造智能游戏逻辑

  • 25-04-25 01:01
  • 4476
  • 7495
blog.csdn.net

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打造智能游戏逻辑


文章目录

  • Langchain系列文章目录
  • PyTorch系列文章目录
  • Python系列文章目录
  • C#系列文章目录
  • 前言
  • 一、条件语句基础:让程序学会选择
    • 1.1 什么是条件语句
      • 1.1.1 条件语句的核心作用
    • 1.2 为什么游戏开发需要条件语句
  • 二、if-else语句:灵活的条件判断
    • 2.1 if-else的基本语法
      • 2.1.1 简单示例:判断生命值
    • 2.2 多条件判断:else if
      • 2.2.1 执行流程解析
    • 2.3 嵌套if-else:复杂逻辑的实现
      • 2.3.1 注意事项
  • 三、switch语句:多选项的优雅选择
    • 3.1 switch的基本语法
      • 3.1.1 示例:处理玩家选择
    • 3.2 switch与if-else的对比
      • 3.2.1 选择建议
  • 四、游戏实战:判断玩家是否死亡
    • 4.1 场景设计
    • 4.2 使用if-else实现
      • 4.2.1 关键代码解析
    • 4.3 使用switch扩展:不同死亡原因
      • 4.3.1 流程图展示
  • 五、常见问题与解决方案
    • 5.1 switch中忘记break
    • 5.2 条件表达式错误
    • 5.3 嵌套过深难以维护
  • 六、总结

前言

在编程的世界中,控制流就像程序的大脑,决定了代码如何根据不同情况做出决策。作为C#基础入门的第4天内容,今天我们将聚焦条件语句,探索如何通过if-else和switch语句让程序学会“选择”。无论你是刚刚接触C#的初学者,还是希望在游戏开发中提升技能的开发者,本文都将为你提供清晰的知识框架、实用的代码示例以及游戏开发中的实战应用。让我们一起走进C#条件语句的世界,解锁程序的智能决策能力!


一、条件语句基础:让程序学会选择

1.1 什么是条件语句

条件语句是C#中用来控制程序执行路径的核心工具。简单来说,它允许程序根据特定条件(比如玩家的生命值是否为0)决定执行哪段代码。在C#中,最常用的条件语句有两种:if-else和switch。它们就像游戏中的“岔路口”,帮助程序在不同情况下选择不同的行动。

1.1.1 条件语句的核心作用

想象你在玩一个游戏,玩家按下“攻击”键时需要扣除敌人血量,而按下“逃跑”键时需要移动角色位置。这种根据玩家输入执行不同操作的逻辑,正是条件语句的用武之地。它让程序不再是“一根筋”地执行,而是能灵活应对各种情况。

1.2 为什么游戏开发需要条件语句

在游戏开发中,条件语句无处不在。例如:

  • 判断玩家是否死亡(生命值≤0)
  • 根据得分显示不同等级(优秀、良好、及格)
  • 处理玩家的选择(攻击、防御、逃跑)

这些场景都需要程序根据当前状态做出决策,而条件语句正是实现这些功能的基础。


二、if-else语句:灵活的条件判断

2.1 if-else的基本语法

if-else语句是C#中最简单直观的条件语句。它的基本结构如下:

if (条件)
{
    // 条件为true时执行的代码
}
else
{
    // 条件为false时执行的代码
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 条件:一个返回true或false的表达式,例如health <= 0。
  • 代码块:用大括号{}包裹的具体操作。

2.1.1 简单示例:判断生命值

假设我们开发一个游戏,需要检查玩家的生命值是否耗尽:

int health = 0;

if (health <= 0)
{
    Console.WriteLine("玩家死亡,游戏结束!");
}
else
{
    Console.WriteLine("玩家存活,继续战斗!");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

运行结果:当health为0时,输出“玩家死亡,游戏结束!”;否则输出“玩家存活,继续战斗!”。

2.2 多条件判断:else if

当需要检查多个条件时,可以使用else if来扩展逻辑。例如,判断玩家的得分等级:

int score = 85;

if (score >= 90)
{
    Console.WriteLine("优秀");
}
else if (score >= 80)
{
    Console.WriteLine("良好");
}
else if (score >= 60)
{
    Console.WriteLine("及格");
}
else
{
    Console.WriteLine("不及格");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

2.2.1 执行流程解析

程序会从上到下依次检查每个条件:

  1. 如果score >= 90,输出“优秀”并结束。
  2. 否则检查score >= 80,如果满足则输出“良好”。
  3. 依次类推,最后的else处理所有未满足的情况。

运行结果:score = 85,输出“良好”。

2.3 嵌套if-else:复杂逻辑的实现

当条件之间有依赖关系时,可以在if或else中再嵌套if-else。例如,判断玩家是否完成任务并根据等级发放奖励:

bool taskCompleted = true;
int playerLevel = 5;

if (taskCompleted)
{
    if (playerLevel >= 5)
    {
        Console.WriteLine("获得高级奖励");
    }
    else
    {
        Console.WriteLine("获得普通奖励");
    }
}
else
{
    Console.WriteLine("任务未完成,无奖励");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

2.3.1 注意事项

嵌套虽然强大,但过深的层次会让代码变得难以阅读。建议不超过3层嵌套,复杂逻辑可以通过方法封装来优化。


三、switch语句:多选项的优雅选择

3.1 switch的基本语法

switch语句适用于处理多个固定选项的场景。它的结构如下:

switch (表达式)
{
    case 值1:
        // 表达式等于值1时执行
        break;
    case 值2:
        // 表达式等于值2时执行
        break;
    default:
        // 没有匹配时执行
        break;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 表达式:通常是整数、字符串或枚举类型。
  • break:表示结束当前分支,避免执行后续代码。

3.1.1 示例:处理玩家选择

假设玩家可以选择“攻击”、“防御”或“逃跑”:

string playerChoice = "attack";

switch (playerChoice)
{
    case "attack":
        Console.WriteLine("玩家选择攻击敌人");
        break;
    case "defend":
        Console.WriteLine("玩家选择防御");
        break;
    case "run":
        Console.WriteLine("玩家选择逃跑");
        break;
    default:
        Console.WriteLine("无效选择,请重试");
        break;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

运行结果:输出“玩家选择攻击敌人”。

3.2 switch与if-else的对比

特性if-elseswitch
适用场景复杂条件(范围、逻辑运算)固定选项(离散值)
可读性灵活但可能冗长简洁,适合多分支
性能无明显差异编译器优化可能更高效

3.2.1 选择建议

  • 用if-else处理范围判断(如score >= 80)。
  • 用switch处理固定选项(如菜单选择)。

四、游戏实战:判断玩家是否死亡

4.1 场景设计

在游戏中,判断玩家是否死亡是一个经典需求。通常,当生命值(health)小于等于0时,触发死亡逻辑,比如显示“游戏结束”或重生玩家。

4.2 使用if-else实现

以下是一个简单的玩家类,包含生命值检查:

public class Player
{
    public int Health { get; set; } = 100;

    public void CheckDeath()
    {
        if (Health <= 0)
        {
            Console.WriteLine("玩家死亡,游戏结束!");
            // TODO: 触发死亡动画或重生逻辑
        }
        else
        {
            Console.WriteLine("玩家存活,生命值:" + Health);
        }
    }
}

// 测试代码
Player player = new Player();
player.Health = 0;
player.CheckDeath();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

运行结果:输出“玩家死亡,游戏结束!”。

4.2.1 关键代码解析

  • Health <= 0:判断生命值是否耗尽。
  • Console.WriteLine:模拟游戏中的提示,可以替换为实际逻辑。

4.3 使用switch扩展:不同死亡原因

假设玩家可能因不同原因死亡,我们可以用枚举和switch来处理:

public enum DeathReason
{
    EnemyAttack,  // 被敌人击杀
    Fall,         // 掉落悬崖
    Poison        // 中毒
}

public class Player
{
    public int Health { get; set; } = 100;
    public DeathReason DeathCause { get; set; }

    public void CheckDeath()
    {
        if (Health <= 0)
        {
            switch (DeathCause)
            {
                case DeathReason.EnemyAttack:
                    Console.WriteLine("玩家被敌人击杀!");
                    break;
                case DeathReason.Fall:
                    Console.WriteLine("玩家掉落悬崖死亡!");
                    break;
                case DeathReason.Poison:
                    Console.WriteLine("玩家中毒身亡!");
                    break;
                default:
                    Console.WriteLine("玩家不明原因死亡!");
                    break;
            }
        }
        else
        {
            Console.WriteLine("玩家存活,生命值:" + Health);
        }
    }
}

// 测试代码
Player player = new Player();
player.Health = 0;
player.DeathCause = DeathReason.Fall;
player.CheckDeath();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

运行结果:输出“玩家掉落悬崖死亡!”。

4.3.1 流程图展示

以下是用Mermaid生成的简单流程图,展示判断逻辑:

是
否
开始
Health <= 0?
switch DeathCause
玩家存活
EnemyAttack: 被击杀
Fall: 掉落死亡
Poison: 中毒死亡
Default: 不明原因
结束

五、常见问题与解决方案

5.1 switch中忘记break

问题:如果switch的case分支忘记加break,程序会继续执行下一个分支,导致意外行为。

解决:

switch (value)
{
    case 1:
        Console.WriteLine("值是1");
        // 缺少break,会继续执行case 2的代码
    case 2:
        Console.WriteLine("值是2");
        break;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

建议:始终检查每个case是否有break,或明确注释“fall-through”是故意为之。

5.2 条件表达式错误

问题:比如用=(赋值)代替==(比较):

if (health = 0) // 错误:赋值而非比较
  • 1

解决:使用==、>等比较运算符,并通过调试验证逻辑。

5.3 嵌套过深难以维护

问题:嵌套过多的if-else让代码混乱。

解决:将部分逻辑封装成方法,例如:

public bool IsPlayerDead(int health)
{
    return health <= 0;
}

if (IsPlayerDead(health))
{
    // 处理死亡
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

六、总结

通过本文,我们深入学习了C#中的条件语句,总结如下:

  1. if-else:适合灵活的条件判断,支持范围和逻辑运算,广泛用于游戏中的动态决策。
  2. switch:适合处理固定选项,代码简洁优雅,常用于菜单或状态选择。
  3. 游戏应用:通过if-else和switch,我们可以轻松实现“判断玩家是否死亡”等功能,并扩展到更复杂的逻辑。

希望本文能帮助你在C#学习和游戏开发中迈出坚实一步!下一节我们将探讨循环语句,敬请期待。


注:本文转载自blog.csdn.net的吴师兄大模型的文章"https://blog.csdn.net/Kiradzy/article/details/146354728"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

106
编程语言
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top