九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

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

  • 資源ID:21899227       資源大?。?span id="24d9guoke414" class="font-tahoma">3.46MB        全文頁數(shù):16頁
  • 資源格式: DOC        下載積分:15積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要15積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號,方便查詢和重復(fù)下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號:
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。

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

課 程 設(shè) 計(jì) 報(bào) 告課程設(shè)計(jì)名稱:俄羅斯方塊 系 : 三系 學(xué)生姓名: 班 級: 學(xué) 號: 成 績: 指導(dǎo)教師: 開課時(shí)間: 學(xué)年 學(xué)期目錄摘 要21.需求分析32.結(jié)構(gòu)設(shè)計(jì)32.1.系統(tǒng)模塊設(shè)計(jì)圖33.系統(tǒng)實(shí)現(xiàn)63.1.配置窗口63.1.1.磚塊樣式配置63.1.2.參數(shù)配置113.2.運(yùn)行窗口134.課程設(shè)計(jì)總結(jié)155.參考文獻(xiàn)156.附錄15摘 要在這兩周內(nèi)我制作了一個小游戲俄羅斯方塊。進(jìn)一步掌握C#語言的語法,并通過這個案例的制作。使得我知道了什么是程序開發(fā),如何進(jìn)行程序開發(fā)有個更明確的定位。這個游戲大家都玩過,都知道規(guī)則。我制作的這個俄羅斯方塊可以自己來訂做磚塊樣式。俄羅斯方塊是一款風(fēng)靡全球的電視游戲和掌上游戲機(jī)游戲,它曾經(jīng)造成的轟動與造成的經(jīng)濟(jì)價(jià)值可以說是游戲史上的意見大事。這款游戲最初是由蘇聯(lián)的游戲制作人Alex Pajitnov制作懂得,它看似簡單但變化無窮,令人上癮。相信大多數(shù)人都還記得為它癡迷得茶不思飯不想的那個俄羅斯方塊時(shí)代。究其歷史,俄羅斯方塊最早還是出現(xiàn)在PC機(jī)上,而我國的用戶都是通過紅白機(jī)了解、喜歡上他的。現(xiàn)在聯(lián)眾又將重新掀起這股讓人沉迷的俄羅斯方塊風(fēng)潮。對一般用戶來講,它的規(guī)則很簡單,容易上手,且游戲過程變化無窮,而在“聯(lián)眾俄羅斯方塊”中,更有一些聯(lián)眾網(wǎng)絡(luò)游戲所獨(dú)有的魅力有單機(jī)作戰(zhàn)與兩人在線對戰(zhàn)的兩種模式還增加了積分制,是用戶既能感受到游戲中的樂趣,也給用戶提供了一個展示自己高超技藝的舞臺。1. 需求分析俄羅斯方塊游戲是一個經(jīng)典的小游戲,由于它簡單有趣,因而得到了廣泛的流行,男女老幼都適合。而俄羅斯方塊游戲的設(shè)計(jì)工作復(fù)雜且富有挑戰(zhàn)性,它包含的內(nèi)容多,涉及的知識廣泛,與圖形界面聯(lián)系較大,包括界面的顯示與更新、數(shù)據(jù)收集等,在設(shè)計(jì)的過程中,必將運(yùn)用到各方面的知識,這對于C#語言設(shè)計(jì)者而言,是個很好的鍛煉機(jī)會。我采用一個5*5的矩陣來表示方塊的樣式。2. 結(jié)構(gòu)設(shè)計(jì)2.1. 系統(tǒng)模塊設(shè)計(jì)圖l 圖a.為實(shí)體建造計(jì)算機(jī)模型+struArr0000001100011000000000000blockStringConfigBlockSet首先要解決的問題是:怎樣把磚塊轉(zhuǎn)化成計(jì)算機(jī)能識別的類型?好讓計(jì)算機(jī)對其進(jìn)行邏輯處理;其次,如何存儲這些信息。l 圖b.存儲磚塊信息的過程用戶點(diǎn)擊配置磚塊樣式和顏色10111101解決把磚塊數(shù)據(jù)提取與轉(zhuǎn)存。l 圖c.畫出表示磚塊的一塊畫板只需要畫中間的四條線就夠啦,用到一個函數(shù),DrawLine()畫直線。圖d:把磚塊的樣式通過一個算法轉(zhuǎn)化成一個數(shù)組將大磚塊的每個小磚塊都編上代碼,抑郁訪問。圖e:把磚塊里面,有小磚塊按下的表示為1,其他為0.圖f:讀取數(shù)據(jù)時(shí),用公式計(jì)算數(shù)組下表下沒為存儲磚塊信息的類:磚塊Block磚塊信息BlockInfo磚塊組信息BlockGroup磚塊配置信息Config存儲配置信息BlockSet.xml存儲磚塊信息的數(shù)組InfoArr畫板Palette3. 系統(tǒng)實(shí)現(xiàn)3.1. 配置窗口3.1.1. 磚塊樣式配置a.畫模板中的初始圖形private void lblMode_Paint(object sender, PaintEventArgs e)/畫模板中的初始圖形 Graphics gp = e.Graphics;/定義的畫布對象 gp.Clear(Color.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);/畫豎白線 /填充矩陣中的方塊 SolidBrush s = new SolidBrush(blockColor); for (int x = 0; x < 5; x+) for (int y = 0; y < 5; y+) if (struArrx, y) gp.FillRectangle(s, 31 * x + 1, 31 * y + 1, 30, 30); 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ù)組第一個下標(biāo),yPos表示數(shù)組第二個下標(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; struArrxPos, yPos = !struArrxPos, yPos;/記錄方塊的形狀 bool b = struArrxPos, yPos; Graphics gp = lblMode.CreateGraphics();/得到lblMode的Graphics SolidBrush s=new SolidBrush (b ? blockColor : Color .Black );/創(chuàng)建一個刷子,并確定它的顏色 gp.FillRectangle (s,31*xPos+1,31*yPos+1,30,30);/給所點(diǎn)擊的方塊涂顏色 gp.Dispose ();/釋放Graphics c.顏色對話框private void lblColor_Click(object sender, EventArgs e)/配置模板中磚塊的顏色 colorDialog1.ShowDialog();/打開顏色對話框blockColor = colorDialog1.Color;/使磚塊的背景顏色置為所選顏色lblColor.BackColor = colorDialog1.Color;/使標(biāo)簽的背景顏色置為所選顏色 lblMode.Invalidate();/使顏色lblMode重畫,執(zhí)行它的paint事件 d.選擇右邊的列表框時(shí)所觸發(fā)的事件private void lsvBlockSet_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)/ 當(dāng)lsvBlockSet中所選的項(xiàng)發(fā)生改變時(shí)所觸發(fā)的事件 if (e.IsSelected)/避免重復(fù)執(zhí)行事件 blockColor = Color.FromArgb(int.Parse(e.Item.SubItems1.Text);/把字符串信息轉(zhuǎn)換為顏色類 lblColor.BackColor = blockColor; string s = e.Item.SubItems0.Text;/取磚塊樣式信息 for (int i = 0; i < s.Length; i+) struArri / 5, i % 5 = (si = 1);/i/5代表每一行,i%5代表每一列,即遍歷磚塊形狀的每一個字符,記錄在struArr中 lblMode.Invalidate(); e.增加一個磚塊樣式private void btnAdd_Click(object sender, EventArgs e)/向ListView中添加數(shù)據(jù) bool isEmpty = false;/首先查找圖案是否為空 foreach (bool i in struArr) if (i) isEmpty = true; break; if (!isEmpty) MessageBox.Show("圖案為空,請先用鼠標(biāo)點(diǎn)擊左窗口繪制圖案!", "提示窗口", MessageBoxButtons.OK, MessageBoxIcon.Information); return; StringBuilder sb = new StringBuilder(25);/定義一個可變字符字符串 foreach (bool i in struArr) sb.Append(i ? "1" : "0");/在此實(shí)例的結(jié)尾追加指定字符串的副本。 string blockString = sb.ToString(); /再檢查是否有重復(fù)圖案 foreach (ListViewItem item in lsvBlockSet.Items) if (item.SubItems0.Text = blockString)/判斷每個ListViewItem項(xiàng)的第一個小項(xiàng)的文本信息 MessageBox.Show("該圖案已經(jīng)存在!","提示窗口",MessageBoxButtons.OK ,MessageBoxIcon.Information); return; /把新磚塊圖案信息添加進(jìn)ListView ListViewItem myItem = new ListViewItem(); myItem = lsvBlockSet.Items.Add(blockString);/增加ListViewItem的一行數(shù)據(jù)的第一個 myItem.SubItems.Add(Convert.ToString(blockColor.ToArgb();/獲取包含myItem的所有子項(xiàng)的集合,并為其增加一個子項(xiàng)數(shù)據(jù)。 f.刪除一個磚塊樣式 private void btnDel_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("請?jiān)谟疫叴翱谶x擇一個條目進(jìn)行刪除","提示窗口",MessageBoxButtons .OK ,MessageBoxIcon .Information ); return; lsvBlockSet.Items.Remove(lsvBlockSet .SelectedItems0);/刪除被選中項(xiàng)目 MessageBox.Show("刪除成功!", "提示窗口", MessageBoxButtons.OK, MessageBoxIcon.Information); btnClear.PerformClick();/清空模塊中的磚塊 g.修改你所選中的磚塊樣式 private void btnUpdate_Click(object sender, EventArgs e)/更新lsvBlockSet內(nèi)的所選項(xiàng) if (lsvBlockSet.SelectedItems.Count = 0)/判斷是否有項(xiàng)目被選中 MessageBox.Show("請?jiān)谟疫叴翱谶x擇一個條目進(jìn)行修改!", "提示窗口", MessageBoxButtons.OK, MessageBoxIcon.Information); return; bool isEmpty = false;/判斷圖案是否為空 foreach (bool i in struArr) if (i) isEmpty = true; break; if (!isEmpty) MessageBox.Show("圖案為空,請先用鼠標(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.Append(i ? "1" : "0"); lsvBlockSet.SelectedItems0.SubItems0.Text = sb.ToString();/改變圖案信息 lsvBlockSet.SelectedItems0.SubItems1.Text = Convert.ToString(blockColor.ToArgb();/改變顏色信息 h. 清空模板中的圖形 private void btnClear_Click(object sender, EventArgs e)/清空模板中的圖形 for (int x = 0; x < 5; x+)/把struArr內(nèi)所有元素為false,實(shí)現(xiàn)清空 for (int y = 0; y < 5; y+) struArrx, y = false; lblMode.Invalidate();/使控件的整個圖面無效并導(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.SubItems0.Text,item.SubItems1.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 .DeasilRotateKey=(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=lblBackColor.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 <=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) /檢查是否存在沖突的快捷鍵 foreach (Control c in gbKeySet.Controls)/遍歷包含在控件內(nèi)的控件。 Control TempC = c as TextBox;/? if (TempC !=null &&(TextBox )TempC ).Text!="" ) if (int)(TextBox)TempC).Tag) = e.KeyValue)/Tag獲取或設(shè)置包含有關(guān)控件的數(shù)據(jù)的對象。 (TextBox )TempC ).Text ="" (TextBox )TempC ).Tag =Keys.None; (TextBox )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) p.PaintReady(e.Graphics);/重畫一下磚塊 b.開始游戲 private void btnStart_Click(object sender, EventArgs e)/開始 if (p != null) p.Close(); p = new Palette(paletteWidth, 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; if (btnPause.Text = "暫停") p.Pause(); btnPause.Text = "繼續(xù)" else p.EndPause(); btnPause.Text = "暫停" d.配置游戲 private void btnConfig_Click(object sender, EventArgs e) if (btnPause.Text = "暫停") btnPause.PerformClick(); using (FrmConfig frmConfig = new FrmConfig() frmConfig.ShowDialog(); e.繪制運(yùn)行窗口 private void pbRun_Paint(object sender, PaintEventArgs e)/運(yùn)行窗口的繪制 if (p!=null ) p.PaintPalette(e.Graphics);/重畫整個畫板 4. 課程設(shè)計(jì)總結(jié)我們用了將近半個月的時(shí)間,終于把俄羅斯方塊游戲完成了。這兩個月里,我們搜集資料、查看書籍,由于上學(xué)期對面向?qū)ο蟪绦蛟O(shè)計(jì)這門課程只是停留在略懂皮毛的理論階段,因此這個學(xué)期的實(shí)際操作對于我們來說有一定的難度。在系統(tǒng)分析階段,我們針對俄羅斯方塊游戲,初步地定下了要實(shí)現(xiàn)的功能,并將整個游戲分成若干個部分。接下來是人員的分工,每個人負(fù)責(zé)不同的功能,將復(fù)雜的程序變成簡單的部分。在程序編寫階段,出現(xiàn)了不少技術(shù)上的問題,各人既獨(dú)立又合作,遇難題一同攻克。出于我們基礎(chǔ)不扎實(shí)這方面的原因,我們在程序設(shè)計(jì)的時(shí)候遇到了不少問題,甚至被布局管理器的簡單問題弄得焦頭爛額。但在一次次的錯誤運(yùn)行中,我們對面向?qū)ο蟪绦蛟O(shè)計(jì)的概念理解得更加深刻,也因此重新燃起斗志??墒窃谌绶綁K預(yù)覽方面,我們始終不能完成這一功能,這也是我們?nèi)毕莸乃凇hb于水平能力問題,對于俄羅斯方塊的核心程序我們并未能形成一個有機(jī)的概念,對于其核心算法也未能準(zhǔn)確掌握。諸如某些庫函數(shù)已提供的方法,我們也不太了解。出于這樣的原因,我們上網(wǎng)查找了大量資料,借鑒了前人程序的一些方法,經(jīng)過深入研究學(xué)習(xí)后,再加工提煉,在原有的基礎(chǔ)上加入我們自己的想法,并進(jìn)行設(shè)計(jì)。在設(shè)計(jì)開發(fā)過程中,我們不但需要處理好各個類之間的集成關(guān)系和繼承機(jī)制,還要處理各個類的相應(yīng)的封裝,并且還要協(xié)調(diào)好各個模塊之間的邏輯依賴關(guān)系和數(shù)據(jù)通信關(guān)系。通過這次的課程設(shè)計(jì),我們更深地體會到軟件工程的理念,并以一個程序員應(yīng)有的素質(zhì)來要求自己,大致掌握了軟件開發(fā)的基本過程,也感受到團(tuán)隊(duì)合作的重要性。俄羅斯方塊游戲的設(shè)計(jì)對于每個C#語言設(shè)計(jì)者來說,都是一個很好的提高和進(jìn)階的鍛煉機(jī)會。5. 參考文獻(xiàn)C#程序設(shè)計(jì)基礎(chǔ)教程與實(shí)訓(xùn)(陳廣)電子教案葉乃文 喻國寶.面向?qū)ο蟪绦蛟O(shè)計(jì).清華大學(xué)出版社6. 附錄Microsoft Visual Studio 2008安裝目錄下有次文檔可供使用:C#語言規(guī)范3.0版.doc

注意事項(xiàng)

本文(俄羅斯方塊課程設(shè)計(jì))為本站會員(燈火****19)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

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

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


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