super1 发表于 2021-8-23 16:23

学会了 C 语言真的可以开发出很多东西吗?

我现在c语言入门,基本靠自学,就看网上的那种教程,但是我怎么觉得它就是只能做下数学题,我觉得它并不能编辑出一个啥子游戏或者软件出来噢……初学者,见谅。

Mecanim 发表于 2021-8-23 16:27


马里奥碰到花朵就变身。
什么是马里奥?一个装着 16 × 32 个小色块的长方形,其中一些色块填着颜色,另一些没有。什么是花?一个 16 × 16 的正方形。什么是「变身」?把马里奥这个方块里面代表衣服的褐色变成红色,代表背带裤的红色变成白色。什么是褐色?暂且说它是 0x887000 这个数字。什么是「碰到」?马里奥的长方形与花朵的正方形有所重叠。什么是「重叠」?假设马里奥的这个方块占据屏幕(什么是屏幕?一个能装下 256 × 240 个小色块的矩形)中 X 方向 101 到 116、Y 方向 21 到 52 之间的区域,那么只要这个区域内有一点或更多点也被花朵所占据(比如花朵处在 X 116 到 131、Y 21 到 36 之间的区域内),我们就认为两者有所重叠。
若给定以八个数值代表的两个矩形区域,请写出判断两个区域是否有重叠的 C 语言程序。如果你能写出来,那么祝贺你,如果有朝一日你想自己用 C 做一遍 NES 版本的《超级马里奥》,你至少知道让他变身需要做什么了。
是的,C 语言也许「只能」做数学题。可是,绝大多数游戏的运行过程就是不停地做数学题,而所谓编写游戏,也就是把游戏的规则和游戏的效果转化为数学题而已。其中不少题目电脑都已经知道怎么解——是别的程序员事先告诉它的——比如「求一堆散落在三维直角座标系之中的多面体在 8(x3)10(y+1)11(z1)=0 这个平面上一个给定范围内的投影」或者「给定一些彼此相连的顶点,求任意两点之间的最短路径」之类的数学题,它只需要千万分之一秒就能给你解好。这种能力有什么用?电脑上 FPS 游戏的本质活动就是不停地求三维座标系下的多面体经过变换之后在二维平面上的投影,不停地判断两个多面体是否彼此重叠,以及不停地寻找两个顶点之间的最短路径,最终达到让怪物冲到你面前咬你一口的目的。不止游戏如此,其他软件也都差不多,每一个细节都是某种数学题——比如知乎页面顶端的蓝色导航条背景,是 CSS 描述的一个浅蓝到深蓝的渐变——渐变是怎么回事呢?给出两个数字分别代表两种颜色,以及第三个数字代表一段距离,求一系列颜色的数值以及次序,使得这段距离中任意两种相邻颜色之间的变化最小。数学题。别说 C 语言,一切编程语言最终都只能做数学题,根据给定的数据,算出另一些数据,算出更多的数据,然后存贮、发送或者呈现算出的数据。总结来说,由于数学可以解释真实的世界,所以能用于创造虚拟的世界。真实世界里的炮弹会以近似抛物线的轨迹下落,所以你在游戏里以抛物线不断绘制一枚炮弹,它看起来就很真实。
不过我能理解你的困惑。投入大量时间看完教程,结果只能在黑框里输出一串数字。这是在学编程还是在向七十年代致敬?编程是这样无法给人成就感的活动吗?是,也不是。看你的表述,应该不是小孩子了,因为小孩子不会因为初学编程能做的事情很少而没有成就感,或者说,觉得这样做没有成就感的小孩子根本不会继续学下去。最初学编程的成就感单纯来自于「我居然可以指挥机器做一些事」,至少我小时候用中华学习机编一个程序帮我算暑假作业上的四则运算题时是这样感觉的。写出这些程序并用它解题虽然远比自己动笔去把题目算出来费时,却让人乐此不疲。那时候我还不知道马里奥碰到花会变身这种事情其实也是靠编程编出来,所以我也不会去想学编程「并不能做什么」。
无奈大多数人过了一定年纪就很难再靠「我能指挥机器」这种简单原始的快乐来驱动自己学编程。见过世面,听过传言,欲望和野心变得复杂而庞大,你想要图形界面,音乐音效,人工智能,云端同步,可是你闷头学了几堂课,还是只学会在黑框里显示一串数字。你怀疑这是学 C 语言的错,于是你到知乎上来问了这个问题。
你的疑惑是有道理的。
如果能把编程学下去,日后你就会明白,任何程序都是一座冰山,最终用户能看到的界面和使用的功能,只是程序浮在水面上的十分之一。知乎这个网站其实也是个运行在某台电脑上的程序,你能看到的十分之一是用什么编写的呢?HTML,CSS,JavaScript,或者 Objective-C。而你看不到的那十分之九是用什么编写的呢?Python。这些你无法直接观测到的 Python 程序运行在世界某个角落的某些计算机上,隔着光缆、双绞线和无线基站,为你面前或掌上的用户界面注入生命。


( xkcd: Python )
……可是 Python 是用什么编写的呢?C 语言(当然,这么说并不严谨,Python 理论上可以用任何其他语言实现,实际上也已经被用很多其他语言实现了,不过这并不是重点)。任何编程语言都是实现某个功能的工具,Python 实现了知乎这个网站的大部分功能,而 C 实现了「用 Python 写程序」这个功能。为什么是 C?
C 很别扭又缺陷重重,却异常成功。固然有历史的巧合推波助澜,可也的确是因为它能满足对于这样一种系统实现语言的需要:既有相当的效率来取代汇编语言,且又足够地抽象而流畅,能够用于描述各种各样的环境之下的算法与交互。
C is quirky, flawed, and an enormous success. Although accidents of history surely helped, it evidently satisfied a need for a system implementation language efficient enough to displace assembly language, yet sufficiently abstract and fluent to describe algorithms and interactions in a wide variety of environments.
——C 语言之父,Dennis M. RitchieC 是初代程序员所使用的语言,那时候硬件很贵,软件必须高效;而计算机的用户都是职业程序员,对于硬件有足够的理解。C 贴近硬件,就意味着它容易译成机器能懂的语言,而它的设计者也并不需要操心普通人学起来可能会比较困难——而且,说真的,其实也不很难。但是,这么多年过去之后,软件规模变得越来越大,C 就像锤子和手锯,修小木屋得心应手,造摩天楼就比较力不从心;但 C 语言可以用来造出其他更适合建造摩天楼的工具,乃至组成摩天楼的预制件,就好比用锤子和手锯造出挖掘机和吊车、混凝土板和一体门窗一样(当然,这个类比并不十分贴切。可是没有什么类比能贴切地描述软件工程,因为软件工程像许多东西,却又什么东西都不像)。
所以,回到你的问题上来,是的,学会 C 计算机语言真的可以开发出很多东西,但除非内力深厚,场合适当,并且闲得蛋疼,大多数人不会拿 C 或者只拿 C 来开发太大的东西。如果你只是想要一门能够让你「编辑出一个啥子游戏或者软件出来」的语言,而且你用 Windows,那建议你转去学学 C#。它长得和 C 挺像,但却能迅速地写出至少是带有图形界面的程序,用起来也很方便,鼠标点一点就能让你对自己的程序看起来什么样有个比较直观的印象。还有,在国内,C# 的教材也相当容易找到。当然 Python 也是一个很好的选择。



另外,还有一件事你必须弄明白:现代的所谓编程这一活动,其实大部分时候是在「合理地堆砌别人已经实现的功能来实现新的功能」,C 语言莫不如是,比如 printf 这个东西,是别人做出来的「把一些数据按照指定格式输出到屏幕上」这一功能。而别人还做出来许多其他功能,比如「在发现用户短时间内连续两次按下鼠标又松开的时候调用你写好的一个函数」。学会怎样在 C 或者其他任何程序语言中使用这些既有功能,也是学习编程的一门重头戏。等你弄明白这一点,你也就找到了你问题的答案。
尾注1:题图画错了。马里奥身宽应为 16 像素,我画成了 17。
尾注2:NES 上的超级玛利奥使用 6502 汇编完成,并不是 C,碰撞检测也不是像素级的。
尾注3:我不是易语言发明者。

fwalker 发表于 2021-8-23 16:35

曾经我对C语言的认识是:黑框框+数学题,后来变成:C语言----让生活更美好。直接上实物图!!!一起体验硬件开发中,C语言的黑魔法。

内附:追女神的套路

新增几个娱乐点:
1.难度系数:任何一个东西要想做的很精,都很难,所以很难下结论。这里难度系数,答主默认为从学生角度来看,实现的难易程度。
2.介绍:怕大家看不懂图片,多多介绍功能。
3.背后的故事:讲述答主和该项目的故事

1.喜闻乐见的智能车
那些年,我们一起玩过的智能车。
因为这个被带入不归路的同学,请举起你们的双手!!!我从手机翻了很久才找到这张照片,让大家娱乐一下。


说一下我做过的三类车:

(1)避障车:
功能:①遇到障碍物可以自己躲避(因为有超声波传感器可以检测到前面有障碍物),比我们小时候的四驱车智能多了吧!!!!!
②当然还有其他功能:液晶屏显示走过的距离,红外避障之类的。(难度系数:★)

(2)两轮平衡车:
我们将两个轮子的车放在地上,那它必然会摔倒。平衡车就是利用PID算法来不断调整姿态,让两个轮子的小车可以稳稳的站住。(难度系数:★★)

(3)WIFI视频车:
该小车自带一个摄像头,如果电脑和小车上的WIFI连接了以后,我们通过PC端的一个软件,就可以看到小车摄像头实时传过来的画面。(难度系数:★★★)

背后的故事:
答主大一最爱的就是做车。。。。。。。

2.萝莉语音温度播报


介绍:
①可以显示温度
②如果按下播报键,可以语音播报当前温度
③同时还具有蓝牙功能,几十米也能收到温度消息(用手机或者PC直接连接温度器的蓝牙就能收到!)
④可以将温度实时传送至PC,并在动画中显示温度变化
⑤声音自己可以录制,选择你喜欢的声音
难度系数:★★★



背后的故事:
当时有个好基友假期要做兼职,我说做兼职多没‘’钱途‘,我们来做这个比赛,基友拒绝。两个月后颁奖。。。。学校给了一部itouch,答主那时经济危机,果断卖之,900到手。基友补课赚了600,已哭,,回来说以后不能不听我的话了。

3.万年不变的万年历


介绍:
①可以显示日期,温度,还可以设置闹钟叫醒自己哦!!!!!!!!!!!!!
②可以在特定日期,屏幕显示特定的祝福。-------据说有无数宅男做出这个送给了女神
③不要看不起它哦,大家想象一下,送给女神后:三个月晚上的某一天正好是情人节,半夜12点,铃声响起,女神下床一看,屏幕显示了一句告白的话~~~~~~~~~~~后面的剧情自己脑补
难度系数:★★

背后的故事:
没故事,答主练手做的。

4.采矿致富车--------------电赛作品--金属探测车


介绍:
这是某一年全国电赛的题目,TI出的,用铁丝围了一个圈,要求车能很快围绕着铁丝走一圈!!遇到硬币能够报警。测量自己走过的距离。要求用最少的时间走完一圈
难度系数:★★★★

背后的故事:
做出来简单,做的稳定+快就难了。答主的车跑的飞快。。。,测试的时候竟然跑出线了,吓尿!幸好最后没事了,喜拿1等。

5.基于物联网的家庭安防系统-----九宫格解锁(隔空解锁)


介绍:
这是答主参加某比赛做的,是不是一脸懵逼?看不懂?其实很简单,用九个传感器仿照手机九宫格解锁,使用者只要在远处挥动手势,这个门就可以打开,如果三次错误就向主人打电话报警!!(还会语音提示:小偷,我已报警,请走开。喇叭就在右下角,大家应该能看到)同时还会在我们做的网站上,提示有人盗窃~~~~~~~~~~~~~可惜图不全了,不然一定放出来!
难度系数:★★★★,做出来简单,做的好看+稳定就难了。

背后的故事:
我能说人生第一次上电视,是因为这个么。。。。。虽然就晃悠几秒

6.基于心理治疗的儿童电子琴


介绍:
啧啧啧,这可不是普通的电子琴哦。使用者可以隔空弹琴,隔空哦!!一个学姐拿这个,儿歌弹得飞起。。。。其实是为抑郁症,残疾儿童等设计的,用于心理治疗。
难度系数:★★★★

背后的故事:
虽然这个项目不是我做的,但是也算节间参与,也正是因为这个项目,把我带上了不归路。。。。。。。该项目‘’荣获‘’大学生喜闻乐见的比赛--挑战杯XXX国家级XX奖,答主蛮惊讶的还,毕竟我一直当它是玩具。。。。。它还有多种模式,可以选择某一首歌播放,也可以自己弹,哪个键动了,对应的动画也动,如下图:



7.用一次就想丢的-----蓝牙防丢器
生活中,你是否遇到这样一些问题?



不用怕,只要用了我们的蓝牙防丢器,保证你以后再也不敢丢了。
介绍:
找不到图了,放一张百度的图


功能:
①手机和防丢片通过蓝牙,只要一个离开一个(超过一定距离),双方都会响
难度系数:★★★

背后的故事:
参加挑战杯XXX比赛做的,一个学弟仿照淘宝的东西,让我照做一个出来。绝对是坑啊,离开一两米就响那确实能防盗。这东西和手机离开三十米估计才响,你让我去哪里找贼啊?而且声音很低。。。人多听不见啊。。为了考证,我去淘宝买了两个,结果一模一样的毛病,已哭,现在不知道被我扔到哪里去了。这也从另一个角度告诉我们,这些比赛有多水(其实很多角度都能看出来,哈哈),最后得了个省XXX奖,不醉不行。比赛失利的孩子,不要哭,继续撸。

感慨:还有好些项目,找不到图了,答主吃完饭回来看能找到不!真后悔当初乱删照片,现在看到这些照片真激动,全是青春的回忆啊~~~~~~~~~~~~~~~~~~~~

8.操作系统
嵌入式系统,可以运行在真机。我发了一个15天内制作操作系统的攻略,有完整的编写教程。想写操作系统的朋友,可以看看如何从零开始写一个简单的操作系统? - 梦人亦冷的回答 - 知乎

结尾:C语言----让生活更美好

9.如何让C语言走进生活?
这样的例子数不胜数,答主举个简单的例子,抛砖引玉,剩下的发挥空间,交给你们了!

相信知乎有很多爱养宠物的童鞋们,有时候经常加班或者没时间照顾小猫小狗,何不考虑做个宠物喂食器,就算自己长期不在家,也能让他们安然无忧。
①比如这样的,喂水器:(小狗走近就会滴水)


②.又或者这样的喂食器:(小狗走近就会落食)


③.喂水+喂食+逗他们玩的恶作剧,也是可以的啊!自己制作的好处就是,可以方便的增删功能,贴近自己的生活习惯。
④怎么做:只要有C基础的童鞋,想速成,非常快!!!!!!!!!!!认真做,一个礼拜就能做成一个有雏形的喂食器了。是不是感觉很有趣啊~~~~~~~~~~~~~

结尾:C语言----让生活更美好

NoiseFloor 发表于 2021-8-23 16:39

什么是计算机?一个加法器(仅会1+1)和一个搬运工。这就是我认为的计算机。
那为什么世界可以这么美?
减法用补码加,乘法多次算,除法转乘法。这是计算。
8位一字节,128个ASCII码,数字就成了字母。
字母组单词单词做指令,数可以代表指令也可以代表运算部件,指令有操作码和操作数。指挥加法器操作数。这时候是汇编。
图像RGB三元色256灰度,声音44.1kHz采样,汉字两字节unicode。于是世间音形变成01。
有了这些,我便可以用单片机控制led。我传1你就亮,这是开关。当我128*64个液晶一起控制,这是12864液晶显示屏。当我1920*1080这就是锤子的屏幕。于是显示器出来了。怎么现实锤子二字?怎么使用键盘扫描a这个字母?怎么打开wifi模块?怎么写驱动?这都是c语言在干的。这就是驱动。
驱动出来了,处理器改怎么分配时间,内存怎么占用,硬盘内存cache怎么分,进程何时用,外设驱动怎么处理,等等,这些写好了就是简易操作系统吧。linux内核全用c哦,这就是操作系统。
屏幕可以任意显示了,音响可以随意响了,有os做底层支撑了。然后我让屏幕显示一把枪,我定义它为一个物体,定义一些操作,比如扣动扳机。再定义一些人物,场景,定义一些规则。这就是cs了吧。这里枪只是一个枪,我不会去管它怎么画怎么显,我只要知道他是一个东西,我可以用它。这就是面向对象编程。
于是就出来了楼主所说的游戏。当然游戏还牵扯到gpu等外设,还牵扯到建模,曾见过物理博士就搞游戏里水怎么建模,流体嘛,什么美工,什么渲染,联网还要数据库,外挂还有脚本
但是从那三极管的电子空穴阴阳中和到你一枪爆头有关系吗?
让你学c不是让你用它写出什么中国版linux,是为了让你明白如何去操作工具。学的是如何用机器思想思考。而不是你说开机就开机。
入门,学的是语法的抽象。是知道名词动词和句子有结构这个事实。至于汉语主谓宾和英语主谓宾,学了一个另一个不就好懂了吗
我也不知道我要说啥了T T。
这里的每一段的一个功能或许就是几百个博士教授一生的目的。

其实就是讲计算机的一些原理。对象语言更多的是使用工具,比如库,函数,调用什么的。而c是他们的基石。

更新于22夜晚

我们大家都忘了一个事,软件真的只是写代码吗?写代码只占了不到百分之十吧,大多的是在维护,规划,文档,找bug。。。。
编程语言有好多,

汇编,是最直接效率最高,但是看到一堆1001谁都眼花。别信什么传说曾经有人用针在光盘上刻出过一个操作系统,现在几乎都可以用c代替了吧。但是还要懂一点灵魂。

c是高级结构语言,但还是偏向与硬件。linux仅仅几百k的源码大多就是什么处理器内存存储管理,进程管理。linux牛是因为他驱动多。c就是一线员工,危险都得上,但少了他不行。老师们教导我们劳动只有分工不同没有贵贱之分。反而很多c工程师待遇超好。

java ,cpp,c sharp,是对象语言。像是将军指挥下属,不必去知道盔甲怎么铸造。

javascript之类脚本语言,这个没学,不太懂,不敢说了,求介绍

matlab fortan之类偏向数学吧。什么控制,图像处理,识别,人工智能,神经网络,机器学习。感觉好高大上哦。这些东西都是你看不到,但神奇的可以很实用的问题,这就是数学的魅力。你知道一个傅里叶变换搞出了多少高科技吗???看系里有人学这个好羡慕,自己没那命。

vhdl, verilog hdl之类的。纯硬件语言。这个不是通用cpu,是cpld,fpga之类的大量运算,这种语言弄得是芯片里的布线,就是改变硬件连接。而通用cpu那些只是重复。这个里面就有了ip核,很有用的知识产权。什么arm架构,其实卖的不是芯片,仅仅是芯片规划也就是ip核,中国这个可怜啊,这才是赚钱的地方呢。以前听过一个老师说,你以为我们愿意买美国国债啊,你不买,ip核不卖你,你就不行。哎,intel,arm什么这个积累多啊,中国,哎不说了。希望华为海思可以搞好吧。

html之类,求指教

但所有编程不都是一个理嘛,一个物质操纵另一个物质,加法器操作数,系统操作开关,屏幕。你的鼠标操纵一个对象,whdl操纵一条电子线路。
当然还差很多,要实现这些,还有太多太多。
最后什么国产e语言。我觉得没啥用,除了汉语好看,没一点用

JoshWindsor 发表于 2021-8-23 16:41

你能想到的,C语言都能搞,可以说是无所不能,把C学好,上手其他语言也会事半功倍。题主只是还没有入门,只看教程不动手永远学不会,推荐5个免费的C语言入门小项目,由易到难,开始动手做一些常见的小东西吧。
1.C/C++ - C语言制作简单计算器
用C语言做一个简单的计算器,进行加、减、乘、除操作。项目涉及的所有数学知识都很简单,但输入过程会增加复杂性。


2.C/C++ - C语言制作2048
2048是之前十分火爆的一款益智游戏。项目将使用 C 语言完成一个2048游戏。


3.C/C++ - C语言版扫雷游戏
扫雷是Window系统中自带的经典游戏。项目将使用 C 语言完成一个简单的扫雷游戏。


4.C/C++ - C语言编写万年历

本次课程将使用 C 语言完成一个简单的日历功能。输入相应的年/月即可看到当月的日历。


5.C/C++ - C语言快速实现五子棋用最最简单的代码来实现五子棋游戏,帮助大家复习基础知识,了解一个项目的开发流程。



收藏的童鞋们顺便点个赞吧:)

kirin77 发表于 2021-8-23 16:44

理论上C语言能开发出几乎所有软件。

但是,计算机发展了几十年,留下的大量的轮子和解决方案。C后产生的各种新语言和第三方库如此丰富,这已经是巨大的财富。我们没有必要回到石器时代去创建新的文明,而且就算重来,也未必能创建出更加优秀的文明。已经能站在巨人肩上,理性地选择拿来主义,择优出解决方案才是王道。

我接触C语言完全是因为课程的安排。C基本语法掌握后,接下来就是数据结构。开始了想题主一样,做“数学题”。用C实现链表、平衡树、排序和一些算法等后,我也只是在后台黑框框输出我的成果,确实枯燥。

但是这个过程对我的影响几乎是最大的。数据结构课程结束,我对编程的认识大致就是函数的logical control+存储的data。软件的运行其实也就是一大坨从现实需求中抽象出来的数据通过代码的控制逻辑一直在变化。后来看到Nicklaus Wirth曾用“算法+数据结构=程序”来概括,看来我没有认识跑偏。在我看来,C语言抽象了2进制,它让我们大脑中的“数据”概念映射到了电脑中。即便同是数值,我们也有了更好被我们大脑理解的char。还有struct这种custom的数据集合,完全就是为了照顾我们愚蠢的大脑。我们关注了C衍生出的抽象概念,而不再去死磕零零碎碎内存。我们还有便于逻辑展开的胶合物function。只要我们把现实世界的东西,通过我们大脑抽象出“数据和逻辑”,就能映射到电脑上,变成软件。即便C语言本身看起来很整洁,但是这种松散的数据表达和粗犷的回收机制,让我在大二美好的时光中,度过了大姨妈和Bugs同时问候我的心酸时光。后来投向C++,有了还算不错的语法糖和特性,接触OOP,生活有了点改善。而且也学会偷懒,有轮子就那来用,而且实际项目开发过程,其实也没发现比啃数据结构课程难。C语言开发的经历,让我在看OOP那些设计模式的时候,自恋地傲娇,“这些不用你教我也玩过好吧!”

再后来接触Java和Python,特别是Python,太改善生活质量了。所以毕设毫不犹豫选择Python做开发语言。这之后,我开始关心开发的复杂度。其实实际开发过程中,业务逻辑本身带来的复杂度是无法消除的,而且开发过程使用的语言和选择的框架也会带入复杂度。我之前搞C语言,特别是多线程的时候,内存回收太容易出Bug了,很头疼。即使使用了消息传递机制来缓解,开发还是很耗时啊。现在很多语言都支持垃圾回收机制,一般情况我们不用关心回收。这其实就是控制开发复杂度的强有力的手段。

我个人的观点,就是用最接近人脑理解的方式来抽象,即使增加开发成本也可是付出的。让数据有更好的组织形式,优先考虑良好的数据结构表达而不是沉迷于OOP的设计模式,减少抽象过程带入的胶合层,能吞掉的就不要暴露给使用者。毕竟胶合层本身就是增加复杂度的大隐患。减少开发的复杂度真的可以改善生活!请相信我。

我推荐还在大学学习的,时间多的是,不要根基不稳就追逐看似高大上的新玩意,很多真的当你用的时候在去看也不晚,多看看C和数据结构以及算法。折腾明白了,学其他的会比较快,而且不会迷失在各种框架里面。

TheLudGamer 发表于 2021-8-23 16:46

当然可以开发出很多东西!
翻了下各各回答,有单片机的,有小游戏的,有说linux内核的,也有各式各样的算法的,当然,这些东西都挺牛逼的,但C开发的玩意,尽管东西牛逼,但可观赏性不强,娱乐效果不够,导致大家对c的看法就是这玩意做不出多少东西
既然如此,那我来给大家表演个绝活儿.
前言

最近不是vtuber很火么,我也想当vtuber怎么办?
好说,打开sai,先简单画个人设试试水呗




现在模型有了,可她不会动啊,不会动怎么能骗粉,这个时候就得上Live2D了,可打开官网





emmmmm

一年800块钱,都够我去三次海底捞了,吃着火锅唱着歌儿不比当vtuber爽多了,要掏钱还当啥vtuber,不行!我琢磨着,翻了翻live2D的教程





再次陷入沉思

然后


动手!

首先,我们先创建一个窗体,拉上一堆控件,作为编辑平台


然后我们把整个模型加载进来


第一步我们需要先建立网格,之前在我其它文章有提到过的,使用C语言编写一个3D软渲染器,不过现在我们只需要图元光栅化那部分代码,这部分代码,复制一下改改就能用,比如zbuffer之类的,就没必要了,直接给它删掉.有了图元渲染,剩下就是建立网格了,这部分可以直接使用点集建立Delaunary三角划分
这样,我们就能通过添加点集来建立网格了


当然,骨骼必不可少,为此,将每个图层设置一个骨骼节点,然后连接这些节点,形成骨骼


最后,进一步编辑每个顶点的弹性系数,形成那种头发弹弹弹的效果


这样,我们就可以通过编辑骨骼来实现那种弹弹弹的头发和耳朵效果了


进一步完善功能,包括了骨骼的基础旋转


伸缩


网格变换


外力施加


纹理切换等功能


最终完成动画效果




当然,上面你所看到的一切,包括编辑器及整个动画框架,都由C语言编写完成
最后,代码及程序,在http://PainterEngine.com的下载中都可以下载到
PainterEngine

每次听到C语言不适合图形开发GUI开发只能黑框框之类的言论,我就想笑

unityloverz 发表于 2021-8-23 16:54

你的感觉是正确的
学会了c,你一个学期下来,还在解数独之类的编程题,离真正工业生产还有距离
如果你从实用角度出发,学c比较不划算,不够经济
不像java,上来就是swing做作业,现在估计都改javafx做作业了
一个学期下来,各种软件做了一大堆
以前国内搞计算机二级,让文科生都去考c语言,从一开始的设计上就是个错误
结果这么多年过去了,国内文科生做出了什么软件?
就记得当年看前沿写得信誓旦旦:我们不仅要让专业人士能写软件,还要让非专业的人士也能写软件,blablabla
结果这么多年过去了,不仅非专业人士什么都没做出来,专业人士都跑去套框架了
技术上还是比较落后的,以前一级是vb,二级是c,建议直接改掉,一级python,二级java和dart
三级kotlin,四级scala,如果用这种方式来教,现在早就各种乱七八糟的小工具往外飞了

JoshWindsor 发表于 2021-8-23 17:03

首先可以肯定的是,c语言可以做一切事情。
纯c写的超级马里奥


世界第一个3d射击游戏doom


那为什么我学完c语言感觉什么也不会呢。

答案是,你学的只是c语言语法,是与平台无关的,不调用图形接口,就没法写windows应用。
不调用操作系统网络接口,就没法写通信程序。不学习linux内核,你就不会用c写linux内核.
不学习硬件平台,就没法开发嵌入式程序.
c语言只是个语言,是你进入计算机世界,和电脑沟通的基础.
试问一下,你学会一门语言,就能了解当地人的习俗和文化,并能和当地人开展生意了吗?
不能!
你总得了解下当地人的习性,文化吧!


你还得学习一系列其他知识,才能真正干活.
你要是想去火星当包工头子,就得再学火星的建筑术语,怎么和火星打工人沟通,火星建筑学!


这个与c的发展历程有关,现在的c多用于底层库开发,而多年前,这个c相当于现在的安卓java,是几乎所有操作系统程序开发的标准语言,现在因为其过使用起来过于繁琐复杂,开发周期长,被java等高阶语言所替代。
学好c语言,就可以进一步学习c++了,c语言就业面比较窄,学好c++,不错的工作还是很多的.如果还有童鞋对于C++学习还有疑问。这里我推荐下开课吧家的课程,里面的课程都很不错,而且质量非常高,对于小白很友好,还能领取项目题库资料,需要的同学点击下方链接,免费听一下他们家的试听课程
目前c语言应用比较多的领域

linux内核工程师高性能服务端基础架构嵌入式设备
已经消失的职业,windows c开发, 游戏开发,dos应用程序开发
举几个用c开发的程序例子。

notepad(记事本)、notepad++、notepad2 (属于win32图形界面开发)pidgin(全平台的聊天软件)(属于linux图形界面开发)apache、nginx, redis这几个服务器软件几乎是所有linux服务器的标配(linux后台开发)linux内核linux下很多常见的命令,比如cat命令(linux环境编程)开源版超级马里奥(jubalh/raymario)(需要图形学前置知识)fps射击游戏先驱doom (id-Software/DOOM)
嵌入式开发,也很常见

嵌入式单片机,广泛存在于洗衣机,空调,微波炉,空气净化器里
下图是一个基于单片机控制的半导体冰箱


有兴趣的可以搜索单片机入门学习一下.
51单片机入门教程(完整版)27集全_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili
如果你想边学边应用,推荐读嗨翻c语言,里面有一些实用小项目
包括
arduino嵌入式开发opencv图像处理网络程序开发
等等,教给你很多其他书没有的实用技能.
如果你已经入门了

你可以考虑读一下,unix环境编程,unix网络编程,Windows c程序设计(不建议,95年的技术了,我初中看过)
unix环境编程能叫你写linux各种常见命令行程序
unix网络环境编程能教你linux后台程序如何设计
学一下arduino,来掌握嵌入式设备的编程方法.
如果要写桌面软件,可以试试linux下的gtk(不建议学),Windows c程序设计(不建议,95年的技术了)
如果你实在想做app,我建议你去学java或者swift,个人更建议swift,相对容易

下面是一些网络上的教程

你可以用c语言写一个简单的http服务器<a href="http://link.zhihu.com/?target=https%3A//github.com/EZLippi/Tinyhttpd" class=" wrap external" target="_blank" rel="nofollow noreferrer">EZLippi/Tinyhttpd如何用c语言写windows程序呢,看这个视频,一周内学会,c语言写windows程序进阶篇,用vc写屏幕保护程序,用VC++6.0编写一个完整的Windows屏幕保护程序进阶,给流行的pidgin聊天软件开发插件,pidgin插件的入门教程
如果你觉得自己学习困难,没有头绪,没人指导,建议找一门在线课程,开课吧一个c++免费的偏实战的课,可以弥补实战不足的问题,对于小白还是很友好的,,还能领取项目题库资料,需要的同学点击下方链接,免费听一下他们家的试听课程

FeastSC 发表于 2021-8-23 17:12

但是我怎么觉得它就是只能做下数学题,我觉得它并不能编辑出一个啥子游戏或者软件出来噢

你可以拿它开发一个 Lisp 解释器然后(被拖走
页: [1] 2 3
查看完整版本: 学会了 C 语言真的可以开发出很多东西吗?