Lecture 01 · Java Programming with Robocode Tank Royale

初探编程世界

启动你的第一辆自动战斗坦克,并建立“改代码、运行、观察、再修正”的学习循环。

Java(编程语言) Bot(机器人) Method(方法) Debugging(调试)

Teacher

黄泽钧校友

  • 宽柔中学新山校本部 2015 年高三理(2)班毕业。
  • 英国谢菲尔德大学(University of Sheffield)软件工程硕士,一等荣誉学位。
  • 全系第一名,获颁 Mappin Medal 奖牌;曾担任四个学期的助教。
  • 现任 AlphaCloud Technologies Pte Ltd 高级软件工程师。

先看一场坦克对战

这就是我们四堂课要亲手做出来的成果:一辆能自己移动、扫描、瞄准与开火的坦克。

  • 你不会用手柄遥控坦克,而是写程序来决定它的每一个行为。
  • 每改一行代码,战场上的结果都会立刻不同。
  • 今天的目标很朴素:让你的第一辆坦克在战场上动起来。

今天的学习目标

看懂环境

知道 Java、IntelliJ IDEA、Robocode Tank Royale 与 GitHub 各自负责什么。

跑起坦克

运行第一份 Bot(机器人)代码,观察坦克移动、转向、扫描与开火。

保存成果

完成一次 commit(提交),把今天能运行的版本保存起来。

2 小时课堂节奏

0:00 - 0:20

课程介绍、Robocode 战场演示、环境检查。

0:20 - 0:45

认识 IntelliJ IDEA 界面、运行配置与 GitHub 模板流程。

0:45 - 1:15

认识 Java 程序结构,并示范修改移动、转向与雷达扫描。

1:15 - 2:00

学生实作、现场 Debug、Git 保存阶段成果。

Java 是什么?

Java 是一门强类型 (strongly-typed)、跨平台的编程语言。自 1995 年发布至今,仍是企业级系统、Android 应用与银行金融系统的主力语言之一。

强类型 (Strongly-typed)

变量必须先声明类型,许多错误在编译 (compile) 阶段就被发现,而不是等到运行时才出问题。

跨平台 (Cross-platform)

“一次编写,到处运行”(Write Once, Run Anywhere):同一份代码可在 Windows、macOS、Linux 上运行。

生态成熟 (Mature)

文档、库与社区资源丰富,向后兼容性好,适合作为第一门编程语言长期学习。

Google、Netflix、Uber、Amazon 与众多银行系统都大量使用 Java。学好它,对未来职场有长期价值。

代码怎样变成会运行的程序?

  1. 编写源代码 (source code):我们在 MyFirstBot.java 里写人类可读的 Java 代码。
  2. 编译 (compile):编译器 javac 把源代码翻译成字节码 (bytecode),也就是 .class 文件。
  3. 运行 (run):JVM(Java 虚拟机) 读取字节码并执行,坦克于是开始行动。

JDK 与 JRE

JDK(开发工具包)= 编译 + 运行;JRE(运行环境)= 只能运行。我们要写代码,所以需要安装 JDK 25

为什么先懂这一步?

出现 “compile error(编译错误)”时,代表代码还没成功翻译,坦克根本不会启动。先过编译,再谈策略。

Robocode 是什么?

Robocode Tank Royale 是一个编程游戏:我们不是直接操控坦克,而是写一个程序,让坦克自己在战场中移动、扫描、开火和反应。

  • Body(车身):负责移动和转向。
  • Gun(炮塔):负责瞄准和开火。
  • Radar(雷达):负责扫描敌人。

参考: Anatomy of a Bot

环境检查清单

电脑上需要有

  • JDK(Java Development Kit,Java 开发工具包)25 或以上。
  • IntelliJ IDEA(Java 代码编辑与运行工具)。
  • Git(版本控制工具)与 GitHub 账户。

今天的原则

先让程序跑起来,再逐步理解每一行代码。编程初学者最需要的不是背术语,而是建立可重复的排查流程。

从模板到 GitHub:保存你的代码

  1. 注册 GitHub 账户,打开 学生代码模板 ,点Use this template → Create a new repository 创建属于你自己的仓库。
  2. 在 IntelliJ IDEA 用 Git clone(克隆)你的 repository(代码仓库)到本机。
  3. 修改 MyFirstBot.java,确认坦克可以运行。
  4. commit(提交)并 push(推送)到 GitHub,形成第一份云端存档。

若课前无法完成 GitHub,可先在本机 commit;下一堂课再补齐 push。

认识 IntelliJ IDEA 的工作区

  • Project(项目视窗):查看文件夹、Bot 文件与配置文件。
  • Editor(编辑器):阅读和修改代码。
  • Run widget(运行控件):选择并启动预设 run configuration(运行配置)。
  • Run tool window(运行视窗):查看程序输出与错误信息。
  • Status bar(状态栏):查看编码、缩进、行列位置与后台任务。

参考: IntelliJ IDEA User Interface

IntelliJ IDEA 工作区示意图:Project、Editor、Run widget 与 Run tool window

使用模板的一键运行配置

1. 打开模板项目

使用学生代码模板,IntelliJ IDEA 会读取已准备好的 .idea 设置。

2. 启动 Robocode

从 Run widget(运行控件)选择预设配置,一键启动 Robocode Tank Royale。

3. 启动 MyFirstBot

再选择 Bot 的运行配置,让 MyFirstBot 加入战场。

课堂目标不是学习复杂配置,而是先体验“改代码、运行、观察结果”的循环。

一份 Bot 需要哪些文件?

MyFirstBot.java

描述坦克的行为:什么时候启动、怎样移动、怎样扫描、怎样反应。

MyFirstBot.json

描述坦克的资料:名称、版本、作者、平台与使用的编程语言。

官方建议初学者先用 JSON config file(JSON 配置文件)提供 Bot 信息。

第一份 Java Bot 代码

package MyFirstBot;

import dev.robocode.tankroyale.botapi.*;
import dev.robocode.tankroyale.botapi.events.*;

public class MyFirstBot extends Bot {
    // 程序入口:启动这辆坦克
    public static void main(String[] args) {
        new MyFirstBot().start();
    }

    // 每个回合开始时被呼叫:定义坦克的主要行为
    @Override
    public void run() {
        while (isRunning()) {
            forward(100);
            turnGunLeft(360);
            back(100);
            turnGunLeft(360);
        }
    }

    // 扫描到敌人 → 开火(第二课详解)
    @Override
    public void onScannedBot(ScannedBotEvent e) {
        fire(1);
    }
}

模板里的 MyFirstBot.java 还多了一个被击中时的反应方法 onHitByBullet(第三课讲);今天我们主要看 run()

读懂代码骨架

  • package MyFirstBot;:声明这份代码属于哪个包 (package),对应它所在的文件夹。
  • import ...;导入 (import) Robocode 提供的现成工具,才能使用 Bot 与各种事件。
  • class MyFirstBot类 (Class),这辆坦克的设计图。
  • main()主方法 (Main Method),Java 程序的入口,从这里启动坦克。
  • run()运行方法 (Run Method),定义每回合开始后坦克要持续做的事。
  • while循环 (Loop),让同一组动作不断重复,直到 Bot 停止运行。

文件名必须和类名一致:MyFirstBot 类要放在 MyFirstBot.java 里。

Class(类)与 Inheritance(继承)

Class(类)

MyFirstBot 是一个 Class(类),像一张坦克设计图:描述这辆坦克有哪些行为。

Inheritance(继承)

extends Bot 表示继承 Robocode 提供的 Bot 父类,因此可以直接使用 forward()fire() 等现成 Method(方法)。

今天先建立直觉;第二课起会在事件与策略中反复用到这些概念。

坦克的生命周期:回合与事件

Robocode 是回合制 (turn-based) 的。理解这个循环,就能预测代码何时运行:

  • run() 里的指令(如 forward不是瞬间完成,而是一回合一回合地推进。
  • 每个回合 (tick),服务器都会更新坦克的最新状态。
  • 发生事件(扫描到敌人、被击中、撞墙)时会中断去执行对应的事件处理器,处理完再回到主循环。

事件处理器(如 onScannedBot)从第二课开始详解。

Bot 生命周期流程图:main 启动后进入 run 主循环,每回合推进并在事件发生时中断处理

教师示范:让行为变得可观察

  1. forward(100) 改成 forward(200),观察坦克前进距离。
  2. back(100) 改成 back(50),观察移动节奏。
  3. turnGunLeft(360) 改成 turnGunRight(360),观察炮塔与雷达扫描方向(本模板中两者联动转动)。
  4. 每次只改一处,运行后说出“我改了什么,结果有什么不同”。

小步修改是 Debugging(调试)的基础。

学生练习:给坦克一个巡逻节奏

基础任务

  • 让坦克前进、后退、转炮塔,各至少出现一次。
  • 修改至少三个数字,并记录每次变化带来的战场行为。
  • 遇到错误时先读错误信息,再举手说明卡在哪一行。

进阶挑战

试着让坦克走出一个比较不规则的巡逻路线,但不要一次改太多。

读懂常见的编译器错误

编译器信息 (compiler message) 含义 怎么办
';' expected 少了分号 看错误指出的行号,在语句结尾补上 ;
cannot find symbol 名字拼错,或忘了 import 检查方法/变量的拼写与大小写,确认相关包已 import
class MyFirstBot is public, should be declared in a file named MyFirstBot.java 文件名与类名不一致 让文件名和类名完全一样
'}' expected 括号 { } 不成对 先检查大括号配对,再看小括号 ( )

排查顺序:先看错误行号 → 读懂信息 → 小步只修一处 → 重新运行。如果改太多找不到原因,回到上一个能运行的 commit(提交)。

用 Git 保存今天的成果

  1. 确认 Bot 可以运行。
  2. 在 IntelliJ IDEA 查看 changed files(已修改文件)。
  3. 写下 commit message(提交信息):Complete first bot movement
  4. commit(提交)后再 push(推送)到 GitHub。

参考: Commit and push changes

为什么今天就学 Git?

软件团队每天都在用 Git 保存与协作。它像“进度存档”,能让你安心做小步实验,改坏了也能回到上一版。

课堂反思

  • 今天哪一个代码改动最明显地改变了坦克行为?
  • 你第一次看到错误信息时,能不能找出它指向的文件和行数?
  • 如果坦克一直撞墙,你会先怀疑移动距离、转向,还是循环逻辑?

建议 commit message(提交信息):Complete first bot movement。课后延伸:给 Bot 改名,并填好 JSON config file(JSON 配置文件)的作者字段。

授权

趣味 Java 编程启蒙班 © 2026 by Eng Zer Jun is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International