# Angrybirds **Repository Path**: startfromC/angrybirds ## Basic Information - **Project Name**: Angrybirds - **Description**: 大一下学期的C语言程序课设。老师要求使用easyX实现贴图和动画,要求在程序里使用链表。除此之外,只能使用C语言语法。 - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2022-12-28 - **Last Updated**: 2024-03-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: C语言, EasyX, 愤怒的小鸟 ## README # Angrybirds ## 1写在前面 如果你进入这个文件夹,我想你很有可能是一个正在为C语言课设而烦恼的同学。我也非常荣幸能给你提供一些帮助。这个课设的详细要求已经在课设当中介绍了,演示视频我也已经上传到B站了[(演示视频点这里)](https://www.bilibili.com/video/BV1me4y1K7hd/?share_source=copy_web&vd_source=3a768eda8c0a2c2214c94b724b6219f7)。我在这里再从大三学生的视角补充一点点内容。 ## 2这份代码在规范上的不足 当时大一完成这个程序的时候,真的觉得自己很厉害,但是现在过了两年,站在大三的角度再回头看,其实还是有很多的不足。 ### 2.1只有一个源文件 因为当时刚学完C语言,这个课设对我们的要求并不严格,所以很多对工程设计上的规范都没有要求,但我现在觉得应该尽量将这个程序里的函数拿出来另做文件,然后把这些文件包含在头文件当中。这样的话后期对代码的维护会比较方便(也许这样,我就会想着时不时来改进一下这个程序了吧?因为一打开,发现各种函数密密麻麻叠在一起,实在是让我难以下手) ### 2.2依赖全局变量 同样是因为是beginners,老师对我们的要求并不高,所以为了方便,我们在做这个课设的时候很依赖全局变量,因为这样就不用考虑作用域的问题,变量就可以“哪里需要哪里搬”,真的是非常方便。但是这种习惯在实际的工程设计其实不太好。一方面是消耗空间,再一个是不容易维护,因为各种函数都依赖某个全局变量,这样会使得在修改代码的时候“牵一发而动全身” 当时老师也为我们介绍了,一个比较好的工程代码,设计原则应该是 **“高内聚,低耦合”** ,也就是在模块内部的变量彼此依赖程度高,而模块之间的变量依赖程度低。像我这个代码一样,各种函数都可能使用同一个全局变量,肯定是不符合这个原则的。 ### 2.3逻辑上未封装的函数 即使是到了大三,我还是记得我在写这份代码中的好几个函数时,心里就默默地想“这个函数几乎是专供为XXX函数用的”。虽然有些夸张,但是这份代码中的好几个函数的可重用性确实很差,几乎只能实现非常具体的功能。虽然形式上是另一个函数,但是在内部逻辑上和主调函数紧密结合,几乎不能被其他函数使用,这也就是我说“逻辑上未封装的函数”的意思。不过因为当时只需要实现“愤怒的小鸟”这一个具体项目,所以这个问题没有造成太大影响。但是还是希望你在做你的课设时可以再细致一点。 ## 3一些想要提醒的 如果你和我一样,C语言课设是做一个游戏,那么请注意你的main函数应该和我这份文件中的main函数相同或者基本相同,因为几乎所有的游戏从顶层上说都是循环体,循环执行“显示”、“无输入更新数据”“有输入更新数据”这几个操作,千万不要按照“希望呈现出的画面顺序”这种思路安排流程。这是有同学在B站后台问我问题的时候我发现的,这种思路很容易想到,但是却非常糟糕,因为在这种思路下,只要用户不退出,那么这个程序就有无限长。这当然是不合理的。在你开始写程序之前,这一点应该首先要明确。 ## 4还有一些想说的 对我来说,计算机专业的学习有时是很枯燥的(我想任何专业应该都是这样的),但是当学习逐渐走进深处,似乎一切都会变得鲜活起来。 我是在上大学时才有了自己的第一台电脑,才在人生中第一次接触编程。和班级当中的一些人相比,我确实没有任何基础,而且刚开始的时候我确实觉得编程很无聊—,各种各样的语法和底层逻辑有时真的很难记住或者弄明白,一些很基础的问题总是要思考大半天。 但是随着自己越学越多,码的代码也越来越多,我也开始逐渐迷上了这种一边琢磨解决问题的流程、一边转换为编程语言的过程。我不知道究竟是什么吸引了我,也许是“解决问题和实现功能”的结果让我觉得编程很有用,也许是思考解决问题的巧妙方式的过程让我觉得很有挑战性,又或者只是“创造”这件事本身就是一个让人兴奋的事情。 但不论如何,我想我也已经走在了一条不能回头的路上了。 如果问我有什么建议可以给计算机的初学者的话,我想就是:多码代码。对于计算机专业的同学来说,就是要非常认真对待每一次的课程设计。这也是我对自己的祝福和勉励。