C#面向?qū)ο笳n程設(shè)計-拼圖游戲.doc
《C#面向?qū)ο笳n程設(shè)計-拼圖游戲.doc》由會員分享,可在線閱讀,更多相關(guān)《C#面向?qū)ο笳n程設(shè)計-拼圖游戲.doc(19頁珍藏版)》請在裝配圖網(wǎng)上搜索。
《C#程序設(shè)計》課程設(shè)計 題 目: 拼圖游戲 專 業(yè): 計算機科學(xué)與技術(shù) 學(xué) 號: 姓 名: 指導(dǎo)老師: 完成日期: 2012/12/26 《C#課程設(shè)計》評分標準 題 目: 拼圖游戲 專 業(yè): 計算機科學(xué)與技術(shù) 學(xué) 號: 姓 名: 考察項目 評分依據(jù) 完成情況 分數(shù) 報告 (40分) 規(guī)范完成設(shè)計報告,含光盤 報告能夠反映設(shè)計思路,并介紹系統(tǒng)功能 報告內(nèi)容比較完整,思路比較清晰,語句比較通順 報告內(nèi)容完整,用語準確,能夠反映系統(tǒng)開發(fā)過程 前臺 開發(fā)工具 (10分) 能夠使用開發(fā)工具的基本操作完成系統(tǒng)的開發(fā) 能夠熟練地運用開發(fā)工具來實現(xiàn)較全面的功能 對開發(fā)工具熟悉,能夠靈活使用各類控件和語句完成系統(tǒng)開發(fā) 能夠熟練掌握多種開發(fā)工具,并能夠獨立解決較復(fù)雜的編程問題。應(yīng)用到多種數(shù)據(jù)庫對象。 系統(tǒng)功能 (25分) 能夠完成數(shù)據(jù)的輸入輸出和基本查詢功能 除了基本信息管理功能外,還可以完成比較復(fù)雜的數(shù)據(jù)查詢和數(shù)據(jù)編輯功能 能夠方便地完成數(shù)據(jù)操作功能 具有較復(fù)雜的數(shù)據(jù)管理功能 系統(tǒng) 界面設(shè)計 (20分) 具有一般的Window窗口界面 功能比較全,操作也比較方便 界面美觀,功能全面,操作方便 界面美觀,功能設(shè)計有創(chuàng)新 教師簽字: 成績: 目 錄 1 前言 4 2 需求分析 4 2.1要求 4 2.2任務(wù) 4 2.3運行環(huán)境 4 2.4開發(fā)工具 4 3 概要設(shè)計與詳細設(shè)計 5 3.1系統(tǒng)流程圖 5 3.2結(jié)構(gòu)功能圖 5 4 編碼與實現(xiàn) 6 4.1編碼分析 6 4.2具體代碼實現(xiàn)(附源代碼) 9 5 課程設(shè)計總結(jié) 18 參考文獻 19 1.前言 拼圖游戲一款非常經(jīng)典的小游戲,因為它比較簡單有趣,無論老少都比較適合。拼圖的設(shè)計對每一個C#語言設(shè)計者進行語言提高和進階都是一個很好的鍛煉機會。 拼圖游戲的設(shè)計比較復(fù)雜,它涉及面廣、牽涉方面多,如果不好好考慮和設(shè)計,將難以成功開發(fā)出這個游戲。在這個游戲的設(shè)計中,牽涉到圖形界面的顯示與更新、數(shù)據(jù)的收集與更新,并且在這個游戲的開發(fā)中,還要應(yīng)用類的繼承機制以及一些設(shè)計模式。因此,如何設(shè)計和開發(fā)好這個拼圖游戲,對于提高C#開發(fā)水平和系統(tǒng)的設(shè)計能力有極大的幫助。在設(shè)計開發(fā)過程中,需要處理好各個類之間的繼承關(guān)系,還要處理各個類相應(yīng)的封裝,并且還要協(xié)調(diào)好各個模塊之間的邏輯依賴關(guān)系和數(shù)據(jù)通信關(guān)系。一個33的魔板,有一個格子是空的,其他格子內(nèi)隨機放置1-8共8個編號的方塊,通過單擊任意一個與空格子相鄰的方塊可以把該方塊移入空格子,不斷的移動方塊,直到方塊按照圖片的原來的順序排好。 2 需求分析 2.1要求 (1)用C#語言實現(xiàn)程序設(shè)計; (2)利用PictureBox控件來實現(xiàn)圖片的移動 (3)超過200步提示重新來 (4)界面友好(良好的人機互交),程序要有注釋。 2.2任務(wù) (1)制作流程圖 (2)編寫代碼; (3)程序分析與調(diào)試。 2.3運行環(huán)境 (1)WINDOWS2000/XP/win7系統(tǒng) (2)TurboC2.0編譯環(huán)境 2.4開發(fā)工具 C#語言 3 概要設(shè)計與詳細設(shè)計 3.1系統(tǒng)流程圖 如圖3.1所示。 游戲開始 操作游戲 200步內(nèi)完成游戲 游戲完成 圖3.1 系統(tǒng)流程圖 3.2功能結(jié)構(gòu)圖 如圖3.2所示。 拼圖游戲 游戲開始 游戲復(fù) 位 游戲結(jié)束 游戲退 出 圖3.2功能結(jié)構(gòu)圖 這個游戲主要分為四個模塊,分別是游戲開始、游戲復(fù)位、游戲結(jié)束和游戲退出。這四個摸塊的功能各不一樣,游戲開始的模塊就不用多介紹了,我們在這里主要說說重新開始的模塊,如果玩家對自己本次的成績不滿意,可以通過重新開始模塊來重完游戲 4 編碼與實現(xiàn) 4.1分析說明 游戲開始:界面如圖4-1 圖4-1 在程序開頭定義變量,實例化數(shù)組;代碼如下圖 游戲進行中 : 當(dāng)游戲運行的時候,桌面上會出現(xiàn)圖上的圖形界面。有一個文本框和一個圖形界面。其中通過點擊鼠標移動圖片,游戲就正式開始,且此游戲是通過計算鼠標點擊的次數(shù),而不是計算時間,所以玩游戲的人可以有充分的時間考慮。游戲中見圖4-2 圖4-2 左右圖片對照方便有游戲的進行,左下角有顯示有戲進行的步數(shù),復(fù)位時直接把右邊的圖相應(yīng)的賦給左邊,代碼實現(xiàn)如下圖: 這里從第一個到第九個PictureBox都有相應(yīng)賦值和命令這里只截取Box1的圖片對應(yīng)的代碼 游戲時本段代碼主要運用的c#知識是二維數(shù)組和if`~else語句,通過判斷box1 游戲復(fù)位: 如果覺得自己的成績不夠好,可以選擇復(fù)位重新開始。復(fù)位時直接把右邊的圖相應(yīng)的賦給左邊,復(fù)位后效果和剛開始一樣。代碼實現(xiàn)如下 游戲完成: 當(dāng)玩家在200步以內(nèi)完成拼圖則提示"恭喜你已經(jīng)完成拼圖!"如圖4-3 ;否則將提玩家重新來過如圖4-4 圖4-4 4.2具體代碼實現(xiàn) 附源代碼 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace 拼圖游戲2 { public partial class Form1 : Form { public static int aa; public static int bb; private System.Windows.Forms.PictureBox[,] t; public Form1() { InitializeComponent(); } //實例化數(shù)組 private void Form1_Load(object sender, EventArgs e) { t = new PictureBox[3, 3]{{pictureBox1 ,pictureBox2 ,pictureBox3 }, {pictureBox4 ,pictureBox5 ,pictureBox6 }, {pictureBox7 ,pictureBox8 ,pictureBox9 } }; for (int i = 0; i <= 2; i++) { for (int j = 0; j <= 2; j++) { t[i, j].Enabled = false; } } } //圖片的移動 private void pictureBox1_Click(object sender, EventArgs e) { bb++; label2.Text = bb.ToString(); if (pictureBox2.Image == null) { pictureBox2.Image = pictureBox1.Image; pictureBox1.Image = null; } else if (pictureBox4.Image == null) { pictureBox4.Image = pictureBox1.Image; pictureBox1.Image = null; } } private void pictureBox2_Click(object sender, EventArgs e) { bb++; label2.Text = bb.ToString(); if (pictureBox1.Image == null) { pictureBox1.Image = pictureBox2.Image; pictureBox2.Image = null; } else if (pictureBox3.Image == null) { pictureBox3.Image = pictureBox2.Image; pictureBox2.Image = null; } else if (pictureBox5.Image == null) { pictureBox5.Image = pictureBox2.Image; pictureBox2.Image = null; } } private void pictureBox3_Click(object sender, EventArgs e) { bb++; label2.Text = bb.ToString(); if (pictureBox2.Image == null) { pictureBox2.Image = pictureBox3.Image; pictureBox3.Image = null; } else if (pictureBox6.Image == null) { pictureBox6.Image = pictureBox3.Image; pictureBox3.Image = null; } } private void pictureBox4_Click(object sender, EventArgs e) { bb++; label2.Text = bb.ToString(); if (pictureBox1.Image == null) { pictureBox1.Image = pictureBox4.Image; pictureBox4.Image = null; } else if (pictureBox5.Image == null) { pictureBox5.Image = pictureBox4.Image; pictureBox4.Image = null; } else if (pictureBox7.Image == null) { pictureBox7.Image = pictureBox4.Image; pictureBox4.Image = null; } } private void pictureBox5_Click(object sender, EventArgs e) { bb++; label2.Text = bb.ToString(); if (pictureBox2.Image == null) { pictureBox2.Image = pictureBox5.Image; pictureBox5.Image = null; } else if (pictureBox4.Image == null) { pictureBox4.Image = pictureBox5.Image; pictureBox5.Image = null; } else if (pictureBox6.Image == null) { pictureBox6.Image = pictureBox5.Image; pictureBox5.Image = null; } else if (pictureBox8.Image == null) { pictureBox8.Image = pictureBox5.Image; pictureBox5.Image = null; } } private void pictureBox6_Click(object sender, EventArgs e) { bb++; label2.Text = bb.ToString(); if (pictureBox5.Image == null) { pictureBox5.Image = pictureBox6.Image; pictureBox6.Image = null; } else if (pictureBox3.Image == null) { pictureBox3.Image = pictureBox6.Image; pictureBox6.Image = null; } else if (pictureBox9.Image == null) { pictureBox9.Image = pictureBox6.Image; pictureBox6.Image = null; } } private void pictureBox7_Click(object sender, EventArgs e) { bb++; label2.Text = bb.ToString(); if (pictureBox4.Image == null) { pictureBox4.Image = pictureBox7.Image; pictureBox7.Image = null; } else if (pictureBox8.Image == null) { pictureBox8.Image = pictureBox7.Image; pictureBox7.Image = null; } } private void pictureBox8_Click(object sender, EventArgs e) { bb++; label2.Text = bb.ToString(); if (pictureBox5.Image == null) { pictureBox5.Image = pictureBox8.Image; pictureBox8.Image = null; } else if (pictureBox7.Image == null) { pictureBox7.Image = pictureBox8.Image; pictureBox8.Image = null; } else if (pictureBox9.Image == null) { pictureBox9.Image = pictureBox8.Image; pictureBox8.Image = null; } } private void pictureBox9_Click(object sender, EventArgs e) { bb++; label2.Text = bb.ToString(); if (pictureBox6.Image == null) { pictureBox6.Image = pictureBox9.Image; pictureBox9.Image = null; } else if (pictureBox8.Image == null) { pictureBox8.Image = pictureBox9.Image; pictureBox9.Image = null; } } //設(shè)置游戲最大步數(shù) private void label2_TextChanged(object sender, EventArgs e) { try { if (int.Parse(label2.Text) >=200) { MessageBox.Show("你已經(jīng)超過了游戲所限定的最大步數(shù),歡迎再來!", "注意", MessageBoxButtons.OK, MessageBoxIcon.Information); } } catch { } } private void button1_Click(object sender, EventArgs e) { button2.Enabled = true; pictureBox9.Image = null; aa = aa + 1; for (int m = 0; m <= 2; m++) { for (int n = 0; n <= 2; n++) { t[m, n].Enabled = true; } } ss: switch (aa) //對圖片進行隨機的分割 { case 1: { Clipboard.SetImage(pictureBox1.Image); pictureBox1.Image = pictureBox5.Image; pictureBox5.Image = Clipboard.GetImage(); Clipboard.Clear(); Clipboard.SetImage(pictureBox2.Image); pictureBox2.Image = pictureBox4.Image; pictureBox4.Image = Clipboard.GetImage(); Clipboard.Clear(); Clipboard.SetImage(pictureBox3.Image); pictureBox3.Image = pictureBox8.Image; pictureBox8.Image = Clipboard.GetImage(); Clipboard.Clear(); button1.Enabled = false; break; } case 2: { Clipboard.SetImage(pictureBox1.Image); pictureBox1.Image = pictureBox6.Image; pictureBox6.Image = Clipboard.GetImage(); Clipboard.Clear(); Clipboard.SetImage(pictureBox2.Image); pictureBox2.Image = pictureBox8.Image; pictureBox8.Image = Clipboard.GetImage(); Clipboard.Clear(); Clipboard.SetImage(pictureBox3.Image); pictureBox3.Image = pictureBox5.Image; pictureBox5.Image = Clipboard.GetImage(); Clipboard.Clear(); button1.Enabled = false; break; } case 3: { Clipboard.SetImage(pictureBox2.Image); pictureBox2.Image = pictureBox5.Image; pictureBox5.Image = Clipboard.GetImage(); Clipboard.Clear(); Clipboard.SetImage(pictureBox4.Image); pictureBox4.Image = pictureBox6.Image; pictureBox6.Image = Clipboard.GetImage(); Clipboard.Clear(); Clipboard.SetImage(pictureBox3.Image); pictureBox3.Image = pictureBox8.Image; pictureBox8.Image = Clipboard.GetImage(); Clipboard.Clear(); button1.Enabled = false; break; } case 4: { Clipboard.SetImage(pictureBox1.Image); pictureBox1.Image = pictureBox8.Image; pictureBox8.Image = Clipboard.GetImage(); Clipboard.Clear(); Clipboard.SetImage(pictureBox3.Image); pictureBox3.Image = pictureBox5.Image; pictureBox5.Image = Clipboard.GetImage(); Clipboard.Clear(); Clipboard.SetImage(pictureBox6.Image); pictureBox6.Image = pictureBox9.Image; pictureBox9.Image = Clipboard.GetImage(); Clipboard.Clear(); button1.Enabled = false; break; } default: { aa = 1; goto ss; } } } //對數(shù)組賦值 private void button2_Click(object sender, EventArgs e) { pictureBox1.Image = pictureBox10.Image; pictureBox2.Image = pictureBox12.Image; pictureBox3.Image = pictureBox15.Image; pictureBox4.Image = pictureBox13.Image; pictureBox5.Image = pictureBox14.Image; pictureBox6.Image = pictureBox16.Image; pictureBox7.Image = pictureBox17.Image; pictureBox8.Image = pictureBox18.Image; pictureBox9.Image = null; label2.Text = ""; bb = 0; button2.Enabled = false; button1.Enabled = true; for (int m = 0; m <= 2; m++) { for (int n = 0; n <= 2; n++) { t[m, n].Enabled = false; } } } //對游戲完成進行判斷 private void Form1_Activated(object sender, EventArgs e) { if (pictureBox1.Image == pictureBox10.Image && pictureBox2.Image == pictureBox12.Image && pictureBox3.Image == pictureBox13.Image && pictureBox4.Image == pictureBox14.Image && pictureBox5.Image == pictureBox15.Image && pictureBox6.Image == pictureBox16.Image && pictureBox7.Image == pictureBox17.Image && pictureBox8.Image == pictureBox18.Image && pictureBox9.Image == null) { MessageBox.Show("恭喜你已經(jīng)完成拼圖!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } } private void button3_Click(object sender, EventArgs e) { Application.Exit(); } private void label2_Click(object sender, EventArgs e) { } } } 5 課程設(shè)計總結(jié) 經(jīng)過一學(xué)期的C#學(xué)習(xí),我對C#有了進一步的認識和掌握。 C#誕生于C、C++、Java之后,其語言特點與這幾門優(yōu)秀的編程語言極其相似,不同的是,C#更面向于用戶,而不是計算機,因此就有它自己的絕對優(yōu)勢--簡單易學(xué)。在微軟的重量級開發(fā)工具.Net平臺上,C#更是發(fā)揮了他強大的作用,使得軟件開發(fā)變?yōu)橐患浅H菀浊腋咝У氖虑椤#在將來必定會占據(jù)軟件行業(yè)高端市場,因此使用C#做高層軟件開發(fā)是個不錯的選擇,將來我會考慮使用C#做高層軟件開發(fā)。 所有的計算機程序都是運行在計算機上的,因此所有的編程語言和開發(fā)工具在一定程度上都具有很大的共同點,熟練掌握好一門編程語言和一套開發(fā)工具,在今后學(xué)習(xí)其他的編程語言和工具時,會變得很容易很輕松。因此,我們學(xué)習(xí)階段,不需要貪多,不需要追隨最新,而是要求精。 計算機科技發(fā)展的速度非???,時下最時髦的編程語言和開發(fā)工具在未來幾年中就可能被淘汰,因此,了解程序的運行機制,掌握工具的原理是非常重要的。.Net平臺為程序員做了太多的事情,它將很多的操作都以類的形式封裝起來,好處是適合開發(fā)軟件,壞處是不適合培養(yǎng)專業(yè)程序員,至于原因為何,讀者自己領(lǐng)會。 最后,要感謝我們的C#任課老師--邵老師。老師非常負責(zé)任,上課講解詳細,是我在大學(xué)中見過最對學(xué)生負責(zé)任的老師之一。還有我的C#課程設(shè)計李老師,在做課程設(shè)計時給我們輔導(dǎo)答疑,并予以指導(dǎo)。還有和我一起的隊友,是他們的幫忙,我才能完成這份課程設(shè)計,感謝身邊的每一個幫助過我的人。 參考文獻 [1] 張福祥. C語言程序設(shè)計[M]. 遼寧大學(xué)出版社,2010.1 [2] 張福祥.C語言程序設(shè)計實驗實訓(xùn)與習(xí)題解答 [M].沈陽:遼寧大學(xué)出版社,2010.1 [3] 牛莉,劉遠軍等.計算機等級考試輔導(dǎo)教程[M].北京:中國鐵道出版社,2008. [4] 百度文庫 19- 1.請仔細閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- C# 面向 對象 課程設(shè)計 拼圖游戲
鏈接地址:http://ioszen.com/p-9606851.html