zoukankan      html  css  js  c++  java
  • 抖音做我女朋友程序(.Net5 WPF 源码)

    这串代码很简单。

    加入了一些音效和简单的动画效果。

    .net5的wpf版本跟以前.net framework编码方式没有任何区别。

    简单说一下所用的一些技术吧。

    检测鼠标进入事件

    当鼠标进入放置至【想得美】按钮时,这个按钮进行移动。

    //获取当前可用范围内高宽
    var pH = (int)(panel.ActualHeight - btnNo.ActualHeight);
    var pW = (int)(panel.ActualWidth - btnNo.ActualWidth);
    
    //随机生成坐标
    var y = rd.Next(pH);
    var x = rd.Next(pW);
    
    btnNo.SetValue(Canvas.TopProperty, (double)y);
    btnNo.SetValue(Canvas.LeftProperty, (double)x);

    这样的话,几乎她是不可能点中这个按钮的。不是特完美,也有可能出现,随机位置与原有位置相重叠的情况。

    WPF动画的支持是非常简单的,我便加了个动画上去。

    readonly DoubleAnimation dh = new DoubleAnimation();
    readonly DoubleAnimation dw = new DoubleAnimation();
    
    private void btnNo_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
    {
        //获取当前可用范围内高宽
        var pH = (int)(panel.ActualHeight - btnNo.ActualHeight);
        var pW = (int)(panel.ActualWidth - btnNo.ActualWidth);
    
        //随机生成坐标
        var y = rd.Next(pH);
        var x = rd.Next(pW);
    
        //btnNo.SetValue(Canvas.TopProperty, (double)y);
        //btnNo.SetValue(Canvas.LeftProperty, (double)x);
    
        dh.From = (double)btnNo.GetValue(Canvas.TopProperty);
        dw.From = (double)btnNo.GetValue(Canvas.LeftProperty);
    
        dh.To = y;
        dw.To = x;
    
        btnNo.BeginAnimation(Canvas.LeftProperty, dw);
        btnNo.BeginAnimation(Canvas.TopProperty, dh);
    }

    主要使用的便是 DoubleAnimation 这个类。当前也可以使用Blend绘制,个人觉得Blend会使得xaml代码很乱,便手写了几行。

    .Net程序中资源文件的读取

    点击 【好呀】 后,会有音乐声,所以有资源文件的嵌入。

    using System;
    using System.Reflection;
    using System.Resources;
    
    public class AssemblyResource
    {
        public static byte[] GetAccseeblyPic(Assembly assembly, string imgKey)
        {
    
            string[] names = assembly.GetManifestResourceNames();
            byte[] dataByte = null;
            foreach (string name in names)
            {
                using ResourceReader rr = new ResourceReader(assembly.GetManifestResourceStream(name));
                try
                {
                    rr.GetResourceData(imgKey, out _, out byte[] tmpByte);
                    dataByte = new byte[tmpByte.Length - 4];//去除多余的字节
                    Array.Copy(tmpByte, 4, dataByte, 0, dataByte.Length);
                    break;
                }
                catch
                {
                    continue;
                }
            }
            return dataByte;
        }
    
        /// <summary>
        /// 获取当前程序集中的image
        /// </summary>
        /// <param name="imaKey">图片名字</param>
        public static byte[] GetCurrentAccseeblyData(string imaKey)
        {
            return GetAccseeblyPic(Assembly.GetEntryAssembly(), imaKey);
        }
    }

    上面红色代码部分有知道的原因的吗?可以说说。哈哈,很多年前分析头文件的代码了取资源的代码了,直到今天也没搞懂多出的4个字节是什么鬼。

    本来是想做个单文件程序的,但是通过 dotnet publish -r win-x86 -c Release -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:PublishReadyToRun=true --self-contained true 此命令发布出来的程序(加上-p:IncludeNativeLibrariesForSelfExtract=true)却无法运行,看了一日志,说是运行时错误,就没深入下去了。年纪大了,懒的一逼。

    音乐播放代码

    var bytes = AssemblyResource.GetCurrentAccseeblyData("assests/ok.wav");
    var ms = new MemoryStream(bytes);
    var Audio = new SoundPlayer(ms);
    Audio.Play();

     窗体背景设置

    <Window.Background>
        <ImageBrush ImageSource="/Assests/love.jpg"/>
    </Window.Background>

    差不多了去这里下载源代码吧!或加Q群427121410 找群主

    源码下载:https://download.csdn.net/download/jbltt/16636222

  • 相关阅读:
    编码问题
    Linux环境给文件重命名
    FIFO简记
    图像去模糊
    matlab直方图均衡,使用向量优化
    研究方向
    FPGA学习笔记之格雷码、边沿检测、门控时钟
    [转]关于凸优化的一些简单概念
    SSD果然劲爆!
    Qunie问题
  • 原文地址:https://www.cnblogs.com/jsyb/p/14403955.html
Copyright © 2011-2022 走看看