接上一篇文章,很多人还是搞不清楚ptr1[-1]是怎么回事,可以看看这篇文章,看完的同学还是多转发的,让更多的人看到。

一道90%都会做错的指针题


偶然的一次机会在知乎上看到这个代码,里面涉及的C语言点我觉得很酷,拿出来分享给大家,我认为技术的话,只要是跟嵌入式有关,跟C语言有关的,我都喜欢写,大家有想了解的东西,也可以评论留言给我,希望给大家分享更多优质的内容,优质的阅读体验。


我们看一下吃豆人的图片

看起来非常酷,如果我们就用几行代码就能画出吃豆人,这样会不会更酷,好吧,我们不吹牛,先从第一步开始。

第一步就是先画一个长方形,类似这样的

#include <math.h>
#include <stdio.h>int main(){double x,y;/*在 -1 和 1 的区间内画出一个矩阵*/for(y =1;y>=-1;y-=0.05,putchar('\n'))for(x = -1;x<=1;x+=0.025)putchar('.);getchar();
}

输出图片如下:

这个代码应该不难吧,画出了这个之后,下面就是比较困难的了,就是在这个长方形里面勾勒出那个圆形

画圆形的代码应该也是不难的,画圆形的代码如下

#include <math.h>
#include <stdio.h>int main(){double x,y;for(y =1;y>=-1;y-=0.05,putchar('\n'))for(x = -1;x<=1;x+=0.025)putchar(" ."[x*x + y*y < 1 /*确定圆形的位置*/]);/*pow(x,y) x的y 字幂 画吃豆人的眼睛*/getchar();
}

输出图片如下:

完整代码

#include <math.h>
#include <stdio.h>int main(){double x,y;for(y =0.9;y>=-0.9;y-=0.05,putchar('\n'))for(x = -1;x<=1;x+=0.025)putchar(" ."[x*x + y*y < 1&& /*确定圆形的位置*/fabs(atan2(y,x)) > 0.5 &&/*fabs 求绝对值 画吃豆人的嘴巴*/x*x + pow(y-0.5,2) > 0.02]);/*pow(x,y) x的y 字幂 画吃豆人的眼睛*/getchar();
}

分析一

putchar(" ."[])

这个代码我刚开起来有点拗眼,不知道写的是什么,但是既然用到[],那就肯定是跟数组有关系的。

我写了小代码

#include <math.h>
#include <stdio.h>int main(){putchar(" y"[1]);getchar();
}

这个输出如下

y

其实我们这样看还不很明朗的话,我们可以这样看

#include <math.h>
#include <stdio.h>int main(){char *pos = "xy";putchar(pos[1]);getchar();
}

这个代码输出结果跟上面是一样的,pos 也就是那个字符串的别名

这样我们就知道了

putchar(" ."[

这句是通过后面的值来输出空格「 」 还是「 . 」

分析二

继续分析上面的三句关键代码

x*x + y*y < 1&& /*确定圆形的位置*/
fabs(atan2(y,x)) > 0.5 &&/*fabs 求绝对值 画吃豆人的嘴巴*/
x*x + pow(y-0.5,2) > 0.02]);/*pow(x,y) x的y 字幂 画吃豆人的眼睛*/

第一行是确定这个圆形。

第二行是用来确定吃豆人的嘴巴的,这个要有点数学功底才行,写这个的时候,我的数学基本已经送给老师了。

第三行是用来画吃豆人的眼睛的。

吃豆人的眼睛可以用下面这个代码来演示下

#include <math.h>
#include <stdio.h>int main(){double x,y;for(y =1;y>=-1;y-=0.05,putchar('\n'))for(x = -1;x<=1;x+=0.025)putchar(" ."[x*x + y*y < 1&& /*确定圆形的位置*/fabs(atan2(y,x)) > 0.5 &&/*fabs 求绝对值 画吃豆人的嘴巴*/x*x+(y-0.5)*(y-0.5) > 0.02]);/*pow(x,y) x的y 字幂 画吃豆人的眼睛*/getchar();
}
x*x+(y-0.5)*(y-0.5)

这行代码决定小圆,大于号决定小圆的大小,边界。

分析三

atan2这个函数很强大,我们学习三角函数的时候用的是tan,但是这个atan2用的是两个参数,看我上面的图片,atan2(0,1) = 0,atan2(y,x)  第一个参数是 y ,第二个参数是 x。

最后运行如下图

上文源代码转自:

https://www.zhihu.com/people/miloyip/activities


扫码或长按关注

回复「 篮球的大肚子 」进入技术群聊

C语言,画吃豆人剖析相关推荐

  1. C语言实现吃豆人小游戏(转载)

    c语言实现吃豆人小游戏(转载) 游戏内还有一些bug,凑活着来玩一玩吧! #include <stdio.h> #include <iostream> #include < ...

  2. Java语言制作吃豆人游戏

    (此项目源码已上传至Github网站,网址为GitHub - Ran-a/Pac-man-yar) 1  游戏界面 游戏的角色分别是追赶者和吃豆人,玩家使用方向键来控制吃豆人的运动方向并吃食物,将食物 ...

  3. 小游戏之欢乐吃豆人canvas重制版

    前言 <Pac-Man>上一次已经写过了,但是用vue写的,整体下来能玩,但是自己感觉不算流畅,而且游戏计算方面也有点欠缺,感兴趣的可看我上一篇文章.这次我又卷土重来,在三四天内用空闲时间 ...

  4. Java迷宫版 吃豆人(有音乐)

    Java吃豆人+迷宫 本来想着自己用Java编写的吃豆人的,但是如果自己画地图的话,那么多点不好弄,于是就想着让它自己随机生成地图,最后看起来还是可以的,而且我又在网上找了找音频,把声音配上去了, 还 ...

  5. 摸鱼时间,画个吃豆人玩一下

    Ⅰ . 吃豆人小游戏 Canvas API(画布)是在 HTML5 中新增的标签用于在网页实时生成图像: 是一个非常适合,做一些有趣的小游戏 和 动画: 下面我们来简单的写一下 这个小例子

  6. c语言吃豆人游戏怎么理解,python 实现简单的吃豆人游戏

    效果展示: 程序简介 1.使用pygame模组 2.在material目录下有一些素材 3.吃豆人的游戏主体 4.吃豆人怪物的AI(未使用深度学习) 主要代码 main.py import pygam ...

  7. 错觉图片生成实验 - 会动的吃豆人

    (图书介绍:童晶:<C和C++游戏趣味编程>新书预告) 这学期的线下C语言课程,大一同学们学完旋转蛇案例后(童晶:第4章 旋转蛇(<C和C++游戏趣味编程>配套教学视频)),布 ...

  8. java吃豆人代码讲解_在吃豆人的这一关里,隐藏着来自程序员的深深恶意

    本文转载自公众号"把科学带回家"(ID:steamforkids) 作者 七君 玩过吃豆人吧.通关过吗? 通关是不可能的,这辈子都不可能的.因为吃豆人根本不可能通关. 不可能通关的 ...

  9. Python 玩出花了!一文教你用 Python 制作吃豆人游戏! | 附代码

    作者 | 李秋键 责编 | Carol 封图 | CSDN 下载自视觉中国 近几年来Python语言得到了快速发展,而Pygame作为Python开发应用和游戏必备的库更是展现了Python的优越性. ...

最新文章

  1. linux如何设置awesome字体,Awesome简单配置
  2. 销售 750000 册爆款「蟒蛇书」的新版抢先上市 | 9月书讯
  3. linux系统命令基础知识
  4. python 多图一窗口 打乱列表排序
  5. Python 3.x 格式化输出字符串 % format 笔记
  6. winafl 源码分析
  7. 来!把 5000 微信好友头像拼成一张图!
  8. Nginx+Tomcat部署Angular+javaweb项目(解决刷新404)
  9. 工具使用教程(三)【Anaconda虚拟环境下使用Juypter Notebook】
  10. 计算机软件故障排除ppt,计算机基础知识及常见故障排除.ppt
  11. 关于此应用无法在你的电脑上运行的解决方案
  12. surfacepro4黑苹果触屏_surface pro 4 黑苹果 (surface book 1适用)
  13. 代码查重实验(深大算法实验4)报告+代码
  14. 透明状态栏的实现(Activity里有5个fragment,fragment顶部有图片有纯色的actionbar)
  15. 对静态页面的一些理解
  16. 精读Bi-Exponential Edge-Preserving Smoother
  17. Excel-VBA应用(1):批量提取单元格中的超链接URL
  18. 搜应用网调查:2011~2012互联网电子商务IT业裁员倒闭年[持续更新]
  19. Flutter利用第三方插件Screen调节屏幕亮度
  20. 什么是反射?什么Java反射?

热门文章

  1. 爬虫技术实战 | WooYun知识库
  2. Exchange企业实战技巧(26)在Outlook中打开多个邮箱
  3. 微软TechEd 2006亲历(六):微软新一代系统管理平台面纱待揭
  4. 真格量化——菜粕策略
  5. IDEA常用快捷键【win-mac对比】
  6. HTML的xmlns的作用
  7. python编写装饰器_我也来写一下python装饰器
  8. HTML中Head头
  9. linux nginx完全卸载
  10. ios把数据传递到另一个页面_IOS 应用之间的跳转和数据传递详解