一、初遇问题

使用内置的模板创建海龟作图小程序:

小熊猫C++编写海龟作图程序历险记_基本命令

此时,系统自动生成的项目文件下有一个默认的main.c文件:

#include <rturtle.h>

int main() {
int n;
initWorld(800,600);

// Press F2 toggle display of grids
// Press F3 toggle display of the turtle
// Press F5 capture screen

setSpeed(500);
// setRewind(true);
// setImmediate(true);
setPenSize(1);

n=50;
for (int i=0;i<n;i++) {
for (int j=0;j<4;j++) {
fd(200);
lt(90);
}
lt(360.0/n);
}
waitClick();

return 0;
}

但是,编译运行时出现错误:

小熊猫C++编写海龟作图程序历险记_背景图片_02

二、解决原因及方案

根据上述错误,网络搜索大致找到原因如下(引用文2):

小熊猫C++编写海龟作图程序历险记_背景色_03

接下来,就根据自己机器配置信息逐个排查吧。

百度搜索,了解到检测本机显卡所支持OpenGL版本的国外工具软件OpenGL Extensions Viewer。如果引文处下载不了,读者可到51CTO工具下载区下载。

下载后安装运行,我的计算机显示信息如下(老旧的i3 cpu,集成显卡):

小熊猫C++编写海龟作图程序历险记_背景色_04

也就是说,最多支持到OPenGL 2.1。于是,根据瞿华老师指导,下载并替换了小熊猫C++中对应的文件。如果引文处下载不了,读者可到51CTO工具下载区下载。

上述一切准备就绪后,重新编译运行程序,一切正常,结果如下图所示:

小熊猫C++编写海龟作图程序历险记_背景图片_05

【建议】然后,小熊猫C++开发老师会很快注意到这个问题并作相应的处理,到时我们就不必再费事了。

补充——rturtle海龟绘图命令小结

在小海龟行动之前,我们需要熟悉一下绘图环境。这里用列表小结一下​​作者介绍过的命令​​。就像手册一样,你可以在用到时再查看。

函数名通常是由其功能作用相关的英文单词构成的组合或简写,还是比较好理解的。使用函数时,模仿一定要细致到位,比如要区分字母大小写参数数量和顺序、中英文符号格式,还要注意缩进、多写注释、不漏写字符等。

画布窗口相关命令

  • 创建作图窗口 initWorld( 800, 600 ) 尺寸为像素数
  • 设置背景色 setBackgroundColor( LIGHTBLUE )
  • 设置背景图片 setBackgroundImageFile( "d:\\banner-001.png" ) F4 隐藏/显示背景图片
  • 重新设置网格 createGrids() 如:createGrids(50,1,16,DARKGREEN,DARKRED); F2 隐藏/显示坐标网格
  • 截图 F5键来抓取当前窗口中的图形,并保存图片文件到.exe所在文件夹
  • 清屏 clearScreee( ) 或 cs( )
  • 等待关闭窗口 waitClose( );
  • 清理作图窗口 closeWorld( );

画笔和填充

想象海龟的身子下方有一只笔,笔的尺寸和颜色决定了海龟痕迹的粗细和颜色。

  • 画笔线条粗细 setPenSize( 3 )
  • 画笔颜色 setPenColor( DARKRED )
  • 落笔 penDown( ) 或 pd( ) 默认落下
  • 抬笔 penUp( ) 或 pu( )
  • 是否落下 isPenDown( )
  • 填充图形 beginFill( ) 开始……endFill( LIGHTGREEN )结束

*利用抬笔和落笔可绘制虚线。填充时,如果路径中存在交叉,则可能会有部分区域不能被填充。

*泛洪填充(fillToBorder、fill )还没有看到如何使用。

海龟移动基本命令

  • 设置速度 setSpeed( 500 ) 默认速度为100像素/秒
  • 前进距离 forward( ) 或 fd( 100 ) 尺寸为像素数
  • 后退距离 backward( ) 或 bk( 100 )
  • 左转角度 leftTurn( ) 或 lt( 90 ) 单位为度,360度为一圈
  • 右转角度 rightTurn( ) 或 rt( 90 )
  • 返回初始位置 home( )

坐标系和高级移动函数

后面的函数基于坐标系和方向角。

坐标系

小熊猫C++编写海龟作图程序历险记_背景色_06

【注意】原点在窗口正中间。

方向角

小熊猫C++编写海龟作图程序历险记_背景色_07

*后面的函数就是在坐标系和方向角基础上描述的。

有过程移动

  • 爬到点(x,y)处 gotoXY(x,y)
  • 转到方向角angle turnTo(angle)
  • 朝向点(x,y)转动 faceXY(x,y)

无过程瞬移

  • 瞬移到点(x,y)处 setXY(x,y)
  • 横移到横坐标为x setX(x)
  • 纵移到纵坐标为y setX(y)
  • 转到方向角angle setHeading(angle) 或 setAngle(angle) 貌似与 turnTo(angle) 相同啊,都是原地转
  • 瞬移回原点(0,0) home() 初始方向角为90度

获取海龟位置

  • 获取x、y坐标 getXY( )
  • 获取x坐标 getX( )
  • 获取y坐标 getY( )
  • 获取方向角 getHeading( ) 或 getAngle

还有一些函数,用到时再介绍吧。


引用