变量、数据类型、运算符与输入输出
这是一节专门面向孩子的 Minecraft Fabric MOD 基础课。你会发现,写 MOD 并不是“会打字就行”,而是像搭乐高一样,一块一块搭建“规则”。变量就是盒子,数据类型就是盒子的标签,运算符是积木之间的连接方式,输入输出是你和游戏世界交流的窗口。
只要这四部分学扎实,后面不管是做“会发光的矿石”、还是“能升级的武器”、或者“会追踪玩家的生物”,逻辑都能写得更稳。你现在读到的内容,就是后续 Fabric 事件系统、方块交互、实体行为的地基。
本章目录
2.1 变量:给数据起名字
变量就像背包格子:每个格子都有名字,也只能放特定内容。
先记一个最容易理解的比喻:你在 Minecraft 里有很多箱子。你给箱子贴上标签,比如“钻石”“木头”“食物”。写 Java 代码时,变量就像这样的箱子。它们负责保存数据,程序随时可以读取和修改。
例如我们想记录玩家血量、移动速度和昵称,这三个值随时会被游戏逻辑读取。没有变量,程序就像没有抽屉的桌子,东西都摊在地上,既难找又容易出错。
2.1.1 变量定义格式
数据类型 变量名 = 初始值;
int health = 20;
double speed = 1.2;
String playerName = "Steve";
上面三行中,`int`、`double`、`String` 是数据类型;`health`、`speed`、`playerName` 是变量名;等号右边是给变量的初始值。最后的分号是语句结束标记,必须写。
2.1.2 命名规范(孩子最容易丢分的地方)
- 变量名可以包含字母、数字、下划线,但不能以数字开头。
- 变量名不能是 Java 关键字,比如 `class`、`int`、`public`。
- 推荐驼峰命名法:第一个单词小写,后续单词首字母大写,如 `playerHealth`。
- 变量名要有含义,不要用 `a`、`b`、`c` 长期代替真实语义。
2.1.3 变量在 MOD 开发中的作用
- 记录玩家状态:`health`、`mana`、`exp`。
- 记录世界信息:`blockX`、`blockY`、`blockZ`。
- 记录过程状态:`isCrafting`、`canOpenDoor`。
- 记录临时结果:比如一段计算后的伤害值。
2.2 数据类型:给变量贴标签
如果变量是箱子,那么数据类型就是标签。标签的意义是告诉程序“这个箱子里放什么”。程序靠类型来决定怎么计算,怎么比较,怎么显示。一旦类型乱了,程序就会报错,或者出现很难找的问题。
2.2.1 常见基础类型
| 类型 | 用途 | 示例 |
|---|---|---|
| int | 整数,适合计数、等级、坐标 | 20 |
| double | 小数,适合速度、概率、倍率 | 1.75 |
| boolean | 真假值,适合开关判断 | true / false |
| char | 单个字符 | 'A' |
int level = 5;
double critRate = 0.35;
boolean isAlive = true;
char rank = 'S';
2.2.2 字符串 String
`String` 表示文本数据,比如玩家名字、聊天内容、道具描述。它和 `char` 不同:`char` 只存一个字符,而 `String` 能存一段文字。
String playerName = "Alex";
String title = "勇者学徒";
2.2.3 类型匹配与常见错误
// 错误:int 不能直接接收文字
int name = "Steve";
// 正确:文本应该使用 String
String name = "Steve";
很多孩子一开始会把“看起来像数字的文本”和“真正的数字”搞混。比如输入框拿到的通常是字符串,如果要参与计算,必须先转换。
2.2.4 基础类型转换
int a = 10;
double b = a; // 自动转换:int -> double
double x = 5.8;
int y = (int) x; // 强制转换:结果为 5,小数部分会被截断
在 MOD 中,常见场景是:玩家输入是字符串,配置文件里有文本,需要转成数字再计算。孩子只要记住一句话:参与数学运算前,先确认类型正确。
2.3 运算符:让逻辑跑起来
有了变量和类型后,程序还不会“思考”。运算符就是思考规则。你可以把运算符看作红石电路中的连接器:不同连接方式,触发不同结果。
2.3.1 算术运算符
| 符号 | 作用 | 示例 |
|---|---|---|
| + | 加法 | 伤害累计 |
| - | 减法 | 扣除血量 |
| * | 乘法 | 倍率加成 |
| / | 除法 | 平均值 |
| % | 取余 | 奇偶判断、周期触发 |
int attack = 12;
int bonus = 3;
int damage = attack + bonus;
int wave = 17 % 5; // 结果 2
2.3.2 赋值运算符
int coins = 10;
coins += 5; // coins = coins + 5
coins *= 2; // coins = coins * 2
赋值运算符特别适合做“不断变化”的游戏数值,如金币累加、经验叠加、冷却倒计时。
2.3.3 比较运算符
int health = 18;
boolean safe = health > 10;
boolean dead = health <= 0;
比较运算符输出的是 `true` 或 `false`,它们会直接参与 `if` 判断。孩子学会这个,就能写“血量低于 5 自动提示危险”这类逻辑。
2.3.4 逻辑运算符
boolean hasKey = true;
boolean doorUnlocked = false;
boolean canEnter = hasKey && doorUnlocked;
- `&&`:并且,两个条件都满足才为真。
- `||`:或者,只要一个满足就为真。
- `!`:取反,真变假,假变真。
这部分是“游戏规则设计”的核心。比如“玩家拿到钥匙并且击败守卫才可开门”,就是典型 `&&` 逻辑。
2.4 输入与输出:和程序对话
很多孩子写代码只会算,不会“交流”。输入输出就是交流机制。输出让我们看到程序结果,输入让玩家把信息告诉程序。调试 MOD 时,这一步几乎每天都要用。
2.4.1 输出(Output)
System.out.println("Hello Minecraft!");
int playerHealth = 20;
System.out.println("玩家血量: " + playerHealth);
每完成一段逻辑后输出关键变量,可快速核对计算结果与预期是否一致,显著降低调试成本。
2.4.2 输入(Input)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入玩家名: ");
String name = scanner.nextLine();
System.out.print("请输入初始血量: ");
int health = scanner.nextInt();
System.out.println("欢迎 " + name + ",你的血量是 " + health);
}
}
当孩子学会输入,就能做小交互程序:玩家输入名字、输入选择、输入数值,然后程序给出反馈。这是从“静态代码”走向“动态逻辑”的关键一步。
2.4.3 输入输出在 Fabric 中的价值
- 输出:快速定位事件是否触发、变量是否正确更新。
- 输入:模拟配置参数,测试不同玩法条件。
- 图形界面时代,输入输出概念依然存在,只是从控制台迁移到 GUI。
2.5 综合练习:把知识拼起来
练习的目标不是“背代码”,而是能把变量、类型、运算和输入输出串联起来。下面这三个练习按难度递增,非常适合孩子课后完成。
练习一:玩家状态面板
String name = "Steve";
int health = 20;
double speed = 1.2;
boolean hasSword = true;
System.out.println("玩家: " + name);
System.out.println("血量: " + health);
System.out.println("速度: " + speed);
System.out.println("是否持剑: " + hasSword);
练习二:两数计算器
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
System.out.print("输入第一个数: ");
int a = sc.nextInt();
System.out.print("输入第二个数: ");
int b = sc.nextInt();
System.out.println("加法结果: " + (a + b));
System.out.println("乘法结果: " + (a * b));
System.out.println("取余结果: " + (a % b));
练习三:是否存活判断
int playerHealth = 0;
boolean isAlive = playerHealth > 0;
System.out.println("是否存活: " + isAlive);
2.6 在 Fabric MOD 里的真实用法
这些 Java 基础与 MOD 开发直接对应,以下为常见的真实应用场景。
- 自定义武器伤害:用 `int` 记录基础伤害,用 `double` 处理暴击倍率。
- 状态效果系统:用 `boolean` 控制是否中毒、是否加速、是否免疫。
- 方块交互逻辑:用比较运算符判断玩家是否满足条件。
- 任务进度系统:用输入输出和变量追踪任务步骤。
int playerHealth = 6;
boolean hasPotion = true;
if (playerHealth <= 8 && hasPotion) {
System.out.println("提示:血量偏低,请立即使用药水");
}
当孩子能稳定写出上面的判断,就已经具备进入“事件监听”“方块右键交互”“实体行为控制”阶段的能力。这也是 Fabric 学习中最重要的里程碑之一。
2.7 本章小结与作业
这一章你完成了 Java 学习中非常关键的一步:从“看懂代码”过渡到“能自己写出可运行的逻辑”。你已经知道变量如何存值、类型如何约束数据、运算符如何表达规则、输入输出如何帮助调试和交互。这四件事组合在一起,就是后续所有 MOD 功能开发的基础能力。
本章巩固可围绕 3 类练习展开:变量命名与赋值、比较与逻辑判断、输入输出调试。通过分组练习可稳定提升编码准确率与调试效率。
课后作业
- 作业 1:写一个“玩家属性显示器”,输出 5 项属性。
- 作业 2:写一个“药水使用判断”,当血量低于 8 且背包有药水时输出提示。
- 作业 3:写一个“简单商店结算器”,输入单价和数量,输出总价与余额。