在Windows上将桌面图标做成贪吃蛇游戏

这次,又是一个全新的小玩意。就是把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;
    
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值