这次,又是一个全新的小玩意。就是把windows桌面上的图标,让他们整齐划一,变成贪吃蛇小游戏(没错,我就是和贪吃蛇杠上了)。
这个游戏,可以称之为“没有界面的贪吃蛇”。下面放上效果图。
下面介绍详细过程。
0.准备工作
- 系统:Win10
- 开发工具:Visual Studio2019
- 语言:C#
1.关键点
- 如何生成食物(动态创建桌面图标)
- 如何移动蛇身体和食物(移动桌面图标到指定位置)
创建桌面图标用到了接口IWshShortcut,具体代码如下
public void _createShortcut()
{
//选择随机图标
var rnd = new Random().Next(0, ICONS.Length);
var LinkPathName = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
var IconPath = ICONS[rnd];
var guid = Guid.NewGuid().ToString();
//获取图标名字
var name = ICONNAMES[rnd];
WshShell shell = new WshShell();
IWshShortcut link = (IWshShortcut)shell.CreateShortcut($"{LinkPathName}/{name+guid}.lnk");
link.IconLocation = IconPath;
link.TargetPath = IconPath;
link.Save();
}
而移动桌面图标则用到了WindowsAPI中的函数,代码如下
[DllImport("User32.dll", EntryPoint = "SendMessage")]
public static extern int SendMessage(int hWnd, int Msg, int wParam, int lParam);
private void _movdDeskTopIons(int i, int x, int y)
{
WindowsAPIs.SendMessage((int)_shortCut, (int)LVM_SETITEMPOSITION, i, (int)WindowsAPIs.MakeLParam(x, y));
}
解决了这两个问题,还存在一个隐藏的问题,即通过IWshShortcut创建的图标,在一定的时间之后或创建第二个图标之后,这个图标才能被移动。所以你会发现桌面左上角有一个多余的图标,那就是先将图标创建好放在左上角,当游戏需要食物时,才将该图标移动到随机位置,同时再创建一个备用图标放在左上角。
解决了这个问题,再加上贪吃蛇的基础游戏规则代码,这个游戏就可以完整独立流畅地运行了。
2.代码片段
下面贴出一些关键类代码,有需要完整工程文件或游戏执行文件的小伙伴可以私信我。
WindowsAPI类
public class WindowsAPIs
{
const int WM_MOUSEWHEEL = 0x020A; //鼠标滚轮
const int WM_LBUTTONDOWN = 0x0201;//鼠标左键
const int WM_LBUTTONUP = 0x0202;
const int WM_KEYDOWN = 0x0100;//模拟按键
const int WM_KEYUP = 0x0101;