GOC 命令与参数说明
本文档根据当前项目中的 GOC 评测实现整理,覆盖可识别的绘图命令、控制命令、C++ 子集语法以及参数规则。
基本约定
- 默认画布大小:
400 x 400 - 默认画笔位置:画布中心
- 默认画笔颜色:黑色
- 默认画笔粗细:
1 - 角度规则:
rt(angle):顺时针旋转lt(angle):逆时针旋转- 坐标规则:
- 画布内部使用屏幕坐标
moveTo(x, y)与lineTo(x, y)的y轴按 GoC 语义处理,内部会做转换- 颜色参数支持以下形式:
- 色号整数,如
1 - 颜色名字符串,如
"red"、"purple" rgb(r,g,b)字符串- 十六进制颜色,如
"#FF0000"
颜色色号表
当前实现内置的色号映射如下:
| 色号 | 颜色 |
|---|---|
| 0 | black |
| 1 | red |
| 2 | blue |
| 3 | green |
| 4 | cyan |
| 5 | yellow |
| 6 | brown |
| 7 | 深蓝 |
| 8 | gray |
| 9 | pink |
| 10 | darkgreen |
| 11 | purple |
| 12 | darkcyan |
| 13 | gold |
| 14 | orange |
| 15 | white |
绘图命令
画笔与移动
| 命令 | 参数 | 说明 |
|---|---|---|
pen.fd(distance) |
distance: 数值 |
前进指定距离 |
pen.bk(distance) |
distance: 数值 |
后退指定距离 |
pen.rt(angle) |
angle: 数值 |
顺时针旋转 |
pen.lt(angle) |
angle: 数值 |
逆时针旋转 |
pen.moveTo(x, y) |
x: 数值, y: 数值 |
移动到指定位置,不自动连线 |
pen.lineTo(x, y) |
x: 数值, y: 数值 |
连线到指定位置 |
抬笔、落笔与状态
| 命令 | 参数 | 说明 |
|---|---|---|
pen.up() |
无 | 抬笔 |
pen.pu() |
无 | up() 别名 |
pen.down() |
无 | 落笔 |
pen.pd() |
无 | down() 别名 |
pen.hide() |
无 | 隐藏画笔 |
pen.show() |
无 | 显示画笔 |
pen.speed(value) |
value: 数值 |
设置速度,当前仅记录,不影响图像 |
颜色与粗细
| 命令 | 参数 | 说明 |
|---|---|---|
pen.c(color) |
color: 色号/颜色字符串 |
设置当前画笔颜色 |
pen.color(color) |
color: 色号/颜色字符串 |
c() 别名 |
pen.size(size) |
size: 数值 |
设置画笔粗细,内部会转为正整数 |
圆与椭圆
| 命令 | 参数 | 说明 |
|---|---|---|
pen.o(radius) |
radius: 数值 |
画空心圆,使用当前画笔颜色 |
pen.o(radius, color) |
radius: 数值, color: 色号/颜色字符串 |
画空心圆,使用传入颜色 |
pen.oo(radius) |
radius: 数值 |
画实心圆,使用当前画笔颜色 |
pen.oo(radius, color) |
radius: 数值, color: 色号/颜色字符串 |
画实心圆,使用传入颜色 |
pen.e(width, height) |
width: 数值, height: 数值 |
画空心椭圆,参数为宽直径、高直径,使用当前画笔颜色 |
pen.e(width, height, color) |
width: 数值, height: 数值, color: 色号/颜色字符串 |
画空心椭圆,使用传入颜色 |
pen.ee(width, height) |
width: 数值, height: 数值 |
画实心椭圆,参数为宽直径、高直径,使用当前画笔颜色 |
pen.ee(width, height, color) |
width: 数值, height: 数值, color: 色号/颜色字符串 |
画实心椭圆,使用传入颜色 |
说明:
o/oo的圆心使用当前画笔位置e/ee的中心也使用当前画笔位置e/ee传入的是直径,不是半径
矩形与文字
| 命令 | 参数 | 说明 |
|---|---|---|
pen.r(x, y, w, h) |
x: 数值, y: 数值, w: 数值, h: 数值 |
画空心长方形 |
pen.rr(x, y, w, h) |
x: 数值, y: 数值, w: 数值, h: 数值 |
画实心长方形 |
pen.text(x, y, text) |
x: 数值, y: 数值, text: 字符串/变量 |
在指定偏移处绘制文字 |
说明:
r/rr目前按左上偏移 + 宽高进行计算text的第三个参数最终会转成字符串绘制
图片、声音与时间类命令
| 命令 | 参数 | 说明 |
|---|---|---|
pen.pic(...) |
任意参数 | 当前仅记录操作,不实际绘图 |
pen.picL(...) |
任意参数 | 当前仅记录操作,不实际绘图 |
pen.sound(...) |
任意参数 | 当前仅记录操作,不实际播放 |
pen.soundL(...) |
任意参数 | 当前仅记录操作,不实际播放 |
pen.ctime(seconds) |
seconds: 数值,可省略 |
当前仅记录操作 |
wait(seconds) |
seconds: 数值,可省略 |
当前仅记录操作 |
pause(...) |
任意参数,可省略 | 当前仅记录操作 |
说明:
- 以上命令目前不会直接改变像素图像
- 在评测中会被解析与记录,但主要作用是避免运行错误
C++ 子集语法
变量与类型
| 语法 | 说明 |
|---|---|
int a; |
整数变量声明 |
double x; |
浮点变量声明 |
string s; |
字符串变量声明 |
int a = 1; |
带初始化声明 |
a = 3; |
赋值 |
说明:
- 支持一行内多个声明,如
int a = 1, b = 2; - 未初始化时:
int/double默认值为0string默认值为""
条件与循环
| 语法 | 说明 |
|---|---|
if (condition) { ... } |
条件分支 |
else { ... } |
否则分支 |
else if (condition) { ... } |
否则如果 |
for(init; condition; step) { ... } |
标准 for 循环 |
for(int i=0;i<n;i++) { ... } |
常用 i 循环 |
说明:
- 支持
i++、++i、i--、--i - 循环执行有步数保护,避免死循环
输入输出
| 语法 | 说明 |
|---|---|
cin >> x; |
输入一个值到变量 |
cin>>x>>y; |
支持无空格连续输入 |
cout << "a" << x; |
输出表达式 |
cout<<"a"<<x; |
支持无空格连续输出 |
cinWin(); |
从输入流读取一个值 |
说明:
cinWin()在评测中从input_data顺序取值cin也是按顺序取值cout输出会被记录,但当前主要用于执行兼容,不参与图像绘制
表达式支持
当前可用的表达式能力包括:
- 算术:
+ - * / - 比较:
== != > < >= <= - 逻辑:
&& || ! - 常量:
true false - 内置函数:
abs(...)min(...)max(...)int(...)double(...)string(...)
当前评测结论与边界
已可稳定评测的内容
- 前进、后退、转向
- 抬笔、落笔
- 颜色、粗细
- 圆、实圆、椭圆、实椭圆
- 空心/实心长方形
- 文字
- 移动与连线
if / else / forcin / cout / cinWin
当前仅做兼容记录的内容
pic / picLsound / soundLwait / ctime / pauseshow / hide / speed
这些命令当前会被正确解析并记录,但不一定直接影响图像像素。
示例
int main() {
pen.size(3);
pen.color("purple");
pen.o(40);
pen.ee(80, 40, 2);
pen.moveTo(220, -120);
pen.lineTo(260, -80);
string s = "A";
pen.text(10, 10, s);
return 0;
}
—— 本文来自火龙信奥(义乌睿码科技):义乌青少年信息学奥赛与编程教育平台,专注 CSP-J/S、NOIP、GESP 竞赛培训,线上线下融合教学,助力编程升学。网址:hlcoding.com