(图书介绍:童晶:《C和C++游戏趣味编程》新书预告)
这学期的线下C语言课程,大一同学们学完旋转蛇案例后(童晶:第4章 旋转蛇(《C和C++游戏趣味编程》配套教学视频)),布置了一次错觉图片生成实验的PBL,给了大家5天时间分组完成代码、ppt报告。
这次,介绍杨雍斌、景羿霏、王舒杨、孙凤祥同学实现的倾斜的字母。由于同学们学习C语言刚一个月,还没有正式学习数组、函数等语法知识,因此代码可能不够完善。以下提供了分步骤的实现思路、代码,大家可以参考。
首先是同学们调研的目标效果:
![v2-9fd77942270ea8df741a7147cfb32467_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/6566cf8d5e6645e9f20c7bc2523197cc.jpeg)
错觉介绍:利用斜线以及黑白颜色的对比来产生倾斜错觉
原理:黑白线是斜的,黑白对比较强烈
目标效果:使原本横平竖直的字母看上去倾斜
1 设置背景和参数
设置背景为紫粉色
设置小方块宽50,高25
设置o,p,e,n上下左右坐标
![v2-14cebc04bdd1e02d0fbc0d5448c90c51_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/288ce9812489e331e023a6eae6506207.jpeg)
2 绘制字母
每隔一个小方块绘制一个小方块
绘制出字母o,p,e,n
![v2-3708eebfb0b8a60bb06d3b94a3d89d14_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/7749f667d70c842673ead61ab22316c5.png)
3 添加颜色
对小方块添加颜色
RGB(0, 0, 0)为黑色
RGB(225, 225, 225)为白色
![v2-8cf2f91279565f119ce99f35d680597a_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/90d0cd876444e9fb9faf082adde494a2.jpeg)
4 添加斜线
在白色方块上添加黑色斜线
在黑色方块上添加白色斜线
并使它们连在一起
![v2-210355b26acb347a6cdf196f96ed595f_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/3174ec2b165e9b3e35d684739e2495e2.jpeg)
5 添加按键
设置按下空格键后显示斜线
使效果更加直观明显
![v2-6716cdeab78a0659d23a358af16d0d49_b.jpg](https://i-blog.csdnimg.cn/blog_migrate/23bc1cdb79e4dc366945a27b0f087acc.jpeg)
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
int main()
{
initgraph(1050, 400);//打开一个窗口
setbkcolor(HSLtoRGB(300, 0.4, 0.9));//设置背景颜色
cleardevice();//以背景颜色清空画布
int width = 50;//矩形宽度
int height = 25;//矩形高度
int i;
int left, top;
int left_O = 50, top_O = 50, right_O = 200;//字母O的上下左右坐标
int left_P = 300, top_P = 50, right_P = 450;//字母e的上下左右坐标
int left_E = 550, top_E = 50, right_E = 700;//字母p的上下左右坐标
int left_N = 800, top_N = 50, right_N = 1000;//字母n的上下左右坐标
for (left = left_O; left <= right_O; left = left + 2 * width)//字母O
{
setfillcolor(RGB(0, 0, 0));//填充黑色
fillrectangle(left, top_O, left + width, top_O + height);
fillrectangle(left + width, top_O + height, left + 2 * width, top_O + 2 * height);
fillrectangle(left + width, top_O + 7 * height, left + 2 * width, top_O + 8 * height);
fillrectangle(left, top_O + 8 * height, left + width, top_O + 9 * height);
setfillcolor(RGB(255, 255, 255));//填充白色
fillrectangle(left + width, top_O, left + 2 * width, top_O + height);
fillrectangle(left, top_O + height, left + width, top_O + 2 * height);
fillrectangle(left, top_O + 7 * height, left + width, top_O + 8 * height);
fillrectangle(left + width, top_O + 8 * height, left + 2 * width, top_O + 9 * height);
}
for (top = top_O + 2 * height; top <= top_O + 6 * height; top = top + 2 * height)
{
setfillcolor(RGB(0, 0, 0));//填充黑色
fillrectangle(left_O, top, left_O + width, top + height);
fillrectangle(left_O + 3 * width, top + height, left_O + 4 * width, top + 2 * height);
setfillcolor(RGB(255, 255, 255));//填充白色
fillrectangle(left_O, top + height, left_O + width, top + 2 * height);
fillrectangle(left_O + 3 * width, top, left_O + 4 * width, top + height);
}
for (left = left_P; left <= right_P; left = left + 2 * width)//字母P
{
setfillcolor(RGB(0, 0, 0));//填充黑色
fillrectangle(left, top_P, left + width, top_P + height);
fillrectangle(left + width, top_P + height, left + 2 * width, top_P + 2 * height);
fillrectangle(left, top_P + 6 * height, left + width, top_P + 7 * height);
fillrectangle(left + width, top_P + 7 * height, left + 2 * width, top_P + 8 * height);
setfillcolor(RGB(255, 255, 255));//填充白色
fillrectangle(left