(图书介绍:童晶:《C和C++游戏趣味编程》新书预告)
这学期的线下C语言课程,大一同学们学完旋转蛇案例后(童晶:第4章 旋转蛇(《C和C++游戏趣味编程》配套教学视频)),布置了一次错觉图片生成实验的PBL,给了大家5天时间分组完成代码、ppt报告。
这次,介绍王翌骏、陈凯、马学强同学实现的正方形错觉。由于同学们学习C语言刚一个月,还没有正式学习数组、函数等语法知识,因此代码可能不够完善。以下提供了分步骤的实现思路、代码,大家可以参考。
首先是同学们调研的目标效果:
![v2-e543ef40a99c130f672d3bb86ca1beac_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/db21c4d931c78f8adfa0748aeb71c4bb.jpeg)
斜向方块的边看起来是弧线,实际上是直线,受黑白条纹影响产生是弧线边的错觉。
STEP 1:划出线
●利用函数在不同两点间划出直线
●代码行数(不算变量的定义)10
●难度:较简单
●PS:其实这线画出来对于最后的效果没有影响,但可以用来作为判断第二步骤的标准
![v2-6a3ee07ed8005fcf351023006b107755_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/cbc91f9ae8d8925abf0ed245200dce04.jpeg)
STEP 2:画出大背景
●利用solidrectangle以及判断和循环来做出
●代码行数:约70行
●难度:一般,但是繁琐,需要大量的循环判断。
![v2-55a1f84db06b99ed8338d69afad535c6_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/674350de8f147de18701f06e3ab914e0.png)
STEP 3:挖空中间部分
●利用clearpolygon函数进行清除
●代码行数:约十行
●难度:简单(简单的循环,但是所用到新的函数以及数据类型POINT,通过easy_x查询)
![v2-e21f120b49c2f520d9d2f49327c1dc94_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/da8cc682b9b1f19b558a06509469b1d4.jpeg)
STEP 4:画出中间部分
●利用坐标,想逃循环判断画出中间部分的
●代码行数:约45行
●难度:困难(尝试多次未果,因为直接用函数确定范围会十分复杂,但我在easyx上看到了setorigin函数用来定义原点,这样在菱形中的函数是一样的,省去了很多麻烦 )
![v2-0f9bd17e435824eacec22fffd8f5f795_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/1e3e37bc4d921c824a4db134d2f223fa.jpeg)
STEP5:结合
将第四步和第三步结合,便得到了错觉图形
![v2-0ccc735b02cdd5751540e3de9fa67e42_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/a55a7f425c1cce417513e417a90ad423.jpeg)
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
int main()
{
int site_x, site_y;
int screen_x, screen_y;
int length = 160;
int width = 8;
int left,top;
int count1, count2;
int x = 1, y = 1, t = 1,k;
screen_x = 640, screen_y = 640;
initgraph(screen_x, screen_y);
cleardevice();
for (t;t < 8;t++)//输出直线
{
if (t <= 4)
{
line(0, 160 * t - 80, 160 * t - 80, 0);
line(