#9983. 2026/7/29/WJN笔记(GOC基础)

2026/7/29/WJN笔记(GOC基础)

一、GOC语言简介

GOC是面向信息学入门的图形化编程语言,基于C++语法扩展了绘图功能。

二、核心指令大全

所有绘图指令均通过画笔对象 p 调用,以下是入门阶段必须掌握的基础指令,按功能分类整理:

1. 移动类指令(控制画笔位置,移动时画线)

指令语法 核心功能 参数与示例
p.fd(长度); 画笔沿当前朝向向前移动指定距离,移动路径自动画线 参数为整数,单位:像素
示例:p.fd(100); 向前移动100像素
p.bk(长度); 画笔沿当前朝向的反方向向后移动指定距离,移动路径自动画线 参数为整数,单位:像素
示例:p.bk(100); 向后移动100像素

2. 转向类指令(仅改变朝向,不移动、不画线)

指令语法 核心功能 参数与示例
p.rt(角度); 画笔原地顺时针旋转指定角度,仅改变朝向 参数为整数,单位:度
示例:p.rt(90); 顺时针右转90°
p.lt(角度); 画笔原地逆时针旋转指定角度,仅改变朝向 参数为整数,单位:度
示例:p.lt(90); 逆时针左转90°

3. 画笔样式设置(修改后续绘图的外观)

指令语法 核心功能 参数与示例
p.size(粗细); 设置画笔线条的粗细 参数为整数,数值越大线条越粗
示例:p.size(10); 设置画笔粗细为10
p.c(颜色编号); 设置画笔颜色 参数为整数,对应调色板颜色编号
示例:p.c(3); 设置画笔为3号颜色

4. 抬笔与落笔(控制移动时是否画线)

指令语法 核心功能 典型用法说明
p.up(); 抬笔:后续移动画笔时不会留下线条 需要移动画笔到新位置、但不想画线时使用,常用于切换绘图位置
p.down(); 落笔:后续移动画笔时恢复画线 抬笔移动到位后,落笔继续正常绘图

典型抬笔移动代码:

p.up();    // 抬笔
p.fd(100); // 移动100像素,不留下线条
p.down();  // 落笔,后续移动恢复画线

5. 快捷图形绘制

指令语法 核心功能 参数与示例
p.r(宽, 高); 绘制空心矩形 两个参数分别为矩形的宽、高(像素)
示例:p.r(100,50); 绘制100×50的空心矩形
p.rr(宽, 高); 绘制实心填充矩形 两个参数分别为矩形的宽、高(像素)
示例:p.rr(100,50); 绘制100×50的实心矩形

注意:矩形的绘制方向会受画笔当前朝向影响。

6. 文本输出指令

使用 p.text() 可以在画布当前位置输出文本,分两种使用格式:

  • 输出数字:直接填写数字参数,无需加引号
    p.text(10);    // 在画布上输出数字 10
    
  • 输出汉字、字母、字符串:内容必须用英文双引号包裹
    p.text("正方形");  // 在画布上输出文字“正方形”
    p.text("Hello");   // 在画布上输出字母 Hello
    

三、必记核心规律

  1. 方向与转动规律

    • 右转 rt = 顺时针转动(与钟表指针转动方向一致)
    • 左转 lt = 逆时针转动(与钟表指针转动方向相反)
    • 画笔初始默认朝向:水平向上
  2. 画线控制规律

    • 只有 fdbk 移动画笔时,才会在画布上留下线条;
    • rtlt 只旋转方向,不移动位置,也不画线;
    • up() 抬笔状态下移动不会画线;down() 落笔状态下移动才会画线。
  3. 缩写速记

    • fd → 前进
    • bk → 后退
    • rt → 右转
    • lt → 左转
    • r → 空心矩形;rr → 实心矩形
    • up → 抬笔;down → 落笔
  4. 语法规范

    • 所有指令末尾必须写分号 ;
    • 字符串、汉字、字母内容必须用英文双引号包裹

四、重点应用:外角法绘制正多边形

这是GOC入门最核心的绘图逻辑,必须牢记:

  • 外角计算公式:正 n 边形的单个外角 = 360÷n360^\circ \div n
  • 关键要点:画正多边形时,画笔每画完一条边,旋转的角度就是这个外角

通用绘制步骤

重复执行 n 次:「前进固定边长 + 旋转一个外角的角度」,即可画出完整的正多边形。

  • 正方形(4边):外角 = 360÷4=90360\div4=90^\circ,每次转90°,重复4次
  • 正五边形(5边):外角 = 360÷5=72360\div5=72^\circ,每次转72°,重复5次
  • 正六边形(6边):外角 = 360÷6=60360\div6=60^\circ,每次转60°,重复6次

示例:绘制正方形

int main()
{
    p.size(5);
    p.c(2);

    // 重复4组:前进 + 右转外角90度
    p.fd(150);
    p.rt(90);
    p.fd(150);
    p.rt(90);
    p.fd(150);
    p.rt(90);
    p.fd(150);
    p.rt(90);
    
    return 0;
}

五、综合完整程序示例

整合所有基础指令的完整程序:

int main()
{
    // 设置画笔样式
    p.size(8);
    p.c(4);

    // 绘制线段
    p.fd(100);
    p.rt(90);

    // 抬笔换位置,绘制矩形
    p.up();
    p.fd(50);
    p.down();
    p.rr(100, 50);

    // 抬笔移动后输出文本
    p.up();
    p.rt(90);
    p.fd(80);
    p.down();
    p.text("GOC基础绘图");
    p.text(2026);

    return 0;
}