2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論