抖音做我女朋友程序(.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

posted on 2021-02-15 16:44  江小花儿  阅读(559)  评论(0编辑  收藏  举报