慢羊羊的空间

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

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

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

一些初学者在面对代码错误的时候,全凭肉眼看。尤其是代码比较长的时候,更是对 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

...

数字拼图游戏 银牌收录

这是一个简易的拼图游戏,一共有 15 个数字方块,将其一行行的排列为 1~15 即可完成。游戏会记录下完成拼图的时间。我想说的是,很多时候,精彩的游戏不一定非要用图片。将游戏的功能和手感都做好,游戏一样好玩。所以我就做了这个拼图游戏当作例子。

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 个练习程序,能独立完成这些程序,再学《数据结构》,会让你有醍醐灌顶的感觉。

游戏素材网站推荐 银牌收录

写游戏的同学辛苦了。

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

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
...