c#WPF 扫雷游戏
生活随笔
收集整理的這篇文章主要介紹了
c#WPF 扫雷游戏
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
C#WPF版的簡易掃雷
僅供參考,技術有限.
先看看圖:
代碼如下:
xaml的代碼
<Window x:Class="掃雷.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:掃雷"mc:Ignorable="d"Title="掃雷" Height="800" Width="800" Icon="img/logo.ico" WindowStartupLocation="CenterScreen" Loaded="Window_Loaded"><Grid><Grid.RowDefinitions><RowDefinition Height="30"></RowDefinition><RowDefinition Height="100"></RowDefinition><RowDefinition></RowDefinition></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition Width="65"></ColumnDefinition><ColumnDefinition></ColumnDefinition><ColumnDefinition Width="65"></ColumnDefinition></Grid.ColumnDefinitions><Menu Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3"><MenuItem Width="60" Height="30" HorizontalContentAlignment="Center" VerticalContentAlignment="Center"><MenuItem.Icon><Image Source="img/Sysico.ico" Margin="0"></Image></MenuItem.Icon><MenuItem.Header><Label Content="菜單" Margin="-10,0,0,0"></Label></MenuItem.Header><MenuItem Header="等級" Margin="0,0,-3.6,0" HorizontalAlignment="Left" Width="110"><MenuItem.Icon><Image Source="img/CustomerOrder.ico"></Image></MenuItem.Icon><MenuItem Header="初級" Click="MenuItem_Click_1" Margin="0,0,0,0"></MenuItem><MenuItem Header="中級" Click="MenuItem_Click_2"></MenuItem><MenuItem Header="高級" Click="MenuItem_Click_3"></MenuItem></MenuItem><MenuItem Header="設置" Margin="0,0,-40,0"><MenuItem.Icon><Image Source="img/mrp.ico"></Image></MenuItem.Icon></MenuItem><MenuItem Header="退出" Margin="0,0,-40,0" Click="MenuItem_Click"><MenuItem.Icon><Image Source="img/exit.ico"></Image></MenuItem.Icon></MenuItem></MenuItem></Menu><Border Grid.Row="1" Grid.Column="0" Grid.RowSpan="2" Grid.ColumnSpan="3"><Border.Background><ImageBrush ImageSource="img/bg.jpg" Stretch="Fill"></ImageBrush></Border.Background></Border><Grid x:Name="GameBG" Grid.Row="2" Grid.Column="1" Margin="35,35,35,35"><Grid.Background><ImageBrush ImageSource="img/main.png"></ImageBrush></Grid.Background></Grid><StackPanel Grid.Row="1" Grid.Column="1"><StackPanel.Background><ImageBrush ImageSource="img/menu2.png"></ImageBrush></StackPanel.Background></StackPanel></Grid> </Window>?
?
XAML.CS的代碼如下
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes;namespace 掃雷 {/// <summary>/// MainWindow.xaml 的交互邏輯/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}int rows = 10;//一行十個int[,] mines;//裝地雷Image[,] images;//裝圖片bool[,] overList;int mineCount = 10;//設置他的總格子private void Window_Loaded(object sender, RoutedEventArgs e){InitialGame(rows);}Random r = new Random();private void InitialGame(int rows){for (int i = 0; i < rows; i++){RowDefinition row = new RowDefinition();GameBG.RowDefinitions.Add(row);ColumnDefinition column = new ColumnDefinition();GameBG.ColumnDefinitions.Add(column);}GameBG.ShowGridLines = true;mines = new int[rows, rows];images = new Image[rows, rows];overList = new bool[rows, rows];//二維數組中每個元素默認值是0,如果是0則證明沒有雷,如果是1則證明有雷//初始化雷for (int i = 0; i < mineCount; i++){int row = r.Next(0, mines.GetLength(0));int colmun = r.Next(0, mines.GetLength(1));if (mines[row, colmun] == 1){i--;}else{mines[row, colmun] = 1;}}//初始情況下所有的Image全部裝zhuanfor (int i = 0; i < images.GetLength(0); i++){for (int j = 0; j < images.GetLength(1); j++){images[i, j] = new Image();images[i, j].Source = new BitmapImage(new Uri("img/zhuan.gif", UriKind.Relative));images[i, j].Margin = new Thickness(2, 2, 2, 2);Grid.SetRow(images[i, j], i);Grid.SetColumn(images[i, j], j);images[i, j].Tag = new int[2] { i, j };GameBG.Children.Add(images[i, j]);images[i, j].MouseLeftButtonDown += Img_MouseLeftButtonDown;images[i, j].MouseRightButtonDown += Img_MouseRightButtonDown;}}}private void Img_MouseRightButtonDown(object sender, MouseButtonEventArgs e){Image img = sender as Image;img.Source = new BitmapImage(new Uri("img/qizi.gif", UriKind.Relative));}private void Img_MouseLeftButtonDown(object sender, MouseButtonEventArgs e){Image img = sender as Image;int[] index = img.Tag as int[];//點擊的這個是一個安全地區if (!IsMine(index[0], index[1])){//假設當前這個是i,j,則需要考慮周圍的(i-1,j),(i-1,j-1),(i,j-1),(i+1,j-1),(i+1,j),(i+1,j+1),(i,j+1),(i-1,j+1)CountMine(index[0], index[1], img);int left = 0;for (int i = 0; i < overList.GetLength(0); i++){for (int j = 0; j < overList.GetLength(1); j++){if (overList[i, j] == false){left++;}}}if (left == mineCount){MessageBoxResult win = MessageBox.Show("恭喜,YOU WIN", "重新開始", MessageBoxButton.OKCancel, MessageBoxImage.Question);if (win==MessageBoxResult.OK){GameBG.Children.Clear();GameBG.RowDefinitions.Clear();GameBG.ColumnDefinitions.Clear();rows++;mineCount++;InitialGame(rows);}//MessageBox.Show("獲勝");}}else{for (int i = 0; i < mines.GetLength(0); i++){for (int j = 0; j < mines.GetLength(1); j++){if (mines[i, j] == 1){images[i, j].Source = new BitmapImage(new Uri("img/hl.gif", UriKind.Relative));}}}MessageBoxResult re = MessageBox.Show("踩中地雷,你輸了","Gameover" ,MessageBoxButton.OKCancel,MessageBoxImage.Question);//MessageBox.Show("踩到地雷 你輸了!");if (re==MessageBoxResult.OK){GameBG.Children.Clear();GameBG.RowDefinitions.Clear();GameBG.ColumnDefinitions.Clear();InitialGame(rows);}else{this.Close();}}}bool IsMine(int i, int j){if (i < 0 || j < 0 || i >= mines.GetLength(0) || j >= mines.GetLength(1)){return false;}else{if (mines[i, j] == 1){return true;}else{return false;}}}void CountMine(int i, int j, Image img){if (overList[i, j] == true){return;}overList[i, j] = true;int count = 0;if (IsMine(i - 1, j)){count++;}if (IsMine(i - 1, j - 1)){count++;}if (IsMine(i, j - 1)){count++;}if (IsMine(i + 1, j - 1)){count++;}if (IsMine(i + 1, j)){count++;}if (IsMine(i + 1, j + 1)){count++;}if (IsMine(i, j + 1)){count++;}if (IsMine(i - 1, j + 1)){count++;}if (count == 0){GameBG.Children.Remove(img);if (i > 0){CountMine(i - 1, j, images[i - 1, j]);}if (j > 0){CountMine(i, j - 1, images[i, j - 1]);}if (i > 0 && j > 0){CountMine(i - 1, j - 1, images[i - 1, j - 1]);}if (i < mines.GetLength(0) - 1){CountMine(i + 1, j, images[i + 1, j]);}if (j < mines.GetLength(1) - 1){CountMine(i, j + 1, images[i, j + 1]);}if (i > 0 && j < mines.GetLength(1) - 1){CountMine(i - 1, j + 1, images[i - 1, j + 1]);}if (i < mines.GetLength(0) - 1 && j < mines.GetLength(1) - 1){CountMine(i + 1, j + 1, images[i + 1, j + 1]);}if (i < mines.GetLength(0) - 1 && j > 0){CountMine(i + 1, j - 1, images[i + 1, j - 1]);}}else{GameBG.Children.Remove(img);Label lb = new Label();lb.Content = count.ToString();Grid.SetColumn(lb, j);Grid.SetRow(lb, i);lb.FontSize = 15;lb.HorizontalContentAlignment = HorizontalAlignment.Center;lb.VerticalContentAlignment = VerticalAlignment.Center;GameBG.Children.Add(lb);}}private void MenuItem_Click(object sender, RoutedEventArgs e){this.Close();}private void MenuItem_Click_1(object sender, RoutedEventArgs e){rows = 10;mineCount = 10;for (int i = 0; i < rows; i++){RowDefinition row = new RowDefinition();GameBG.RowDefinitions.Add(row);ColumnDefinition column = new ColumnDefinition();GameBG.ColumnDefinitions.Add(column);}GameBG.Children.Clear();GameBG.RowDefinitions.Clear();GameBG.ColumnDefinitions.Clear();InitialGame(rows);GameBG.ShowGridLines = true;}private void MenuItem_Click_2(object sender, RoutedEventArgs e){rows = 15;mineCount = 18;for (int i = 0; i < rows; i++){RowDefinition row = new RowDefinition();GameBG.RowDefinitions.Add(row);ColumnDefinition column = new ColumnDefinition();GameBG.ColumnDefinitions.Add(column);}GameBG.Children.Clear();GameBG.RowDefinitions.Clear();GameBG.ColumnDefinitions.Clear();InitialGame(rows);GameBG.ShowGridLines = true;}private void MenuItem_Click_3(object sender, RoutedEventArgs e){rows = 20;mineCount = 25;for (int i = 0; i < rows; i++){RowDefinition row = new RowDefinition();GameBG.RowDefinitions.Add(row);ColumnDefinition column = new ColumnDefinition();GameBG.ColumnDefinitions.Add(column);}GameBG.Children.Clear();GameBG.RowDefinitions.Clear();GameBG.ColumnDefinitions.Clear();InitialGame(rows);//GameBG.ShowGridLines = true;}} }?
總結
以上是生活随笔為你收集整理的c#WPF 扫雷游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何制作通讯录vcf_批量信息从表格导入
- 下一篇: c# char unsigned_dll