庆中秋:用Windows XP桌面图标玩贪吃蛇(原理)

简介: 到处都有好玩的玩意儿 计算机的世界里离散的:内存从 0 -> 2n 编号;整个屏幕的画面也是由许多颗像素点组成……如果你不介意的话,把脸尽量地贴近显示器(或者电视屏幕),你会看到整个屏幕是由一颗颗显示不同颜色的小颗粒拼成的。如果这样感受还不深,那你还记得小时候玩过的最初型掌上游戏机吗?如下图: 其中经典的飞机、坦克、俄罗斯方块等都是由一个个正方形的黑色方块拼成的。 放眼周边的

到处都有好玩的玩意儿

计算机的世界里离散的:内存从 0 -> 2n 编号;整个屏幕的画面也是由许多颗像素点组成……如果你不介意的话,把脸尽量地贴近显示器(或者电视屏幕),你会看到整个屏幕是由一颗颗显示不同颜色的小颗粒拼成的。如果这样感受还不深,那你还记得小时候玩过的最初型掌上游戏机吗?如下图:

其中经典的飞机、坦克、俄罗斯方块等都是由一个个正方形的黑色方块拼成的。

放眼周边的世界,到处都有这样规则排列的、方方正正的“游戏元素”:摩天大楼的窗户、大教堂的座位、从楼上往下看的人群、Excel 的表格……当然还有今天要介绍的桌面图标!在优库上一搜索就会出现很多结果,有用寝室楼电灯玩贪吃蛇的、也有军训时集体玩 AK47 阵列的等等,原理都是这样~

在看完这篇文章后,你也可以尝试照样画葫芦,比如开启很多个“记事本”,将他们的窗口调整成四四方方的,然后用它们玩俄罗斯方块。^_^

程序原理

我在优库上发布了视频——用Windows XP桌面图标玩贪吃蛇(视频地址为 http://v.youku.com/v_show/id_XMTIyODk2Njky.html),一些朋友在评论中猜测程序原理:有人说是用批处理,还有人说是用汇编,甚至有人直接否定说是我用静态帧拼接起来的,呵呵。其实没大家想的这么复杂,我的程序主要是用 VB 开发的(为方便以后使用,移动桌面图标的代码用 C 语言写,并打包成 DLL 文件。程序的核心语句就是下面这句话:

SendMessage ( hwnd, LVM_SETITEMPOSITION, i, MAKELPARAM(x,y) );

SendMessage 是系统调用,可以向指定的窗口发送消息。整条语句的作用是向桌面发送消息,请求将第“i”个图标移动到坐标“x,y”位置。下面按照视频里播放的顺序依次介绍原理:

一、创建文件

在视频的最开始,我开启了一个命令提示符执行一条命令。可能正是因为这个原因让大家误以为这个程序是用批处理写的。如果你看了我上次的高清AVI版视频,就知道我命令是:“for /l %d in (1,1,16) do echo. >%d.txt”。正如网友“Sypeace”在评论了说的,这条命令的作用就是在桌面创建十六个文本文档来作为贪吃蛇的身体。只要你不怕麻烦当然可以通过右键新建文本文档然后重命名,这只是我的个人习惯,呵呵。

二、启动游戏

文件创建好了,我双击桌面那个蛇形的图标,就是本程序“桌面贪吃蛇”启动游戏。这时候桌面只剩下三个图标,有两个在左下角,代表贪吃蛇;另一个随机出现,就是食物;其他图标都被移出屏幕,具体坐标为(0, -100),只有当食物被吃掉后下一个才出现。

眼尖的朋友可能发现了屏幕的右上角有个白色小框,其实这就是本程序的界面,里面显示了剩余食物的个数。当然这里还包含了另一个秘密,在下一节揭晓!

三、控制方向

贪吃蛇每隔 200 毫秒前进一格,期间还得接受键盘的方向输入。如果你用 C 语言从零开始实现,这固然可行但很繁琐。在 VB 中不用考虑这么多,把贪吃蛇移动的代码加到一个定时器里即可(这也是我选用 VB 的原因);然后监听窗口 Form 的键盘输入,改变贪吃蛇的前进方向。

也许你发现了,其实键盘输入应该用系统钩子来捕获更合理,这样即使焦点离开了主程序也依然可用。这正是此程序现在最大的缺点,如果你不小心在运行的时候将鼠标点了一下桌面,焦点离开了主程序,就会发现贪吃蛇不再受控制。这一切都因为1. 我怕麻烦,2. 想快速开发。但也许你可以来帮我完善它!

四、老板来了

这是个无伤大雅的玩笑。视频播放到最后,你会看到桌面背景变成一个警告:“危险,危险!!老板来了!!”。然后我按键盘上的“Q”退出游戏后背景恢复。刷新一下,图标排列整齐。这样桌面就恢复原样,也许老板不晓得你摆弄桌面图标是在玩游戏^_^

初衷

最近很流行说“寂寞”,身边的同学也动不动就冒出一句“哥读的不是书,是寂寞”,很烎很囧哈 ^_^。其实,身为光棍的我情感并没大家想的那么丰富,就像我之前在迷你博客里说的“为什么写这些小玩意儿?Because we can~”。

关于源码

本程序的源码是开发的,欢迎你参与完善。有朋友反映没找到源码,因为我只给了我 Google Sites 的主页地址。是我说的不够详细,这个程序在“天晴”版块,顺便介绍一下“天晴”这个版块放的都是和游戏相关的程序。该程序的链接地址是:http://sites.google.com/site/redraiment/sunshine/snake/。进入后下载 Snake_with_src.zip 这个文件就可以了。

CSDN上的下载地址为:http://download.csdn.net/source/1717320

后记

玩游戏时有一些注意事项,原本已经写在软件说明里(请参看CSDN下载页码里的软件说明),但没有在文章中做以说明。网友“斗士”指出,这在他自己实现的过程中造成很大不便。故将注意事项列于此处:

  1. 玩游戏前要先将桌面的“自动排列”和“对齐到网格”选项去掉(在桌面右击鼠标,“查看”-“自动排列/对齐到网格”)。否则图标将无法正常移动;
  2. 如果你是 Vista 用户,请将桌面图标大小设置成经典图标;
  3. 该程序只在 XP 和 Vista 下测试通过,目前还不能在 Win 7 下正常运行。
  4. 运行过程中按“Q”或者“Esc”键即可退出。或者游戏结束自动退出。

感想网友“斗士”纠正,并提供他开发的VC版源码。VC版源码已经上传到CSDN下载站,地址为:http://download.csdn.net/source/1927953


版权声明

请尊重原创作品。转载请保持文章完整性,并以超链接形式注明原始作者“redraiment”和主站点地址,方便其他朋友提问和指正。

联系方式

我的邮箱,欢迎来信(redraiment@gmail.com
我的Blogger(子清行):http://redraiment.blogspot.com/
我的Google Sites(子清行):https://sites.google.com/site/redraiment
我的CSDN博客(梦婷轩):http://blog.csdn.net/redraiment
我的百度空间(梦婷轩):http://hi.baidu.com/redraiment

目录
相关文章
|
11天前
如何隐藏windows10系统任务栏右下角的语言输入法图标?
如何隐藏windows10系统任务栏右下角的语言输入法图标?
|
1月前
|
数据安全/隐私保护 虚拟化 Windows
如何在 VM 虚拟机中安装 Windows XP 操作系统保姆级教程(附链接)
如何在 VM 虚拟机中安装 Windows XP 操作系统保姆级教程(附链接)
109 0
|
6月前
|
自然语言处理 文字识别 语音技术
VMWare 安装英文版 Windows XP 后遇到中文乱码问题的解决方法
VMWare 安装英文版 Windows XP 后遇到中文乱码问题的解决方法
66 0
VMWare 安装英文版 Windows XP 后遇到中文乱码问题的解决方法
|
7月前
|
区块链 Windows
如何修改 Windows10 操作系统里某种文件类型的默认图标
如何修改 Windows10 操作系统里某种文件类型的默认图标
142 0
如何修改 Windows10 操作系统里某种文件类型的默认图标
|
7月前
|
人工智能 搜索推荐 C#
C#开源且免费的Windows桌面快速预览神器 - QuickLook
C#开源且免费的Windows桌面快速预览神器 - QuickLook
159 0
|
3月前
|
API Python Windows
python3应用windows api对后台程序窗口及桌面截图并保存的方法
python3应用windows api对后台程序窗口及桌面截图并保存的方法
89 1
|
6月前
|
数据可视化 uml Docker
在本地Windows 11 系统的桌面版Docker上搭建PlantUML
在本地Windows 11 系统的桌面版Docker上搭建PlantUML
74 0
|
4月前
|
网络协议 安全 Linux
无公网IP环境Windows系统使用VNC远程连接Deepin桌面
无公网IP环境Windows系统使用VNC远程连接Deepin桌面
|
5月前
|
监控 C# Windows
内网桌面监控软件中的远程控制功能实现(基于C#和Windows Forms)
近年来,随着远程办公的兴起,对内网桌面监控软件的需求逐渐增加。本文将探讨如何通过C#和Windows Forms实现内网桌面监控软件中的远程控制功能,并在结尾部分介绍监控到的数据如何自动提交到网站。
279 0
|
5月前
|
Windows 存储 Cloud Native
C++Qt windows系统托盘增加图标和功能
C++Qt windows系统托盘增加图标和功能