C# 拼圖遊戲的實戰(附demo)
一、項目分析
項目分析簡要說明項目主要用戶需求、設計思路及模塊劃分。
1、用戶需求分析
在當今社會,人們的生活壓力越來越大,也沒有太多時間去玩大型的遊戲,所以需要一些簡單的小遊戲來緩解大傢的工作和學習壓力。而連連看是一款簡單,容易理解,大多數人都會玩的小遊戲,耗費時間也不是太長,所以特意設計此款遊戲來滿足用戶放松心情的需求。
2、系統設計思路
(1)進行遊戲用戶的註冊以及登錄;
(2)先導入圖片,並進行切割
(3)隨機丟棄一張小切圖,並打亂順序
(3)窗體基本的功能選擇欄需實現;
(4)可以判定遊戲確定輸贏,當拼成時提示成功;
(5)點擊圖片要能進行移動;
(6)右側要有重排後的顯示框便於玩傢遊戲的完成。
3、系統模塊劃分
板塊一:註冊用戶並進行登錄。
板塊二:導入圖片。
板塊三:設置關卡所能選的難度。
拼圖遊戲應該有關卡選擇33型,44型,5*5型等等。設置多個關卡可以讓用戶體驗遊戲更具挑戰性。
版塊四:拼圖是否完成的判斷。
通過判斷圖片對應結構體的數字是否完全順序排列來判斷遊戲是否勝利。
板塊五:切割圖片。
板塊六:打亂拼圖。
板塊七:重排圖片,反映現在拼圖的狀況。
板塊八:切成圖後的小圖片移動。
該過程是整個遊戲的核心過程,是最重要的一個過程,用戶通過點擊圖片來移動圖片,如果圖片臨近白塊,則圖片移動到白塊位置;反之則不移動。
二、項目設計
詳細介紹項目各個子模塊的設計方法及設計核心技術。
1、各個子模塊的設計方法
板塊一:註冊用戶並進行登錄。
通過兩個窗體來完成註冊登錄的步驟。註冊主要用到文件讀取的方法:
StreamReader reader = new StreamReader("name.txt");
並通過寫入函數講用戶註冊名寫入:
StreamWriter writer = new StreamWriter("name.txt", true); writer.WriteLine(textBox1.Text); MessageBox.Show("用戶註冊成功,請進行登錄!"); writer.Dispose();
登錄道理相同。
板塊二:導入圖片。
導入圖片用到
OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog1.ShowDialog();//打開文件夾選擇圖片 pictureBox1.Image = Image.FromFile(openFileDialog1.FileName).GetThumbnailImage(250, 250,new Image.GetThumbnailImageAbort(delegate { return false; }),IntPtr.Zero);//使所選圖片的尺寸符合所需大小
打開圖片文件之後並初始其尺寸大小,便於後期切圖以及用戶體驗。
板塊三:設置關卡所能選的難度。
講難度設置加到combox中
comboBox1.Items.Add("1"); comboBox1.Items.Add("2"); comboBox1.Items.Add("3"); comboBox1.Items.Add("4");
然後用switch對應各個難度
int Diffcult = int.Parse(comboBox1.Text); // 根據對應難度初始化數組並給n賦值 switch (Diffcult) { case 1: node = new Node[3, 3]; n = 3; break; case 2: node = new Node[4, 4]; n = 4; break; case 3: node = new Node[5, 5]; n = 5; break; case 4: node = new Node[9, 9]; n = 9; break; }
版塊四:拼圖是否完成的判斷。
通過判斷函數來確定對照各個圖片的結構體的數字記錄來判斷是否拼成
public bool JudgePicture() { int count = 0; for (int x = 0; x < n; x++) { for (int y = 0; y < n; y++) { if (this.node[x, y].num != count) return false; count++; } } return true; }
板塊五:切割圖片。
// 傳入圖片;單個圖片寬,高;拼圖界面的x,y長度 public Image Cutpicture(Image fImage,int width,int height,int spacex,int spacey) { // 創建新圖片的位圖 Bitmap bitmap = new Bitmap(width, height); // 創建繪制區域 Graphics graphics = Graphics.FromImage(bitmap); // 截取所需原圖對應區域寫入作圖區域 graphics.DrawImage(fImage, 0, 0, new Rectangle(spacex, spacey, width, height), GraphicsUnit.Pixel); // 從作圖區域生成新圖 Image fgImage = Image.FromHbitmap(bitmap.GetHbitmap()); return fgImage; // 返回分割後的圖片 }
通過創建繪制區域,來截取所需的小圖塊,然後通過調用切圖函數將切後的圖片全部傳入結構體圖片數組中。
板塊六:打亂拼圖。
// 定義隨機數用於打亂切後的圖 Random lx = new Random(); Random ly = new Random(); int x = lx.Next(0, n); int y = ly.Next(0, n);
再調用交換函數進行來進行兩圖片交換,進行400000次達到打亂的目的
板塊七:重排圖片,反映現在拼圖的狀況。
每次圖片的點擊移動事件都會進行pictureBox2.Image = BackImage();
語句來存儲移動後的圖片,當點擊button3時就會調用這個函數
// 按鈕重排後再picturebox3中顯示 private void button3_Click(object sender, EventArgs e) { // 在pictureBox3中顯示被移動後的拼圖 pictureBox3.Image = BackImage(); }
是的picturebox3的圖片顯示現在圖片的狀態
板塊八:切成圖後的小圖片移動。
先讀取鼠標點擊的位置,用於判斷點擊的圖片位置
int X = e.X / (width / n); // 鼠標x位置整型隻能取 1到n-1 int Y = e.Y / (width / n);
一共九種情況:圖片在中間,四角,四邊,分別判斷來確定是否移動:如下面是在中間點擊圖片的運行代碼,其他情況類似:
if (node[X + 1, Y].num == index_m) { Swap(new Point(X + 1, Y), new Point(X, Y)); } else if (node[X - 1, Y].num == index_m) { Swap(new Point(X - 1, Y), new Point(X, Y)); } else if (node[X, Y + 1].num == index_m) { Swap(new Point(X, Y + 1), new Point(X, Y)); } else if (node[X, Y - 1].num == index_m) { Swap(new Point(X, Y - 1), new Point(X, Y)); }
2、設計核心技術
- 用文件流的方法設置登錄註冊界面,並保存用戶名信息
- 使用GDI+的方法對圖片進行切割
- 打亂圖片的時候運用大量隨機數
- 每個圖片有自己的對應結構體數字,為瞭判斷是否拼圖成功
- 當所點擊圖片與空白圖片交換時,分九種情況:四角,四邊,中間,按情況來寫入交換方法
- 當拼成功時,按照圖片對應的結構體數字並調用判斷函數判斷
三、項目測試
簡要介紹采用的測試方法和測試要點。
點擊圖中按鈕後選擇一個圖片文件,將圖片顯示到窗口的左邊
然後將圖片切為指定的數目(如 3×3)的小圖片,從生成的小圖片中隨機選擇一張丟棄,將小圖片按照一定規律打亂,並將顯示到窗口的中間。
用戶可以用鼠標點擊空白方塊周圍的圖片,被點擊的圖片移動到原來空白的位置,被點擊圖片的位置變為空白。
另設登錄,註冊界面
四、結論
簡要總結項目的主要工作、主要結果、心得感受主要發現以及下一步應當開展的主要工作等。
主要工作
:設計瞭一款拼圖遊戲主要結果
:讓用戶有一種較好的遊戲體驗,並制作完成三級項目心得感受
:大部分是老師上課講過的,還有一些運用得不是很好,以及一些自己通過網絡,書籍來獲取的知識,當然更多的知識是陌生的,需要自己去查找,去學習,來達到學以致用的目的。下一步工作
:程序仍然存在缺陷,缺少背景音樂與華麗的界面,這些問題待解決 五、項目鏈接
這個文檔描述的版本是這個:C#-PuinPhoto_jb51.rar
還有下面這個是我閑著沒事用一種極其簡單的思想做的:C#-pintu_jb51.rar
到此這篇關於C# 拼圖遊戲的實戰(附demo)的文章就介紹到這瞭,更多相關C# 拼圖內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- C# pictureBox用法案例詳解
- C#實現在窗體上的統計圖效果
- 詳解C#如何實現窗體換膚
- C#實現MP3播放器功能的示例代碼
- C#實現簡易灰度圖和酷炫HeatMap熱力圖winform(附DEMO)