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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM