(图书介绍:童晶:《C和C++游戏趣味编程》新书预告)
这学期的线下C语言课程,大一同学们学完旋转蛇案例后(童晶:第4章 旋转蛇(《C和C++游戏趣味编程》配套教学视频)),布置了一次错觉图片生成实验的PBL,给了大家5天时间分组完成代码、ppt报告。
这次,介绍汪佳磊、刘宇、李智锋、郝泽楷同学实现的大小圆圈错觉。由于同学们学习C语言刚一个月,还没有正式学习数组、函数等语法知识,因此代码可能不够完善。以下提供了分步骤的实现思路、代码,大家可以参考。
首先是同学们的目标效果:
![v2-7412202aceccb733125ba7cc5331fd6a_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/3ab205c41f31f71c76d4426ba19d5750.jpeg)
动态艾宾浩斯幻觉:
红圆大小相同,蓝圆大小不同;因红圆周围参照物不同,形成左边红圆小、右边红圆大的视觉错觉。
1.画一个小球
设置小球颜色,用数组存入小球数据
![v2-021abe0a469dc9af3829fada775bc9d3_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/ced2641a5ae24b6add4494991d0e8609.jpeg)
2.画七个小球
大小圆位置关系
设置圆心连线的角度
还要用上函数
再用for循环输出
![v2-2c80c15d5c4df91e6e33c8bab25da72a_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/da4e5c21b219c1d79eeacff91311f693.jpeg)
3.七个小球移动
设置初始位置
设置速度
利用while循环
实现小球移动
到达边界速度反向
![v2-e406d16d7e2065b7dfb1189cdd9bcbf1_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/d84a7c2d0d1a4e4852546e28b6d4b27b.jpeg)
4.中间小球单独移动、改变大小
#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#include <math.h>
/********** 定义全局变量 **********/
#define WIDTH 1000
#define LENGTH 1000
#define PI 3.1415926
/********** 绘制中间的圆 **********/
void originCircle(double x, double y, double r)
{
setfillcolor(RGB(255, 0, 0));
solidcircle(x, y, r);
}
/********** 绘制旁边的一个小圆 **********/
void surroundCircle(double x, double y, double r)
{
setfillcolor(BLUE);
solidcircle(x, y, r);
}
/********** 插入滑稽图片后一起移动 **********/
void funnyMove(double x, double y, double r)
{
IMAGE img; // 插入图片
loadimage(&img, _T("D:\\图片2.png"), 2 * r, 2 * r, true);
putimage(x - r, y - r, &img);
}
int main(void)
{
initgraph(WIDTH, LENGTH);
int drawMode = 1;
double x[7], y[7], r[7];//7个小圆的坐标半径
x[0] = 250, y[0] = 200, r[0] = 35;//中间小圆的原始坐标半径
double<