版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> C#程序設(shè)計實訓報告</p><p> 題目:5. 俄羅斯方塊</p><p> 院 系 信息工程系_______</p><p> 專 業(yè)_____計算機科學與技術(shù)_</p><p> 年級班別_____ ____ ___</p><p> 學
2、 號 </p><p> 學生姓名_____ ___________</p><p> 指導教師_____ ___________</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、越高,方塊下降的速度越快,當?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)成行的小正方體塊?;?/p>
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;//當前位置</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> /// 當前塊總個數(shù)</
11、p><p> /// </summary></p><p> private int blockNum = 0;//當前塊總個數(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;//當前塊顏色</p><p><b> 屬性</b></p><p> public int RowDelNum//當前塊總個數(shù)</p><p&
13、gt; public int BlockNum//當前塊總個數(shù)</p><p><b> 私有方法</b></p><p> private void SetLastPos()//設(shè)置方塊的最后位置</p><p> private void SetPos(int shapeNO, Point firstPos)//設(shè)置方塊的當前位置,
14、shapeNO方塊號,firstPos初始位置 </p><p> private bool CanMove(int direction)//塊是否還可繼續(xù)移動包括下和左右 </p><p> private bool CanRotate(Point[] pos)//判斷當前塊是否是可以進行翻轉(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> 當前塊是否是可以進行翻轉(zhuǎn),如果已靠底或到達邊界,或者翻轉(zhuǎn)后是與
45、已有的小方塊重疊則不能進行翻轉(zhuǎn)。</p><p> private bool CanRotate(Point[] pos)//判斷當前塊是否是可以進行翻轉(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ù)處理過程復
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> 通過本次實驗,學習并實踐了面向?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)域的學習和科研打下良好的基礎(chǔ)</p><p><b> 設(shè)計體會</b></p><p> 這個學期“.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ù)的封裝也導致了我們在學習的時候?qū)indows程序的運
116、行機制不了解,導致了學習時候的迷惑。本學期配套的書籍<< C#程序設(shè)計教程>>雖然簡單明了,但是對于機制原理的解釋和說明過少,因此,學習的時候應(yīng)該不只滿足于這本書中的內(nèi)容,應(yīng)該多找一些書籍進行知識的擴展了加深。</p><p> 通過本次課程設(shè)計,編寫一個熟悉的俄羅斯方塊游戲程序,讓我們熟悉了C#下用GDI+的使用,加深了類以及對象概念的理解,為進一步學習其他完全面對對象的語言打下了良好
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)秀的資料查閱能力也是非常基本并且十分重要的
118、。本次程序中,當方塊構(gòu)成完整的行時應(yīng)該消去,其邏輯怎么實現(xiàn)是一直困惑著我的問題,在網(wǎng)上尋找了很久,終于在網(wǎng)上找到一份教程,在看完教程后,按照其指導,終于完成了該邏輯功能的編寫,如果單憑自己的能力,在兩個星期內(nèi)想做出一個功能完整的程序?qū)崒俨灰?。善于借鑒他人的結(jié)果和理論是減少重復勞動的好辦法。最后,良好的程序編寫風格有利于交流和日后的維護。一個真正實用的程序不單單這樣的簡單,常常需要多人的合作與協(xié)商,因此,良好的風格是塑造自己成為一個優(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)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《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
提交評論