🎮 游戏开发 I (C++) 🗺️

CodeCombat 编程冒险指南

🏰 ⚔️ 💎

准备好用 C++ 的力量构建世界了吗?
更加强大、更加严谨的代码之旅!

包含关卡:第 1 - 6 关

本节课关卡

扣哒世界 · 游戏开发1 · C++ · 第1–6关

C++ · 本节课关卡

01 · 越过花园墙

先读关卡目标,观察地图,再运用本课知识。

02 · 点击步态

先读关卡目标,观察地图,再运用本课知识。

03 · 英雄的旅程

先读关卡目标,观察地图,再运用本课知识。

04 · 太-棒-了

先读关卡目标,观察地图,再运用本课知识。

05 · 宝石太棒了

先读关卡目标,观察地图,再运用本课知识。

06 · 风险与回报

先读关卡目标,观察地图,再运用本课知识。

学习路线:读目标 → 看图解 → 写代码 → 运行检查

📘 基础知识 Intro

初识 C++ 🚀

Welcome to C++

⚡ 强大的 C++
C++ 是一种非常快速且强大的语言,很多大型游戏(如王者荣耀、绝地求生)都是用它写的!
🧱 语法积木
  • int main() { ... }: 程序的入口,所有代码都要写在大括号里面。
  • ; (分号): 就像句号一样,每一行指令结束必须加分号!
  • //: 这种斜杠后面的是注释,计算机会忽略它。
int main() { // 这是你的主程序区域 game.spawnXY("hero", 10, 10); // 别忘了分号! return 0; // 程序结束 }
☝️ 记住这个结构,每关都要用哦!
💻
🗺️ 游戏开发1 - 越过花园墙 LEVEL 1

笛卡尔坐标系 📐

Cartesian Coordinate System

💡 什么是坐标?
想象你在一个大城市里。X轴是街道的宽度(左右走),Y轴是楼层的高度(上下走)。
每一个位置都有一个名字,比如 (39, 16)。
🚧 任务
我们需要在草地上修栅栏!记得每行代码后加分号 ;。
(39, 16)
int main() { game.spawnXY("fence", 39, 16); // 在相隔4米的位置再生成2段围栏… // 在y处生成"fence" 20 game.spawnXY("fence", 39, 20); // 在y处生成"fence" 24 game.spawnXY("fence", 39, 24); game.spawnXY("fence", 39, 28); game.spawnXY("fence", 39, 32); return 0; }
📏
🗺️ 游戏开发1 - 点击步态 LEVEL 2

事件驱动编程 🖱️

Event-driven Programming

💡 什么是事件?
就像你按遥控器电视会换台一样。在游戏里,"鼠标点击"就是一个事件。
程序会监听你的点击,然后命令角色走过去。
🏃 任务
点击屏幕,告诉骑士要走到哪里去!
int main() { game.spawnPlayerXY("knight", 5, 8); // 设置点击后的移动目标点 game.addMoveGoalXY(10, 18); game.addMoveGoalXY(10, 38); game.addMoveGoalXY(48, 41); return 0; }
👆 addMoveGoalXY 就是在设置移动的目标点
👆
🗺️ 游戏开发1 - 英雄的旅程 LEVEL 3

游戏目标 🏁

Game Goals

💡 为什么要设置目标?
没有目标的游戏就像没有球门的足球赛!
我们需要告诉玩家:“嘿,你得走到那个位置才能赢!”。
🦸 任务
我是队长(Captain),我要走到地图的尽头 (53, 45)!
int main() { // 使用game.spawnPlayerXY("captain", x, y) // 为你的游戏添加一个玩家角色: game.spawnPlayerXY("captain", 9, 9); // 使用game.addMoveGoalXY(x, y) // 为你的游戏添加一个移动目标: game.addMoveGoalXY(53, 45); return 0; }
🚀 只要走到那个坐标,屏幕就会显示 VICTORY (胜利)!
🏆
🗺️ 游戏开发1 - 太-棒-了 LEVEL 4

收集目标 🎒

Collecting Goals

💡 寻宝游戏
除了走路,我们还可以让玩家去收集东西。
比如金币、钥匙、或者神秘的宝箱。
💎 任务
看到那个宝箱了吗?我们需要设置一个“收集目标”,玩家必须把它捡起来才能赢。
int main() { // 设置游戏目标。 game.addCollectGoal(); // 生成一个英雄和可供收集的宝箱。 game.spawnPlayerXY("duelist", 9, 59); game.spawnXY("chest", 8, 14); game.spawnXY("forest", 26, 51); // 再添加2个"forest"对象。记得不要把宝石彻底挡死。 game.spawnXY("forest", 34, 22); game.spawnXY("forest", 50, 22); return 0; }
📦
🗺️ 游戏开发1 - 宝石太棒了 LEVEL 5

宝石元素 💎

Gem Elements

💡 亮闪闪的奖励
宝石 (Gem) 是游戏里最常见的奖励。
它们通常代表分数或者通关的关键道具。
✨ 任务
在地图的不同角落撒下宝石,让玩家去探索吧!
int main() { game.spawnPlayerXY("captain", 9, 18); // 使用game.addCollectGoal()来添加宝石收集目标。 game.addCollectGoal(); game.spawnXY("gem", 28, 28); // 为关卡添加3枚宝石以供玩家收集: game.spawnXY("gem", 69, 10); game.spawnXY("gem", 9, 36); game.spawnXY("gem", 45, 44); return 0; }
Tip: 坐标间隔远一点,游戏会更好玩!
✨
🗺️ 游戏开发1 - 风险与回报 LEVEL 6

条件设置 🔢

Conditional Settings

💡 制定规则
游戏不能太简单!我们可以设置更具体的规则。
比如:“你不需要收集所有宝石,但你必须至少收集6颗才能过关。”
🎲 任务
设置一个数字条件。玩家需要自己决定走哪条路去凑够6颗宝石。
int main() { // 玩家只需要收集部分宝石。 game.spawnPlayerXY("knight", 39, 23); // 使用game.addCollectGoal(X)设置玩家获胜条件 // 要求收集X枚宝石!(这里X应该设为6) game.addCollectGoal(6); return 0; }
📝 括号里的数字就是通关条件!
🎲

我的知识宝藏 · 一页复习

扣哒世界 · 游戏开发1 · C++ · 第1–6关

C++ · 知识点图
关键字方法 / 函数字符串数字

初识 C++ 🚀

保留 main 框架;动作语句末尾写分号,字符串使用双引号。

笛卡尔坐标系 📐

位置用横坐标 x、纵坐标 y 表示;目标坐标表示地点,不是要走的步数。

game.spawnXY("fence", 39, 16);

事件驱动编程 🖱️

事件发生时执行对应处理;鼠标点击可以让玩家角色走向点击位置。

game.spawnPlayerXY("knight", 5, 8);

游戏目标 🏁

先创建玩家,再指定到达位置、收集数量或击败目标,形成通关规则。

game.addMoveGoalXY(53, 45);

收集目标 🎒

addCollectGoal() 要求收集全部物品;传入数量可以指定需要收集几个。

game.addCollectGoal();

宝石元素 💎

用 spawnXY 在指定坐标生成 gem 宝石,再配合收集目标设计寻宝路线。

game.spawnXY("gem", 28, 28);

条件设置 🔢

给收集目标传入数量,只要达到指定数量就能满足这一目标。

game.addCollectGoal(6);

本节课关卡:1. 越过花园墙;2. 点击步态;3. 英雄的旅程;4. 太-棒-了;5. 宝石太棒了;6. 风险与回报