版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> C#程序設(shè)計實訓(xùn)報告</p><p> 題目:5. 俄羅斯方塊</p><p> 院 系 信息工程系_______</p><p> 專 業(yè)_____計算機科學(xué)與技術(shù)_</p><p> 年級班別_____ ____ ___</p><p> 學(xué)
2、 號 </p><p> 學(xué)生姓名_____ ___________</p><p> 指導(dǎo)教師_____ ___________</p><p> 成 績 </p><p> 2011 年 12 月 </
3、p><p><b> 系統(tǒng)設(shè)計要求</b></p><p><b> 需求分析</b></p><p> 本系統(tǒng)為一個用C#實現(xiàn)的為我們所熟悉的簡單的俄羅斯方塊游戲,該系統(tǒng)的具體功能如下:</p><p> 能簡便的開始游戲,游戲中的方塊的功能與日常我們所熟悉的游戲的功能一致,各種塊的設(shè)置也一致
4、,包括塊的旋轉(zhuǎn),加速下降,平移,滿行消去,到頂游戲結(jié)束功能;</p><p> 能夠自定義游戲中功能鍵的具體按鍵,設(shè)置游戲的級別,即方塊下降的速度等,并在設(shè)置后立即生效,在游戲中立刻體現(xiàn),在下次程序運行時讀取上次設(shè)置的游戲環(huán)境;</p><p> 顯示下一方塊提示信息,以及游戲數(shù)據(jù)的統(tǒng)計,如速度,按鍵速度,分數(shù)行者等等;</p><p> 游戲有級別設(shè)置,級別
5、越高,方塊下降的速度越快,當(dāng)?shù)竭_一定分數(shù)后進入下一級別;</p><p><b> 界面要求</b></p><p> 要求界面簡潔美觀,簡單易用。</p><p><b> 設(shè)計環(huán)境</b></p><p> 本程序選擇Visual Studio 2008作為實驗環(huán)境。</p>
6、<p><b> 設(shè)計思路</b></p><p> 用面向?qū)ο蟮姆椒ǚ治鱿到y(tǒng)</p><p> 對于俄羅斯方塊來說,我們可以定義一個類,專門來描述俄羅斯方塊,在這個類中,包含與之相關(guān)的方法、屬性和字段,通過封裝,實現(xiàn)其業(yè)務(wù)邏輯。其中,每一個俄羅斯方塊都有相同的特征,由4個小正方形構(gòu)成,有旋轉(zhuǎn),移動,下落的動作,行被填滿除去構(gòu)成行的小正方體塊。基中
7、塊的形狀類型有7種:田、一、L、倒L、Z、倒Z、上。</p><p> 在主窗口中,通過調(diào)用俄羅斯方塊類來實現(xiàn)程序的表示層,在該窗口中通過兩個Panel控件來實現(xiàn)方塊疊放窗口和下一方塊信息窗口;調(diào)用設(shè)置窗口,保存設(shè)計窗口類傳回的信息,并設(shè)置到游戲中去,保存在配置文件中;</p><p> 在設(shè)置窗口中,以良好的界面提供用戶自定義快捷鍵的接口,保存相應(yīng)設(shè)置參數(shù),以提供給調(diào)用窗口。<
8、/p><p><b> 概要設(shè)計</b></p><p> 根據(jù)設(shè)計思路,可以為系統(tǒng)設(shè)計三個類,實現(xiàn)俄羅斯方塊其本塊的類RussiaBlock繼承Object類,主窗體類MainForm類,設(shè)置窗體類SettingForm類。</p><p> RussiaBlock類</p><p><b> 字段<
9、;/b></p><p> private int shapeNO;//形狀號</p><p> private Control con;//繪圖控件</p><p> private Point[] pos;//當(dāng)前位置</p><p> private Point[] lastPos;//最后位置</p>&l
10、t;p> private int leftBorder;//左邊界</p><p> private int bottomBorder;//下邊界</p><p> private int unitPix;//每塊象素數(shù)</p><p> /// <summary></p><p> /// 當(dāng)前塊總個數(shù)</
11、p><p> /// </summary></p><p> private int blockNum = 0;//當(dāng)前塊總個數(shù)</p><p> private int rowDelNum = 0;//已構(gòu)成滿行被消去的行數(shù)</p><p> private bool[,] aroundExist;//周邊的位置是否有塊&l
12、t;/p><p> private Color[,] aroundColor;//周邊的著色</p><p> private Color color;//當(dāng)前塊顏色</p><p><b> 屬性</b></p><p> public int RowDelNum//當(dāng)前塊總個數(shù)</p><p&
13、gt; public int BlockNum//當(dāng)前塊總個數(shù)</p><p><b> 私有方法</b></p><p> private void SetLastPos()//設(shè)置方塊的最后位置</p><p> private void SetPos(int shapeNO, Point firstPos)//設(shè)置方塊的當(dāng)前位置,
14、shapeNO方塊號,firstPos初始位置 </p><p> private bool CanMove(int direction)//塊是否還可繼續(xù)移動包括下和左右 </p><p> private bool CanRotate(Point[] pos)//判斷當(dāng)前塊是否是可以進行翻轉(zhuǎn),位置確定則不能,還沒確定則可以 </p><
15、;p> private void DelRows()//一行中所有格填滿,刪除該行. </p><p> private void DrawOne(int x, int y, Color color, Graphics gra)//在指定的位置繪制方塊中的一塊 </p><p><b> 公共方法</b></p><
16、;p> public void EraseLast()//最后方塊位置的顯示.原理:將顯示的窗口方塊位置無效,強制發(fā)生重繪事件 </p><p> public void FixBlock()//填補行 </p><p> public bool GeneBlock(int shapeNO, Point firstPos, Color color)//產(chǎn)生下一方塊&l
17、t;/p><p> public bool Rotate()//旋轉(zhuǎn)動作 </p><p> public bool Move(int direction)//移動 </p><p> public void Drop()//直落 </p><p> public void DrawBlocks(Rectangle re
18、c)//在指定的位置繪制方塊,包括塊小塊 </p><p><b> MainForm類</b></p><p><b> 主要字段</b></p><p> private RussiaBlock block;// 方塊實例</p><p> private RussiaBloc
19、k nextBlock;// 下一基本塊實例</p><p> private int nextShapeNO;// 下一基本塊形狀號</p><p> private bool paused;//已暫停</p><p> private DateTime atStart;//開始時間</p><p> private DateTim
20、e atPause;//暫停時間</p><p> private TimeSpan pauseTime;//暫停間隔時間</p><p> private Keys[] keys;//按鍵</p><p> private int startLevel;// 開始級別</p><p> private bool trans;// 改
21、變級別</p><p><b> 主要方法</b></p><p> private void MainForm_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) // 按鍵事件</p><p> private void panel1_Paint(object sen
22、der, System.Windows.Forms.PaintEventArgs e) // 游戲窗格繪制</p><p> void timer1_Tick(object sender, System.EventArgs e) // 定時時鐘處理函數(shù),使基本塊自動下降</p><p> private void panel2_Paint // 下一塊窗格繪制</p>&
23、lt;p> btnPause_Click(object sender, System.EventArgs e)// 暫停游戲</p><p> btnSetting_Click(object sender, System.EventArgs e) // 設(shè)置環(huán)境</p><p> label5_MouseEnter(object sender, System.EventArgs
24、 e) // 顯示幫助</p><p> private void btnStart_Click // 開始游戲</p><p> private void Initiate()// 初始化環(huán)境</p><p> private void Start()// 開始游戲</p><p> private void Fail()// 游戲
25、失敗</p><p> private bool CreateBlock()// 建立基本塊</p><p> private void CreateNextBlock()// 建立下一基本塊</p><p> private void FixAndCreate()// 填補方塊視圖并建立新塊</p><p> private voi
26、d SaveSetting()// 保存設(shè)置</p><p> SettingForm類</p><p><b> 主要方法:</b></p><p> private void ChangeKey (TextBox textBox,System.Windows.Forms.KeyEventArgs e,int i)</p>
27、<p><b> 系統(tǒng)功能模塊圖</b></p><p> 方塊類RussiaBlock</p><p> 主窗口類MainForm</p><p> 設(shè)置窗口類SetttingForm</p><p> 3個類圖放在一起,如下所示</p><p> 系統(tǒng)流程圖、類的層次圖
28、</p><p><b> 流程圖</b></p><p><b> 類的結(jié)構(gòu)圖</b></p><p><b> 調(diào)試過程</b></p><p><b> 程序主界面</b></p><p><b> 設(shè)置界
29、面</b></p><p><b> 開始游戲</b></p><p><b> 游戲結(jié)束</b></p><p><b> 暫停游戲</b></p><p><b> 關(guān)鍵程序代碼</b></p><p>
30、RussiaBlock類</p><p> 以下涉及的詞語基本塊指的是由四個小方塊構(gòu)成的實體,四個小方塊指的是小正方形。方塊與基本塊同義。</p><p> 構(gòu)造函數(shù),通過給定的參數(shù):控件實例,左邊界,底邊界,小方塊(一個基本塊由4個小方塊構(gòu)成)單位象素,形狀號,起始位置,顏色。</p><p> public RussiaBlock(Control con,
31、int leftBorder,int bottomBorder,int unitPix,int shapeNO,Point firstPos,Color color)//構(gòu)造一個游戲中方塊實例的構(gòu)造函數(shù),如Z形塊等</p><p><b> {</b></p><p> this.con=con;</p><p> this.leftBo
32、rder=leftBorder;</p><p> this.bottomBorder=bottomBorder;</p><p> this.unitPix=unitPix;</p><p> this.SetPos(shapeNO,firstPos);</p><p> this.color=color;</p>&
33、lt;p> this.aroundExist=new bool[leftBorder+1,bottomBorder+1];</p><p> this.aroundColor=new Color[leftBorder+1,bottomBorder+1];</p><p> this.lastPos=new Point[4];//每一個基本塊中都相同的擁有N(4)個方格,通過N個
34、方格的左上角位置可以確定塊在視圖中的位置}</p><p> 設(shè)置方塊的最后位置,用來保存上次方塊的位置</p><p> private void SetLastPos()//設(shè)置方塊的最后位置</p><p><b> {</b></p><p> for (int i = 0; i < this.
35、pos.Length; i++)</p><p><b> {</b></p><p> this.lastPos[i] = this.pos[i];</p><p><b> }</b></p><p><b> }</b></p><p>
36、 是否能移動,如果移動后與其他小方塊重疊,則不能移動,可通過類的私有成員aroundExist[]數(shù)組來確定,該數(shù)組保存的就是現(xiàn)方塊圖中各個位置是否已存在小方塊,true表示存在。</p><p> private bool CanMove(int direction)//塊是否還可繼續(xù)移動包括下和左右</p><p><b> {</b></p>
37、<p> bool canMove = true;</p><p> if (direction == 0)//左</p><p><b> {</b></p><p> foreach (Point p in this.pos)</p><p><b> {</b></p
38、><p> if (p.X - 1 < 0 || this.aroundExist[p.X - 1, p.Y])</p><p><b> {</b></p><p> canMove = false;</p><p><b> break;</b></p><p>
39、;<b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> else if (direction == 1)//右</p><p><b> {</b></p><p&
40、gt; foreach (Point p in this.pos)</p><p><b> {</b></p><p> if (p.X + 1 > this.leftBorder || this.aroundExist[p.X + 1, p.Y])</p><p><b> {</b></p>
41、<p> canMove = false;</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>&
42、lt;p><b> else//下</b></p><p><b> {</b></p><p> foreach (Point p in this.pos)</p><p><b> {</b></p><p> if (p.Y + 1 > this.b
43、ottomBorder || this.aroundExist[p.X, p.Y + 1])</p><p><b> {</b></p><p> canMove = false;</p><p><b> break;</b></p><p><b> }</b>&
44、lt;/p><p><b> }</b></p><p><b> }</b></p><p> return canMove;</p><p><b> }</b></p><p> 當(dāng)前塊是否是可以進行翻轉(zhuǎn),如果已靠底或到達邊界,或者翻轉(zhuǎn)后是與
45、已有的小方塊重疊則不能進行翻轉(zhuǎn)。</p><p> private bool CanRotate(Point[] pos)//判斷當(dāng)前塊是否是可以進行翻轉(zhuǎn),位置確定則不能,還沒確定則可以</p><p><b> {</b></p><p> bool canRotate = true;</p><p> for
46、each (Point p in pos)</p><p><b> {</b></p><p> if (p.X < 0 || p.X > this.leftBorder || p.Y < 0 || p.Y > this.bottomBorder || this.aroundExist[p.X, p.Y])</p><
47、p><b> {</b></p><p> canRotate = false;</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p&
48、gt; if (canRotate == true)</p><p> this.SetLastPos();</p><p> return canRotate;</p><p><b> }</b></p><p> 在指定的位置繪制方塊中的一塊</p><p> private v
49、oid DrawOne(int x, int y, Color color, Graphics gra)//在指定的位置繪制方塊中的一塊</p><p><b> {</b></p><p> gra.FillRectangle(new SolidBrush(color), x * unitPix + 1, y * unitPix + 1, this.unitPi
50、x - 1, this.unitPix - 1);</p><p> gra.DrawRectangle(new Pen(Color.Black, 1), x * unitPix, y * unitPix, unitPix, unitPix);</p><p><b> }</b></p><p> 最后的一塊方塊位置的顯示.原理:將窗口
51、顯示的方塊位置無效,強制發(fā)生重繪事件</p><p> public void EraseLast()//最后方塊位置的顯示.原理:將顯示的窗口方塊位置無效,強制發(fā)生重繪事件</p><p><b> {</b></p><p> foreach(Point p in this.lastPos)</p><p>&
52、lt;b> {</b></p><p> this.con.Invalidate(new Rectangle(p.X*unitPix,p.Y*unitPix,unitPix+1,unitPix+1));</p><p><b> }</b></p><p><b> }</b></p&g
53、t;<p> 填補方塊圖,如果發(fā)生滿行情況則刪去滿行</p><p> public void FixBlock()//填補方塊圖</p><p><b> {</b></p><p> this.blockNum++;</p><p> foreach(Point p in this.pos)&
54、lt;/p><p><b> {</b></p><p> this.aroundExist[p.X,p.Y]=true;</p><p> this.aroundColor[p.X,p.Y]=this.color;</p><p><b> }</b></p><p>
55、 this.DelRows();</p><p><b> }</b></p><p><b> 產(chǎn)生下一方塊</b></p><p> public bool GeneBlock(int shapeNO, Point firstPos, Color color)//產(chǎn)生下一方塊</p><p&
56、gt;<b> {</b></p><p> this.SetLastPos();</p><p> this.EraseLast();</p><p> this.SetPos(shapeNO,firstPos);</p><p> if(!this.CanRotate(this.pos))</p
57、><p><b> {</b></p><p> this.pos=null;</p><p> return false;</p><p><b> }</b></p><p><b> else </b></p><p>
58、;<b> {</b></p><p> this.color=color;</p><p> return true;</p><p><b> }</b></p><p><b> }</b></p><p> 旋轉(zhuǎn)動作,該函數(shù)處理過程復(fù)
59、雜,相應(yīng)代碼詳見工程文件。通過對各種情況的判斷,調(diào)用CanRotate函數(shù),成功則進行旋轉(zhuǎn)。</p><p> 移動動作,按照下、左、右三個方向之一來移動</p><p> public bool Move(int direction)//移動</p><p><b> {</b></p><p> int of
60、fx=0,offy=0;</p><p> if(direction==0 && this.CanMove(0))//左</p><p><b> {</b></p><p><b> offx=-1;</b></p><p><b> offy=0;</b&
61、gt;</p><p><b> }</b></p><p> else if(direction==1 && this.CanMove(1))//右</p><p><b> {</b></p><p><b> offx=1;</b></p&g
62、t;<p><b> offy=0;</b></p><p><b> }</b></p><p> else if(direction==2 && this.CanMove(2))//下</p><p><b> {</b></p><p&g
63、t;<b> offx=0;</b></p><p><b> offy=1;</b></p><p><b> }</b></p><p><b> else </b></p><p><b> {</b></p&g
64、t;<p> return false;</p><p><b> }</b></p><p> this.SetLastPos();</p><p> for(int i=0;i<this.pos.Length;i++)</p><p><b> {</b></
65、p><p> pos[i].Offset(offx,offy);</p><p><b> }</b></p><p> return true;</p><p><b> }</b></p><p><b> 地</b></p>&
66、lt;p><b> MainForm類</b></p><p> 時鐘觸發(fā)處理函數(shù),使方塊自動的向下移動,每0.1秒觸發(fā)一次</p><p> private void timer1_Tick(object sender, System.EventArgs e)</p><p><b> {</b></
67、p><p> if(block!=null && !this.failed)</p><p><b> {</b></p><p> if(!block.Move(2))</p><p><b> {</b></p><p> this.FixAndCr
68、eate();</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> block.EraseLast();</p><p><b> }</b
69、></p><p><b> }</b></p><p><b> }</b></p><p><b> 初始化,讀取配置</b></p><p> private void Initiate()</p><p><b> {&
70、lt;/b></p><p><b> try</b></p><p><b> {</b></p><p> XmlDocument doc = new XmlDocument();</p><p> doc.Load("c:\\setting.cob");<
71、;/p><p> XmlNodeList nodes=doc.DocumentElement.ChildNodes;</p><p> this.startLevel=Convert.ToInt32(nodes[0].InnerText);</p><p> this.level=this.startLevel;</p><p> thi
72、s.trans=Convert.ToBoolean(nodes[1].InnerText);</p><p> keys=new Keys[5];</p><p> for(int i=0;i<nodes[2].ChildNodes.Count;i++)</p><p><b> {</b></p><p>
73、 KeysConverter kc=new KeysConverter();</p><p> this.keys[i]=(Keys)(kc.ConvertFromString(nodes[2].ChildNodes[i].InnerText));</p><p><b> }</b></p><p><b> }<
74、;/b></p><p><b> catch</b></p><p><b> {</b></p><p> this.trans=false;</p><p> keys=new Keys[5];</p><p> keys[0]=Keys.Left;&l
75、t;/p><p> keys[1]=Keys.Right;</p><p> keys[2]=Keys.Down;</p><p> keys[3]=Keys.Up;</p><p> keys[4]=Keys.NumPad0;</p><p> this.level=1;</p><p>
76、; this.startLevel=1;</p><p><b> }</b></p><p> this.timer1.Interval=500-50*(level-1);</p><p> this.label4.Text="級別:"+this.startLevel;</p><p>&
77、lt;b> if(trans)</b></p><p><b> {</b></p><p> this.TransparencyKey=Color.Black;</p><p><b> }</b></p><p><b> }</b></p
78、><p><b> 建立基本塊</b></p><p> private bool CreateBlock()</p><p><b> {</b></p><p> Point firstPos;</p><p> Color color;</p>&l
79、t;p> if(this.nextShapeNO==0)</p><p><b> {</b></p><p> Random rand=new Random();</p><p> this.nextShapeNO=rand.Next(1,8);</p><p><b> }</b&
80、gt;</p><p> switch(this.nextShapeNO)</p><p><b> {</b></p><p> case 1://田</p><p> firstPos=new Point(4,0);</p><p> color=Color.Turquoise;&l
81、t;/p><p><b> break;</b></p><p> case 2://一</p><p> firstPos=new Point(3,0);</p><p> color=Color.Red;</p><p><b> break;</b></p&
82、gt;<p> case 3://土</p><p> firstPos=new Point(4,0);</p><p> color=Color.Silver;</p><p><b> break;</b></p><p> case 4://z</p><p> f
83、irstPos=new Point(4,0);</p><p> color=Color.LawnGreen;</p><p><b> break;</b></p><p> case 5://倒z</p><p> firstPos=new Point(4,1);</p><p>
84、color=Color.DodgerBlue;</p><p><b> break;</b></p><p> case 6://L</p><p> firstPos=new Point(4,0);</p><p> color=Color.Yellow;</p><p><b&
85、gt; break;</b></p><p> default://倒L</p><p> firstPos=new Point(4,0);</p><p> color=Color.Salmon;</p><p><b> break;</b></p><p><b&
86、gt; }</b></p><p> if(this.block==null)</p><p><b> {</b></p><p> block=new RussiaBlock(this.panel1,9,19,25,this.nextShapeNO,firstPos,color);</p><p>
87、;<b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> if(!block.GeneBlock(this.nextShapeNO,firstPos,color))</p><p><b>
88、{</b></p><p> return false;</p><p><b> }</b></p><p><b> }</b></p><p> block.EraseLast();</p><p> block.Move(2);</p>
89、;<p> return true;</p><p><b> }</b></p><p><b> 建立下一基本塊</b></p><p> private void CreateNextBlock()</p><p><b> {</b></p
90、><p> Random rand=new Random();</p><p> this.nextShapeNO=rand.Next(1,8);</p><p> Point firstPos;</p><p> Color color;</p><p> switch(this.nextShapeNO)&
91、lt;/p><p><b> {</b></p><p> case 1://田</p><p> firstPos=new Point(1,0);</p><p> color=Color.Turquoise;</p><p><b> break;</b></
92、p><p> case 2://一</p><p> firstPos=new Point(0,1);</p><p> color=Color.Red;</p><p><b> break;</b></p><p> case 3://土</p><p> fi
93、rstPos=new Point(0,0);</p><p> color=Color.Silver;</p><p><b> break;</b></p><p> case 4://z</p><p> firstPos=new Point(0,0);</p><p> color
94、=Color.LawnGreen;</p><p><b> break;</b></p><p> case 5://倒z</p><p> firstPos=new Point(0,1);</p><p> color=Color.DodgerBlue;</p><p><b&g
95、t; break;</b></p><p> case 6://L</p><p> firstPos=new Point(0,0);</p><p> color=Color.Yellow;</p><p><b> break;</b></p><p> default
96、://倒L</p><p> firstPos=new Point(0,0);</p><p> color=Color.Salmon;</p><p><b> break;</b></p><p><b> }</b></p><p> if(nextBlock
97、==null)</p><p> nextBlock=new RussiaBlock(this.panel2,3,1,20,this.nextShapeNO,firstPos,color);</p><p><b> else</b></p><p><b> {</b></p><p>
98、nextBlock.GeneBlock(this.nextShapeNO,firstPos,color);</p><p> nextBlock.EraseLast();</p><p><b> }</b></p><p><b> }</b></p><p> 填補塊視圖并產(chǎn)生下一塊&l
99、t;/p><p> private void FixAndCreate()</p><p><b> {</b></p><p> block.FixBlock();</p><p> this.label1.Text="手速:"+Math.Round((double)block.BlockNum
100、/((TimeSpan)(DateTime.Now-this.atStart)).Subtract(this.pauseTime).TotalSeconds,3)+"塊/秒";</p><p> this.label2.Text="塊數(shù):"+block.BlockNum;</p><p> this.label3.Text="分數(shù):&q
101、uot;+block.RowDelNum*MainForm.rowScore;</p><p> if(this.level<10 && block.RowDelNum-this.rowDelNum>=30)</p><p><b> {</b></p><p> this.rowDelNum+=30;<
102、/p><p> this.level++;</p><p> this.timer1.Interval=500-50*(level-1);</p><p> this.label4.Text="級別: "+this.level;</p><p><b> }</b></p><
103、;p> bool createOK=this.CreateBlock();</p><p> this.CreateNextBlock();</p><p> if(!createOK)</p><p> this.Fail();</p><p><b> }</b></p><
104、;p><b> 保存配置</b></p><p> private void SaveSetting()</p><p><b> {</b></p><p><b> try</b></p><p><b> {</b></p>
105、;<p> XmlDocument doc = new XmlDocument();</p><p> XmlDeclaration xmlDec=doc.CreateXmlDeclaration ("1.0","gb2312",null);</p><p> XmlElement setting=doc.CreateElemen
106、t("SETTING");</p><p> doc.AppendChild(setting);</p><p> XmlElement level=doc.CreateElement("LEVEL");</p><p> level.InnerText=this.startLevel.ToString();</p
107、><p> setting.AppendChild(level);</p><p> XmlElement trans=doc.CreateElement("TRANSPARENT");</p><p> trans.InnerText=this.trans.ToString();</p><p> setting.A
108、ppendChild(trans);</p><p> XmlElement keys=doc.CreateElement("KEYS"); </p><p> setting.AppendChild(keys);</p><p> foreach(Keys k in this.keys)</p><p>&l
109、t;b> {</b></p><p> KeysConverter kc=new KeysConverter();</p><p> XmlElement x=doc.CreateElement("SUBKEYS");</p><p> x.InnerText=kc.ConvertToString(k);</p&
110、gt;<p> keys.AppendChild(x);</p><p><b> }</b></p><p> XmlElement root=doc.DocumentElement;</p><p> doc.InsertBefore(xmlDec,root);</p><p> doc.Sa
111、ve("c:\\setting.cob");</p><p><b> }</b></p><p> catch(Exception xe)</p><p><b> {</b></p><p> MessageBox.Show(xe.Message);</p>
112、;<p><b> }</b></p><p><b> }</b></p><p><b> 總結(jié)</b></p><p><b> 設(shè)計總結(jié)</b></p><p> 本設(shè)計通過Vusial Studio 方便的Windows表
113、單設(shè)計界面,增加了相應(yīng)的按鈕單擊響應(yīng)函數(shù),通過與用戶的交互,反饋回用戶所需要的信息。</p><p> 設(shè)計出的程序符合設(shè)計需求,既有基本的游戲邏輯功能,又能保存用戶的設(shè)置,取得較好的實驗結(jié)果。</p><p> 通過本次實驗,學(xué)習(xí)并實踐了面向?qū)ο蟮姆椒?,以及類之間的繼承與派生的關(guān)系,成員函數(shù)、變量的調(diào)用的問題,達到了設(shè)計的預(yù)期效果。</p><p> 通過本
114、次實驗,深入了解到C#語言的基礎(chǔ)知識,掌握面向?qū)ο缶幊痰姆治鲈O(shè)計方法,以及與面向?qū)ο蠹夹g(shù)相關(guān)的一些軟件開發(fā)技術(shù),掌握在 Visual Studio環(huán)境下進行可視化程序設(shè)計技術(shù)。通過本次實踐具體的項目,為進一步開展相關(guān)領(lǐng)域的學(xué)習(xí)和科研打下良好的基礎(chǔ)</p><p><b> 設(shè)計體會</b></p><p> 這個學(xué)期“.Net架構(gòu)與C#程序設(shè)計”課程讓我接觸了面向
115、對象的程序設(shè)計,Visual stdio的可視化編程環(huán)境讓我們可以制作界面友好的Windows環(huán)境,利用IDE可以快捷地開發(fā)出所要的可視化的環(huán)境。C#是是一種完全面向?qū)ο蟮恼Z言,使用對象的思想來編程,既可以對相應(yīng)的數(shù)據(jù)進行保護,也可以相應(yīng)的與其他的類共享,有利于程序的結(jié)構(gòu)化,方面程序的編寫。Viusal Studio下我們可以快速的進行開發(fā)。但是,也要看到其對WindowsApi函數(shù)的封裝也導(dǎo)致了我們在學(xué)習(xí)的時候?qū)indows程序的運
116、行機制不了解,導(dǎo)致了學(xué)習(xí)時候的迷惑。本學(xué)期配套的書籍<< C#程序設(shè)計教程>>雖然簡單明了,但是對于機制原理的解釋和說明過少,因此,學(xué)習(xí)的時候應(yīng)該不只滿足于這本書中的內(nèi)容,應(yīng)該多找一些書籍進行知識的擴展了加深。</p><p> 通過本次課程設(shè)計,編寫一個熟悉的俄羅斯方塊游戲程序,讓我們熟悉了C#下用GDI+的使用,加深了類以及對象概念的理解,為進一步學(xué)習(xí)其他完全面對對象的語言打下了良好
117、的基礎(chǔ)。</p><p> 開發(fā)一個工程時,應(yīng)該先制定好程序的框架,規(guī)劃好相應(yīng)的功能模塊,使程序模塊化,易于日后的擴展和完善。其次是程序的數(shù)據(jù)結(jié)構(gòu),良好的數(shù)據(jù)結(jié)構(gòu)能使程序高效化,功能強大。本次實現(xiàn)中最重要的是方塊類的編寫,其定義的好壞和封裝性的良好是整個程序運行的基礎(chǔ),屬于程序的業(yè)務(wù)邏輯功能塊,主框架中通過調(diào)用該類,實現(xiàn)程序的表示層。再之,優(yōu)秀的算法能提高程序的效率。優(yōu)秀的資料查閱能力也是非?;静⑶沂种匾?/p>
118、。本次程序中,當(dāng)方塊構(gòu)成完整的行時應(yīng)該消去,其邏輯怎么實現(xiàn)是一直困惑著我的問題,在網(wǎng)上尋找了很久,終于在網(wǎng)上找到一份教程,在看完教程后,按照其指導(dǎo),終于完成了該邏輯功能的編寫,如果單憑自己的能力,在兩個星期內(nèi)想做出一個功能完整的程序?qū)崒俨灰?。善于借鑒他人的結(jié)果和理論是減少重復(fù)勞動的好辦法。最后,良好的程序編寫風(fēng)格有利于交流和日后的維護。一個真正實用的程序不單單這樣的簡單,常常需要多人的合作與協(xié)商,因此,良好的風(fēng)格是塑造自己成為一個優(yōu)秀的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《c++俄羅斯方塊》課程設(shè)計--俄羅斯方塊
- c課程設(shè)計--俄羅斯方塊
- c++俄羅斯方塊課程設(shè)計
- c#俄羅斯方塊課程設(shè)計
- c++俄羅斯方塊課程設(shè)計
- 俄羅斯方塊課程設(shè)計
- 俄羅斯方塊課程設(shè)計
- 課程設(shè)計---俄羅斯方塊
- 俄羅斯方塊課程設(shè)計
- 俄羅斯方塊課程設(shè)計
- 俄羅斯方塊課程設(shè)計
- 俄羅斯方塊課程設(shè)計
- 俄羅斯方塊課程設(shè)計
- 俄羅斯方塊課程設(shè)計-- 用c++實現(xiàn)的俄羅斯方塊程序設(shè)計
- 俄羅斯方塊c++課程設(shè)計報告
- c語言課程設(shè)計報告-俄羅斯方塊
- 俄羅斯方塊課程設(shè)計報告
- 俄羅斯方塊課程設(shè)計報告
- 簡單俄羅斯方塊課程設(shè)計
- java俄羅斯方塊課程設(shè)計
評論
0/150
提交評論