c#(WPF)實現連連看
其實c#實現簡單的練練看是很簡單的,主要目的就是熟悉一些控制元件和函式吧。首先需要用到的是Grid佈局,因為這是個網格佈局,正好和連連看的佈局一致。至於想設計多大看你自己。在WPF中我們寫控制元件可以利用Xaml和直接用程式碼寫,這就看個人喜好了。但是出於練習,我還是沒有直接拖出控制元件,而是用程式碼寫。
for (i = 0; i < n; i++)
{
RowDefinition row = new RowDefinition();
LLK_Background.RowDefinitions.Add(row);
ColumnDefinition col = new ColumnDefinition();
LLK_Background.ColumnDefinitions.Add(col);
}
這段程式碼是用來設定佈局的,其中RowDefinition是設定行,ColumnDefinition是設定列的,這裡我們要明白一點,可以在Xaml中寫的都是可以在程式碼中new出來的。其中Grid的佈局是大家平分這個網格,橫向的橫向平分,縱向的縱向平分。
然後我們需要學會的就是動態的生成控制元件,因為我們假設連連看是7*7的那麼就要49個Image的控制元件,如果手動的話。。。。。
//動態生成圖片
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
imageName = rand.Next(1, 8);
Image image = new Image();
image.Source = new BitmapImage(new Uri("MyPicture/" + imageName.ToString() + ".bmp", UriKind.Relative));
image.Name = "image" + imageName.ToString();
//image.Stretch = Stretch.Fill;;
Grid.SetRow(image, i);
Grid.SetColumn(image, j);
LLK_Background.Children.Add(image);
image.MouseDown += image_MouseDown;
}
}
其中image.Source的意思是從指定的路徑獲取圖片,注意路徑中式用/來進入檔案的。image.Name是為了後面方便來判斷兩幅圖畫是否相同的輔助變數,不過我們在操縱控制元件的時候一般也是通過名字來進行的。並且注意這個image的設定,右側的字串不能有非數字和字母的字元,否則會報錯,而且最好不要讓數字.ToString()放前面,不然也會報錯,還有裡面呆上image這個字串。(具體錯誤原因我目前也沒弄懂。)注意註釋的那一句,因為我們在載入圖片上去的時候會發現,有一些空白在圖片之前,那是因為Image有個自動對齊功能,會自動調整圖片的大小,讓所有圖片對齊。如果我們不需要這個那麼就可以設定Stretch這個屬性。後面的Grid那兩個函式直接顧名思義就知道了。然後就是吧Iimage這圖片加入到Grid中。最後一句話是給每張圖片新增一個滑鼠點選的事件。這裡我們要注意的是:
在WPF寫的程式碼中加時間就和找屬性一樣,可以直接用打一點(.)來聯想出來,然後按 Tab鍵就可以了自動新增函式了。下面是要隨機新增圖片到網格中。:
Random rand = new Random();
int imageName;
然後在迴圈中配合rand.Next()函式就行,其中Next函式有過載的:
Next(int min,int max);意思是返回的隨機數大於等於min小於max,
Next(); 直接產生隨機數,沒有限制,可以用求餘數來完成上面的功能。
void image_MouseDown(object sender, MouseButtonEventArgs e)
{
//throw new NotImplementedException();
if (count == 0)
{
count++;
Before = ((Image)sender);
}
else
{
count = 0;
string Now = ((Image)sender).Name;
if (Before.Name == Now && Before != (Image)sender)
{
((Image)sender).Visibility = System.Windows.Visibility.Collapsed;
Before.Visibility = System.Windows.Visibility.Collapsed;
}
}
}
這個就是每張圖片的點選事件,實現很簡單,連連看的邏輯就是點選的兩個圖片一樣,那麼久消除就行了,那麼這裡就是一個簡單的判斷是否相等的邏輯就行了。這裡注意sender這個引數,每個事件函式中都有,因為這個引數代表的是控制元件,但是由於不知道是什麼控制元件被點選了,所以用了一個公共的父類Object,這就是多型。
--------------------------------------------------------我是分割線--------------------------------------------------------------
控制元件雜記:
1.常用的控制元件屬性:
1>.Visibility:是否可見,注意這裡不可見選取的是collapse,而不是Hidden。
2>.IsEnable:是否可用
3>.backGround背景顏色的設定,ForeGround前景顏色,比如字的顏色
4>.isReadOnly文字用來只讀的屬性
5>.TextWrapping:(wrap)代表可以滾動
2.c#中不可以為null的值的型別,可以寫成
int? a = null;
DateTime? b = null;
也就是加一個問號就可以,其中有好多控制元件的事件函式中可能會用到這個
3.radioButton分組:
GroupName = “”(組的名字)相同的組成員是一個名字
4.ProgressBar:進度條
Maximum:最大值
Minimum: 最小值
value:當前值
IsInDeterminate:不確定模式,進度條一直顯示在讀條狀態
相關文章
- WPF/C#:實現導航功能C#
- WPF/C#:如何實現拖拉元素C#
- WPF/C#:在WPF中如何實現依賴注入C#依賴注入
- hdu 1175 連連看 搜尋
- 《天天連連看》隱私策略
- 連結串列-單連結串列實現
- Java遊戲開發——連連看Java遊戲開發
- C#解析Markdown文件,實現替換圖片連結操作C#
- dotnet 9 WPF 連字元渲染支援字元
- 《連連看》走過的這些年
- 用c#建立與資料庫的連線 c#連sqlserverC#資料庫SQLServer
- [C#] [WPF] 在MVVM中實現拖拽功能 - 入門C#MVVM
- 【180620】VC++連連看遊戲原始碼C++遊戲原始碼
- FreeRTOS連結串列實現
- 看動畫理解「連結串列」實現LRU快取淘汰演算法動畫快取演算法
- Python實現單連結串列Python
- Python實現MySQL連線池PythonMySql
- js實現複製連結JS
- 實現雙向連結串列
- 緩動公式整理(附:C#實現及WPF原版對比)公式C#
- C#連線資料庫C#資料庫
- C#連線SQLite的字串C#SQLite字串
- Hadoop(五)C#連線HiveHadoopC#Hive
- 程式設計師玩連連看的正確姿勢程式設計師
- TypeScript 實現連結串列反轉TypeScript
- 連結串列找環(python實現)Python
- Netty 實現SSL安全連線(wss://)Netty
- [譯] Go 實現百萬 WebSocket 連線GoWeb
- Go實現雙向連結串列Go
- go 實現單向連結串列Go
- java實現連結串列反轉Java
- java實現雙向連結串列Java
- Laravel 模型實現連帶刪除Laravel模型
- Swoole MySQL 連線池的實現MySql
- 實現一個redis連線池Redis
- 資料庫連線池實現資料庫
- mysql的jdbc連線java實現MySqlJDBCJava
- 修改軟連結實現提權