這串代碼很簡單。
加入了一些音效和簡單的動畫效果。
.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