慢羊羊的空间

无为,无我,无欲,居下,清虚,自然

万能的排查错误方法:代码删减法

对于一个成熟的程序员来说,不管任何代码错误,没有找不到的错误,只是时间问题罢了。

一些初学者在面对代码错误的时候,全凭肉眼看。尤其是代码比较长的时候,更是对 bug 无从下手。这里推荐初学者一个排查错误的方法:删减法。

所谓删减法,就是逐步删除项目里的无关代码,确保每一步删减之后,故障都存在。删到最后无法再删的时候,通常你就能发现问题在哪了。

下面举个例子,有个同学在写一个画图板项目,执行后画圆时有错误,会产生这样的效果(画的圆有明显的残影):

完整的有 Bug 的源码如下(代码不太成熟,请忽略):

#include <graphics.h>
#include <conio.h>
#include <math.h>


void InitGUI(int color[])
{
	setbkcolor(WHITE);
	cleardevice();
	rectangl
...

解决编译错误:C4996:'GetMouseMsg': This function is deprecated.

问题概述

EasyX 提供了两个头文件:

  • graphics.h
  • easyx.h

easyx.h 包含最新的函数,并且删掉了旧函数。graphics.h 引用了 easyx.h,同时提供了对旧函数的支持。使用 graphics.h 里面提供的旧函数时,会收到一个 Warning C4996,例如使用旧函数 GetMouseMsg,会收到编译提醒:

C4996:'GetMouseMsg': This function is deprecated. Instead, use this new function: getmessage. See https://docs.easyx.cn/getmessage for details.

在过去,Visual&nb

...

编程语言真的没有好坏之分吗?

经常在某些社区看到有人在讨论编程语言的好坏,然后经常会看到有人回复“编程语言没有好坏之分”。可事实上,编程语言真的有好坏之分。

举几个例子吧。

先说 Delphi,这当年可是火遍了全球的东西,其研发公司 Borland 在 DOS 时代开发了神器 Turbo C,以及当年竞赛广泛使用的 Turbo Pascal。Delphi 就是 Pascal 的 Windows 版本。可惜在发展理念上大牛 Anders 未能得到公司的支持,微软挖走,从此 Borland 公司一蹶不振,Delphi 也变得无人问津。当年用 Delphi 开发的项目,都废了。最典型的就是 Dev-Cpp,这是一个使用 Delphi 开发的开源免费的编译器。由于使用 Delphi 的开发人员越来越少,有能力和财力且愿意继续维护 Dev-C++ 的公司并不多。几经转手,目前维护 Dev-C++ 的是从 Bor

...

数字拼图游戏

这是一个简易的拼图游戏。

其实很多时候,精彩的游戏不一定非要用图片。将游戏的功能和手感都做好,游戏一样好玩。

所以我就做了这个拼图游戏当作例子。运行效果如下:

完整的 VC 源代码如下:

/////////////////////////////////////////////////////////
// 程序名称:数字拼图游戏
// 编译环境:Visual C++ 2010,EasyX_20210730
// 作    者:慢羊羊
// 发布日期:2021-3-26
// 最后修改:2021-8-3
//
#include <graphics.h>
#include <time.h>
#include <conio.h>


IMAGE	g_Block[16];		// 拼图碎片
byte	g_Map[4][4];		// 游戏地图(存储了每个碎片的下标)
byte	g_E
...

C 语言天罡三十六题 - 封神九题(2021-5-29)

该系列共分四篇:

  • 基础九题 https://codebus.cn/yangw/36-tasks-g1
  • 进阶九题 https://codebus.cn/yangw/36-tasks-g2
  • 精英九题 https://codebus.cn/yangw/36-tasks-g3
  • 封神九题 https://codebus.cn/yangw/36-tasks-g4 (本篇)

相关说明请参考基础九题。

封神篇说明

与前三篇不同,封神九题当中,可以挑选三道题重点做,毕竟大学的时间有限。在半学期内利用课余时间做完前面 27 题,然后接下来的寒暑假时间做封神篇。

前三篇都是短小的练习,而封神篇的每道题,请以对待大作业的态度来完成。

封神篇每道题的衡量标准有两点:1. 代码量,2. 别人玩的时间。

如果代码量小于 3000 行,请自行增加功能。例如推箱子游戏,推箱子

...

C 语言天罡三十六题 - 精英九题(2021-5-29)

该系列共分四篇:

  • 基础九题 https://codebus.cn/yangw/36-tasks-g1
  • 进阶九题 https://codebus.cn/yangw/36-tasks-g2
  • 精英九题 https://codebus.cn/yangw/36-tasks-g3 (本篇)
  • 封神九题 https://codebus.cn/yangw/36-tasks-g4

相关说明请参考基础九题。

精英九题

19. 天空星

任务:不可思议的图案(二)。

求以下迭代公式的图像:

// x’ = a * x + b * y + e
// y’ = c * x + d * y + f
// p = 概率
// x、y 值范围:0 ~ 1
double a[5] = { 0.35173,  0.3
...

C 语言天罡三十六题 - 进阶九题(2021-5-27)

该系列共分四篇:

  • 基础九题 https://codebus.cn/yangw/36-tasks-g1
  • 进阶九题 https://codebus.cn/yangw/36-tasks-g2 (本篇)
  • 精英九题 https://codebus.cn/yangw/36-tasks-g3
  • 封神九题 https://codebus.cn/yangw/36-tasks-g4

相关说明请参考基础九题。

进阶九题

10. 天贵星

任务:模拟 45 度反弹的 10 个小球。

在屏幕里画一个大矩形。

在矩形内的随机位置生成 10 个小球,每个小球都沿着某个 45 度方向匀速前进,碰到矩形边框后做 45 度反弹,反弹后速度不减,再次碰撞后再次反弹,如此往复循环。模拟这个动画过程。

11. 天富星

...

C 语言天罡三十六题 - 基础九题(2021-4-10)

许多同学在学完 C 语言之后,感觉会比较迷茫,不知道该怎样进行下一步练习。接着学《数据结构》像听天书一样,无论怎么努力都学不通透。这都是因为缺少足够的练习所致。本文总结出有限的 36 个练习程序,能独立完成这些程序,再学《数据结构》,会让你有醍醐灌顶的感觉。

这些题目的难度是递增的。如果觉得前面的题目比较简单,可以直接跳过。练习的目标,是可以独立写出代码量超过 2000 行的项目。在这个基础上,再学习数据结构、面向对象等进阶内容,才能真正理解其意义。

很遗憾,天罡36题没有标准答案。每个题目都可以根据自己的理解来完成,完成后可以和其他人交换代码相互学习,以期提高。

这 36 个练习程序我会根据大家的反馈逐步完善,标题中的日期就是当前文档的最后更新日期,希望大家根据最新版本练习。

题目分为四组:

  • 基础九题 https://codebus.cn/yangw/36-tasks-g1 (本篇)
  • 进阶九题&nb
...

关于 EasyX 的各种教程、实体书籍等学习资源推荐

每个人的学习方式不同,有些同学喜欢看帮助文档学习,有些同学喜欢看书籍教程学习,还有些学生喜欢阅读别人的源代码学习。以下收录了关于 EasyX 的各种学习资源,如果有更好的学习资源推荐,请到 C 语言革命 QQ 群 私信群主,然后我把大家的推荐汇总起来整理到这里。

喜欢阅读帮助文档的同学,看这里: https://docs.easyx.cn

喜欢阅读源代码的同学,看这里: https://codebus.cn

喜欢看在线教程的同学,看这里:https://codeabc.cn/bestans/a/concise-lesson-0

喜欢看实例教程的同学,推荐看童晶老师的知乎号,里面有非常多的游戏实例教程:https://www.zhihu.com/people/tongjingHHU

喜欢看纸质书籍的同学,推荐看童晶老师的书《C语言课程设计与游戏开发实践教程》,各大高校的图书馆应该都可以找到,淘宝也有许多店家在卖。

...

游戏素材网站推荐

写游戏的同学辛苦了。

这里推荐几个免费的游戏素材网站。欢迎推荐更多的素材网站,直接留言给我,我加到这个列表里面。

1. The Spriters Resource

地址:https://www.spriters-resource.com,https://www.sounds-resource.com

介绍:非常丰富齐全的游戏素材网站,并且按照游戏主机分类,包括 NES、PS、GBA 等各大游戏平台的游戏,素材基本都是抠好图的 PNG 格式,非常好用。想做高仿游戏的同学不要错过。

还有 3D 模型、贴图、音效等素材。就是国外网站,访问速度有点慢。

2. Open Game Art

地址:https://opengameart.org

介绍:很全很好用的游戏资源网站,就是国外网站的访问速度有点慢。

3. 爱给网

地址:http://www.aigei.com

...

开学新装备 - 学生党是否该入手 MacBook?

学生党是否该入手 macbook 这个问题,相信许多人在许多社区都有看到过类似讨论。只不过,许多讨论都掺杂了信仰、智商税、不懂、不熟悉未来需求等各种因素,导致内容空洞价值不大。这篇文章,抛开了所有非理性因素,详细的告诉你该如何选择。

便携性

有人说,喜欢 macbook 就是喜欢那种轻薄的感觉。

现在来看看真实数据:

屏幕大小 外观尺寸 重量
苹果 MacBook Pro 2020 13 寸
...

创建一个不受系统缩放设置(DPI)影响的绘图窗口

现在的屏幕分辨率都比较高,为了使屏幕字体不至于太小,通常在 Win10 的显示设置里面设为放大 125% 或 150% 或更大,这样就会导致像素实际上被放大了。

如果你的程序不希望受系统缩放设置影响,你需要使用一个新的 API 函数:SetProcessDpiAwareness

注意这个 API 函数的使用条件:

  • Win8.1 及以上版本
  • 头文件 ShellScalingApi.h
  • 库文件 Shcore.lib

以下是一个完整的范例程序,该范例创建一个不受系统缩放设置影响的绘图窗口,并画一个圆:

// 编译环境:Win10 + VS2019 + EasyX_20200727
//

// 设定操作系统版本为 Win10(需要放到 #include <graphics.h> 前面)
#define WINVER 0
...

不用创建项目,直接在 VS 里快速测试 C/C++ 代码

概述

Visual Studio 强大、方便,但是每次写代码都要先创建新项目,这对于一些简单的代码测试来说有点不方便。

本文介绍一种使用 VS 快速测试代码的方法。

该方法适用任何版本的 VS。“不用创建项目”,是指不用“手工”创建项目,而是通过批处理命令,自动完成相关功能,实现双击图标后就进入代码编写环境。

准备工作

先按照如下步骤进行准备(请根据实际情况调整路径):

1. 建立文件夹 D:\TestCpp\,里面存放用来快速测试代码的项目。

2. 打开 Visual Studio,创建一个 Win32 Console Application 项目作为模版,项目路径 D:\TestCpp\Template\TestCon,其它设置根据自己的习惯来。然后添加代码文件 main.cpp:

#include
...

大学生购买电脑推荐贴

本文给准备购买新电脑的同学参考。

有任何好的型号推荐,请到“C语言革命”QQ 群联系群主,说一下推荐的型号和理由,然后我补充到这篇文章里面。

每种笔记本都有自己的定位,不存在超轻+超薄+性能超强+超便宜的笔记本。

一、先聊聊基础配置

后面推荐的通常是系列,并没有推荐具体的配置。该选哪个配置,这里先统一说说。而且,不管你是什么专业,选购什么品牌的电脑,以及品牌型号是否在下面列表中,都先了解下这几点问题:

1. 价位

对于大学生来说,笔记本价位考虑在 ¥3500~¥5500 这个范围内就好。

更贵的价格肯定更好,但是,好的非常有限。

也不要说学绘图相关专业需要好显卡,更不要说开发游戏需要好显卡。这个价位的笔记本,性能已经比几年前的好许多了,几年前照样有好作品出现。当然,你要是真有能力开发 3A 游戏大作,我相信你不会来看这个推荐贴。

2. 大小

...

详细解释为什么写程序要用 Unicode 字符集

微软在 VC6.0 的时候,创建项目的默认字符集是 MBCS。从 VC2002(就是 VC7.0)开始,默认字符集就变为了 Unicode,直到今天。

本文就讲解编程中 Unicode 与 MBCS 字符集的区别,即 wchar_t 和 char 字符(串)的区别。

通过示例看区别

注:

  1. 实验环境 Windows 7 + VC2010 Express + EasyX_20200109(beta)。(在 Win10 下可以得到同样的结果)
  2. VC2010 Express 设置项目字符集的方法:在 Solution Explorer 右击项目 -> Properties,打开的属性窗口中,左侧选择 Configuration Properties / General 分类,右边将 Character Set 设置为 Use Unicode Character Set 即表示将项目设置
...