影音先锋男人资源在线观看,精品国产日韩亚洲一区91,中文字幕日韩国产,2018av男人天堂,青青伊人精品,久久久久久久综合日本亚洲,国产日韩欧美一区二区三区在线

俄羅斯方塊課程設(shè)計(jì)

上傳人:燈火****19 文檔編號(hào):21899227 上傳時(shí)間:2021-05-14 格式:DOC 頁(yè)數(shù):16 大?。?.46MB
收藏 版權(quán)申訴 舉報(bào) 下載
俄羅斯方塊課程設(shè)計(jì)_第1頁(yè)
第1頁(yè) / 共16頁(yè)
俄羅斯方塊課程設(shè)計(jì)_第2頁(yè)
第2頁(yè) / 共16頁(yè)
俄羅斯方塊課程設(shè)計(jì)_第3頁(yè)
第3頁(yè) / 共16頁(yè)

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《俄羅斯方塊課程設(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《俄羅斯方塊課程設(shè)計(jì)(16頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、 課 程 設(shè) 計(jì) 報(bào) 告 課程設(shè)計(jì)名稱:俄羅斯方塊 系 : 三系 學(xué)生姓名: 班 級(jí): 學(xué) 號(hào): 成 績(jī): 指導(dǎo)教師: 開(kāi)課時(shí)間: 學(xué)年 學(xué)期 目錄 摘 要 2 1. 需求分析 3 2. 結(jié)構(gòu)設(shè)計(jì) 3 2.1. 系統(tǒng)模塊設(shè)計(jì)圖 3 3. 系統(tǒng)實(shí)現(xiàn) 6 3.1. 配置窗口 6 3.1.1. 磚塊樣式配置 6 3.

2、1.2. 參數(shù)配置 11 3.2. 運(yùn)行窗口 13 4. 課程設(shè)計(jì)總結(jié) 15 5. 參考文獻(xiàn) 15 6. 附錄 15 摘 要 在這兩周內(nèi)我制作了一個(gè)小游戲—俄羅斯方塊。進(jìn)一步掌握C#語(yǔ)言的語(yǔ)法,并通過(guò)這個(gè)案例的制作。使得我知道了什么是程序開(kāi)發(fā),如何進(jìn)行程序開(kāi)發(fā)有個(gè)更明確的定位。這個(gè)游戲大家都玩過(guò),都知道規(guī)則。我制作的這個(gè)俄羅斯方塊可以自己來(lái)訂做磚塊樣式。 俄羅斯方塊是一款風(fēng)靡全球的電視游戲和掌上游戲機(jī)游戲,它曾經(jīng)造成的轟動(dòng)與造成的經(jīng)濟(jì)價(jià)值可以說(shuō)是游戲史上的意見(jiàn)大事。這款游戲最初是由蘇聯(lián)的游戲制作人Alex Pajitnov制作懂得,它看似簡(jiǎn)單但變化無(wú)窮,令人上癮。相信

3、大多數(shù)人都還記得為它癡迷得茶不思飯不想的那個(gè)俄羅斯方塊時(shí)代。 究其歷史,俄羅斯方塊最早還是出現(xiàn)在PC機(jī)上,而我國(guó)的用戶都是通過(guò)紅白機(jī)了解、喜歡上他的?,F(xiàn)在聯(lián)眾又將重新掀起這股讓人沉迷的俄羅斯方塊風(fēng)潮。對(duì)一般用戶來(lái)講,它的規(guī)則很簡(jiǎn)單,容易上手,且游戲過(guò)程變化無(wú)窮,而在“聯(lián)眾俄羅斯方塊”中,更有一些聯(lián)眾網(wǎng)絡(luò)游戲所獨(dú)有的魅力——有單機(jī)作戰(zhàn)與兩人在線對(duì)戰(zhàn)的兩種模式還增加了積分制,是用戶既能感受到游戲中的樂(lè)趣,也給用戶提供了一個(gè)展示自己高超技藝的舞臺(tái)。 1. 需求分析 俄羅斯方塊游戲是一個(gè)經(jīng)典的小游戲,由于它簡(jiǎn)

4、單有趣,因而得到了廣泛的流行,男女老幼都適合。而俄羅斯方塊游戲的設(shè)計(jì)工作復(fù)雜且富有挑戰(zhàn)性,它包含的內(nèi)容多,涉及的知識(shí)廣泛,與圖形界面聯(lián)系較大,包括界面的顯示與更新、數(shù)據(jù)收集等,在設(shè)計(jì)的過(guò)程中,必將運(yùn)用到各方面的知識(shí),這對(duì)于C#語(yǔ)言設(shè)計(jì)者而言,是個(gè)很好的鍛煉機(jī)會(huì)。我采用一個(gè)5*5的矩陣來(lái)表示方塊的樣式。 2. 結(jié)構(gòu)設(shè)計(jì) 2.1. 系統(tǒng)模塊設(shè)計(jì)圖 l 圖a.為實(shí)體建造計(jì)算機(jī)模型 + + + struArr 00000 01100 01100 00000 00000 blockString Config BlockSet 首先要解決的問(wèn)題是:怎樣把磚

5、塊轉(zhuǎn)化成計(jì)算機(jī)能識(shí)別的類型?好讓計(jì)算機(jī)對(duì)其進(jìn)行邏輯處理;其次,如何存儲(chǔ)這些信息。 l 圖b.存儲(chǔ)磚塊信息的過(guò)程 用戶點(diǎn)擊配置磚塊樣式和顏色 10111……101 解決把磚塊數(shù)據(jù)提取與轉(zhuǎn)存。 l 圖c.畫出表示磚塊的一塊畫板 只需要畫中間的四條線就夠啦,用到一個(gè)函數(shù),DrawLine()畫直線。 圖d:把磚塊的樣式通過(guò)一個(gè)算法轉(zhuǎn)化成一個(gè)數(shù)組 將大磚塊的每個(gè)小磚塊都編上代碼,抑郁訪問(wèn)。 圖e:把磚塊里面,有小磚塊按下的表示為1,其他為0. 圖f:讀取數(shù)據(jù)時(shí),用公式計(jì)算數(shù)組下表 下沒(méi)為存儲(chǔ)磚塊信息的類: 磚塊Block

6、磚塊信息BlockInfo 磚塊組信息BlockGroup 磚塊配置信息Config 存儲(chǔ)配置信息BlockSet.xml 存儲(chǔ)磚塊信息的數(shù)組InfoArr 畫板Palette 3. 系統(tǒng)實(shí)現(xiàn) 3.1. 配置窗口 3.1.1. 磚塊樣式配置 a.畫模板中的初始圖形 private void lblMode_Paint(object sender, PaintEventArgs e)//畫模板中的初始圖形 { Graphics gp = e.Graphics;//定義的畫布對(duì)象 gp.Clear(Col

7、or.Black);//是初始的畫布為黑色 Pen p = new Pen(Color.White);//定義白色畫筆畫線 for (int i = 0; i < 156; i = i + 31)//畫了:橫6條,豎6條 { gp.DrawLine(p,0,i,155,i);//畫橫白線 gp.DrawLine(p,i,0,i,155);//畫豎白線 } //填充矩陣中的方塊

8、 SolidBrush s = new SolidBrush(blockColor); for (int x = 0; x < 5; x++) { for (int y = 0; y < 5; y++) { if (struArr[x, y]) { gp.FillRectangle(s, 31 * x + 1, 31 * y + 1, 30, 30);

9、 } } } } b.配置磚塊的樣式 private void lblMode_MouseClick(object sender, MouseEventArgs e)//模板的MouseClick事件,給方塊涂色 { if (e.Button != MouseButtons.Left)//判斷是否點(diǎn)擊了鼠標(biāo)左鍵,如果不是就退出 return; int xPos, yPos;//xPos表示數(shù)組第一個(gè)下標(biāo),yPos表示數(shù)

10、組第二個(gè)下標(biāo) if (0 == e.X % 31 || 0 == e.Y % 31)//判斷鼠標(biāo)點(diǎn)下的區(qū)域,使它不為邊界線 return; xPos = e.X / 31;//把屏幕像素值轉(zhuǎn)換為數(shù)組下標(biāo) yPos = e.Y / 31; struArr[xPos, yPos] = !struArr[xPos, yPos];//記錄方塊的形狀 bool b = struArr[xPos, yPos]; Graphics gp = lblMode.CreateGra

11、phics();//得到lblMode的Graphics SolidBrush s=new SolidBrush (b ? blockColor : Color .Black );//創(chuàng)建一個(gè)刷子,并確定它的顏色 gp.FillRectangle (s,31*xPos+1,31*yPos+1,30,30);//給所點(diǎn)擊的方塊涂顏色 gp.Dispose ();//釋放Graphics } c.顏色對(duì)話框 private void lblColor_Click(object sender, Eve

12、ntArgs e)//配置模板中磚塊的顏色 { colorDialog1.ShowDialog();//打開(kāi)顏色對(duì)話框 blockColor = colorDialog1.Color;//使磚塊的背景顏色置為所選顏色 lblColor.BackColor = colorDialog1.Color;////使標(biāo)簽的背景顏色置為所選顏色 lblMode.Invalidate();//使顏色lblMode重畫,執(zhí)行它的paint事件 } d.選擇右邊的列表框時(shí)所觸發(fā)的事件 private void lsvBlockSet_ItemSelectionCh

13、anged(object sender, ListViewItemSelectionChangedEventArgs e)// 當(dāng)lsvBlockSet中所選的項(xiàng)發(fā)生改變時(shí)所觸發(fā)的事件 { if (e.IsSelected)//避免重復(fù)執(zhí)行事件 { blockColor = Color.FromArgb(int.Parse(e.Item.SubItems[1].Text));//把字符串信息轉(zhuǎn)換為顏色類 lblColor.BackColor = blockColor; string

14、s = e.Item.SubItems[0].Text;//取磚塊樣式信息 for (int i = 0; i < s.Length; i++) { struArr[i / 5, i % 5] = (s[i] == 1);//i/5代表每一行,i%5代表每一列,即遍歷磚塊形狀的每一個(gè)字符,記錄在struArr中 } lblMode.Invalidate(); } } e.增

15、加一個(gè)磚塊樣式 private void btnAdd_Click(object sender, EventArgs e)//向ListView中添加數(shù)據(jù) { bool isEmpty = false;//首先查找圖案是否為空 foreach (bool i in struArr) { if (i) { isEmpty = true; break;

16、 } } if (!isEmpty) { MessageBox.Show("圖案為空,請(qǐng)先用鼠標(biāo)點(diǎn)擊左窗口繪制圖案!", "提示窗口", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } StringBuilder sb = new StringBuilder(25);//定義一個(gè)可變字符字符串

17、 foreach (bool i in struArr) { sb.Append(i ? "1" : "0");//在此實(shí)例的結(jié)尾追加指定字符串的副本。 } string blockString = sb.ToString(); //再檢查是否有重復(fù)圖案 foreach (ListViewItem item in lsvBlockSet.Items) {

18、 if (item.SubItems[0].Text == blockString)//判斷每個(gè)ListViewItem項(xiàng)的第一個(gè)小項(xiàng)的文本信息 { MessageBox.Show("該圖案已經(jīng)存在!","提示窗口",MessageBoxButtons.OK ,MessageBoxIcon.Information); return; } } //把新磚塊圖案信息添加進(jìn)ListView

19、 ListViewItem myItem = new ListViewItem(); myItem = lsvBlockSet.Items.Add(blockString);//增加ListViewItem的一行數(shù)據(jù)的第一個(gè) myItem.SubItems.Add(Convert.ToString(blockColor.ToArgb()));//獲取包含myItem的所有子項(xiàng)的集合,并為其增加一個(gè)子項(xiàng)數(shù)據(jù)。 } f.刪除一個(gè)磚塊樣式 private void btnDe

20、l_Click(object sender, EventArgs e)//刪除lsvBlockSet內(nèi)的所選項(xiàng) { if (lsvBlockSet.SelectedItems.Count == 0)//判斷l(xiāng)svBlockSet內(nèi)是否有項(xiàng)目被選中 { MessageBox.Show("請(qǐng)?jiān)谟疫叴翱谶x擇一個(gè)條目進(jìn)行刪除","提示窗口",MessageBoxButtons .OK ,MessageBoxIcon .Information ); return;

21、 } lsvBlockSet.Items.Remove(lsvBlockSet .SelectedItems[0]);//刪除被選中項(xiàng)目 MessageBox.Show("刪除成功!", "提示窗口", MessageBoxButtons.OK, MessageBoxIcon.Information); btnClear.PerformClick();//清空模塊中的磚塊 } g.修改你所選中的磚塊樣式 private void btnUpdate_Clic

22、k(object sender, EventArgs e)//更新lsvBlockSet內(nèi)的所選項(xiàng) { if (lsvBlockSet.SelectedItems.Count == 0)//判斷是否有項(xiàng)目被選中 { MessageBox.Show("請(qǐng)?jiān)谟疫叴翱谶x擇一個(gè)條目進(jìn)行修改!", "提示窗口", MessageBoxButtons.OK, MessageBoxIcon.Information); return; }

23、 bool isEmpty = false;//判斷圖案是否為空 foreach (bool i in struArr) { if (i) { isEmpty = true; break; } } if (!isEmpty) { M

24、essageBox.Show("圖案為空,請(qǐng)先用鼠標(biāo)點(diǎn)擊左邊窗口繪制圖案再進(jìn)行修改!", "提示窗口 ", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } StringBuilder sb = new StringBuilder(25); foreach (bool i in struArr)//把圖案的字符串信息轉(zhuǎn)換為二進(jìn)制數(shù)組信息 { sb.App

25、end(i ? "1" : "0"); } lsvBlockSet.SelectedItems[0].SubItems[0].Text = sb.ToString();//改變圖案信息 lsvBlockSet.SelectedItems[0].SubItems[1].Text = Convert.ToString(blockColor.ToArgb());//改變顏色信息 } h. 清空模板中的圖形 private void btnClear_Click(object sende

26、r, EventArgs e)//清空模板中的圖形 { for (int x = 0; x < 5; x++)//把struArr內(nèi)所有元素為false,實(shí)現(xiàn)清空 { for (int y = 0; y < 5; y++) { struArr[x, y] = false; } } lblMode.Invalidate();//使控件

27、的整個(gè)圖面無(wú)效并導(dǎo)致重繪控件。 } i.保存設(shè)置 private void btnSave_Click(object sender, EventArgs e) { InfoArr info = new InfoArr(); foreach (ListViewItem item in lsvBlockSet.Items)//從lsvBlockSet內(nèi)讀取磚塊信息,并存入info內(nèi) { info.Add(item.SubItems[0].Text,item.Sub

28、Items[1].Text); } config.Info = info; config.DownKey = (Keys)txtDown.Tag; config.DropKey = (Keys)txtDrop.Tag; config .MoveLeftKey=(Keys)txtLeft.Tag; config .MoveRightKey=(Keys)txtRight.Tag; config .DeasilRotat

29、eKey=(Keys)txtDeasil.Tag; config.ContraRotateKey=(Keys)txtContra.Tag; config.CoorWidth=int.Parse( txtCoorWidth.Text); config .CoorHeight=int.Parse( txtCoorHeight.Text); config .RectPix=int.Parse(txtRectPix.Text); config .BackColor=lblB

30、ackColor.BackColor; config.SavToXmlFile();//保存成xml文件 } 3.1.2. 參數(shù)配置 a.熱鍵的配置 private void txtContra_KeyDown(object sender, KeyEventArgs e)//熱鍵的配置 { //首先排除一些不適合的鍵值 if ((e.KeyValue >=33&&e.KeyValue <=36)||(e.KeyValue >=45&&e.KeyValue

31、<=46)|| (e.KeyValue >=48&&e.KeyValue <=57)||(e.KeyValue >=65&&e.KeyValue <=90)|| (e.KeyValue >=96&&e.KeyValue <=107)||(e.KeyValue >=109&&e.KeyValue <=111)|| (e.KeyValue >=186&&e.KeyValue <=219)||(e.KeyValue >=45&&e.KeyValue <=222)) {

32、 //檢查是否存在沖突的快捷鍵 foreach (Control c in gbKeySet.Controls)//遍歷包含在控件內(nèi)的控件。 { Control TempC = c as TextBox;//???? if (TempC !=null &&((TextBox )TempC ).Text!="" ) { if (

33、((int)((TextBox)TempC).Tag) == e.KeyValue)//Tag獲取或設(shè)置包含有關(guān)控件的數(shù)據(jù)的對(duì)象。 { ((TextBox )TempC ).Text =""; ((TextBox )TempC ).Tag =Keys.None; } } } ((T

34、extBox )sender ).Text =e.KeyCode .ToString ();//如A,B ((TextBox )sender ).Tag =(Keys )e.KeyValue;//如65,90,77 } } 3.2. 運(yùn)行窗口 a.預(yù)覽窗口的繪制 private void lblReady_Paint(object sender, PaintEventArgs e)//準(zhǔn)備畫板的繪制 { if (p != null)

35、 { p.PaintReady(e.Graphics);//重畫一下磚塊 } } b.開(kāi)始游戲 private void btnStart_Click(object sender, EventArgs e)//開(kāi)始 { if (p != null) { p.Close(); } p = new Palette(paletteWidth,

36、 paletteHeight, rectPix, paletteColor, Graphics.FromHwnd(pbRun.Handle), Graphics.FromHwnd(lblReady.Handle)); p.Start(); } c.暫停游戲 private void btnPause_Click(object sender, EventArgs e) { if (p == null) { return;

37、 } if (btnPause.Text == "暫停") { p.Pause(); btnPause.Text = "繼續(xù)"; } else { p.EndPause(); btnPause.Text = "暫停"; } } d.配置游戲 priva

38、te void btnConfig_Click(object sender, EventArgs e) { if (btnPause.Text == "暫停") { btnPause.PerformClick(); } using (FrmConfig frmConfig = new FrmConfig()) { frmConfig.ShowDialog();

39、 } } e.繪制運(yùn)行窗口 private void pbRun_Paint(object sender, PaintEventArgs e)//運(yùn)行窗口的繪制 { if (p!=null ) { p.PaintPalette(e.Graphics);//重畫整個(gè)畫板 } } 4. 課程設(shè)計(jì)總結(jié) 我們用了將近半個(gè)月的時(shí)間,終于把俄羅斯方塊游戲完成了。這兩個(gè)月里,我們搜集資料、查看書(shū)籍,由于上學(xué)期對(duì)面向?qū)?/p>

40、象程序設(shè)計(jì)這門課程只是停留在略懂皮毛的理論階段,因此這個(gè)學(xué)期的實(shí)際操作對(duì)于我們來(lái)說(shuō)有一定的難度。 在系統(tǒng)分析階段,我們針對(duì)俄羅斯方塊游戲,初步地定下了要實(shí)現(xiàn)的功能,并將整個(gè)游戲分成若干個(gè)部分。接下來(lái)是人員的分工,每個(gè)人負(fù)責(zé)不同的功能,將復(fù)雜的程序變成簡(jiǎn)單的部分。在程序編寫階段,出現(xiàn)了不少技術(shù)上的問(wèn)題,各人既獨(dú)立又合作,遇難題一同攻克。出于我們基礎(chǔ)不扎實(shí)這方面的原因,我們?cè)诔绦蛟O(shè)計(jì)的時(shí)候遇到了不少問(wèn)題,甚至被布局管理器的簡(jiǎn)單問(wèn)題弄得焦頭爛額。但在一次次的錯(cuò)誤運(yùn)行中,我們對(duì)面向?qū)ο蟪绦蛟O(shè)計(jì)的概念理解得更加深刻,也因此重新燃起斗志??墒窃谌绶綁K預(yù)覽方面,我們始終不能完成這一功能,這也是我們?nèi)毕莸乃?/p>

41、在。 鑒于水平能力問(wèn)題,對(duì)于俄羅斯方塊的核心程序我們并未能形成一個(gè)有機(jī)的概念,對(duì)于其核心算法也未能準(zhǔn)確掌握。諸如某些庫(kù)函數(shù)已提供的方法,我們也不太了解。出于這樣的原因,我們上網(wǎng)查找了大量資料,借鑒了前人程序的一些方法,經(jīng)過(guò)深入研究學(xué)習(xí)后,再加工提煉,在原有的基礎(chǔ)上加入我們自己的想法,并進(jìn)行設(shè)計(jì)。 在設(shè)計(jì)開(kāi)發(fā)過(guò)程中,我們不但需要處理好各個(gè)類之間的集成關(guān)系和繼承機(jī)制,還要處理各個(gè)類的相應(yīng)的封裝,并且還要協(xié)調(diào)好各個(gè)模塊之間的邏輯依賴關(guān)系和數(shù)據(jù)通信關(guān)系。通過(guò)這次的課程設(shè)計(jì),我們更深地體會(huì)到軟件工程的理念,并以一個(gè)程序員應(yīng)有的素質(zhì)來(lái)要求自己,大致掌握了軟件開(kāi)發(fā)的基本過(guò)程,也感受到團(tuán)隊(duì)合作的重要性。俄羅斯方塊游戲的設(shè)計(jì)對(duì)于每個(gè)C#語(yǔ)言設(shè)計(jì)者來(lái)說(shuō),都是一個(gè)很好的提高和進(jìn)階的鍛煉機(jī)會(huì)。 5. 參考文獻(xiàn) C#程序設(shè)計(jì)基礎(chǔ)教程與實(shí)訓(xùn)(陳廣)電子教案 葉乃文 喻國(guó)寶.面向?qū)ο蟪绦蛟O(shè)計(jì).清華大學(xué)出版社 6. 附錄 Microsoft Visual Studio 2008安裝目錄下有次文檔可供使用:C#語(yǔ)言規(guī)范3.0版.doc

展開(kāi)閱讀全文
溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!